Module: RubyGettextExtractor::ExtractorMethods

### Home Classes Methods

### In Files

- lib/gettext_i18n_rails/ruby_gettext_extractor.rb

### Methods

- ::new
- #extract_key
- #extract_string
- #new_call
- #run

### Class/Module Index

Quicksearch

- GettextI18nRails
- GettextI18nRails::Backend
- GettextI18nRails::BaseParser
- GettextI18nRails::GettextHooks
- GettextI18nRails::HamlParser
- GettextI18nRails::HtmlSafeTranslations
- GettextI18nRails::ModelAttributesFinder
- GettextI18nRails::Railtie
- GettextI18nRails::SlimParser
- RubyGettextExtractor
- RubyGettextExtractor::Extractor18
- RubyGettextExtractor::Extractor19
- RubyGettextExtractor::ExtractorMethods
- ActionController
- ActionController::Base
- ActiveModel
- ActiveModel::Translation
- ActiveRecord
- ActiveRecord::Base
- I18n
- I18n::Config
- Object
- String

No matching classes.

# RubyGettextExtractor::ExtractorMethods

### Public Class Methods

new(filename, targets) click to toggle source

    # File lib/gettext_i18n_rails/ruby_gettext_extractor.rb, line 28
    def initialize(filename, targets)
      @filename = filename
      @targets = Hash.new
      @results = []

      targets.each do |a|
        k, v = a
        # things go wrong if k already exists, but this
        # should not happen (according to the gettext doc)
        @targets[k] = a
        @results << a
      end

      super()
    end

### Public Instance Methods

extract_key(args, seperator) click to toggle source

    # File lib/gettext_i18n_rails/ruby_gettext_extractor.rb, line 72
    def extract_key(args, seperator)
      key = nil
      if args.size == 2
        key = extract_string(args.value)
      else
        # this could be n_("aaa","aaa2",1)
        # all strings arguemnts are extracted and joined with \004 or \000

        arguments = args[1..(-1)]

        res = []
        arguments.each do |a|
          str = extract_string(a)
          # only add strings
          res << str if str
        end

        return nil if res.empty?
        key = res.join(seperator)
      end

      return nil unless key

      key.gsub!("\n", '\n')
      key.gsub!("\t", '\t')
      key.gsub!("\00"", '\0')

      return key
    end

extract_string(node) click to toggle source

    # File lib/gettext_i18n_rails/ruby_gettext_extractor.rb, line 53
    def extract_string(node)
      if node.first == :str
        return node.last
      elsif node.first == :call
        type, recv, meth, args = node

        # node has to be in form of "string"+"other_string"
        return nil unless recv && meth == :+

        first_part = extract_string(recv)
        second_part = extract_string(args)

        return nil unless first_part && second_part
        return first_part.to_s + second_part.to_s
      else
        return nil
      end
    end

new_call(recv, meth, args = nil) click to toggle source

    # File lib/gettext_i18n_rails/ruby_gettext_extractor.rb, line 102
    def new_call recv, meth, args = nil
      # we dont care if the method is called on a a object
      if recv.nil?
        if (meth == :_ || meth == :p_ || meth == :N_ || meth == :pgettext || meth == :s_)
          key = extract_key(args, "\0004")
        elsif meth == :n_
          key = extract_key(args, "\0000")
        else
          # skip
        end

        if key
          res = @targets[key]

          unless res
            res = [key]
            @results << res
            @targets[key] = res
          end

          res << "#{@filename}:#{lexer.lineno}"
        end
      end

      super recv, meth, args
    end

run(content) click to toggle source

    # File lib/gettext_i18n_rails/ruby_gettext_extractor.rb, line 44
    def run(content)
      # ruby parser has an ugly bug which causes that several \000's take
      # ages to parse. This avoids this probelm by stripping them away (they probably wont appear in keys anyway)
      # See bug report: http://rubyforge.org/tracker/index.php?func=detail&aid=26898&group_id=439&atid=1778
      safe_content = content.gsub(/\\\d\d\d/, '')
      self.parse(safe_content)
      return @results
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.