Sha256: 92ac5ad435459a3d27e43e60f1ec3866f9627f8b1e8f6f7210386e932c01d591

Contents?: true

Size: 1.72 KB

Versions: 8

Compression:

Stored size: 1.72 KB

Contents

module Gherkin
  class I18n
    KEYWORD_KEYS = %w{name native feature background scenario scenario_outline examples given when then and but}
    LANGUAGES    = YAML.load_file(File.dirname(__FILE__) + '/i18n.yml')

    class << self
      # Used by code generators for other lexer tools like pygments lexer and textmate bundle
      def all
        LANGUAGES.keys.sort.map{|key| get(key)}
      end

      def get(key)
        languages[key] ||= new(key)
      end

      def languages
        @languages ||= {}
      end
    end

    def initialize(key)
      @key = key
      @keywords = LANGUAGES[key]
      raise "Language not supported: #{key.inspect}" if @key.nil?
      @keywords['grammar_name'] = @keywords['name'].gsub(/\s/, '')
      @parser = nil
    end

    def sanitized_key
      @key.gsub(/[\s-]/, '')
    end

    def incomplete?
      KEYWORD_KEYS.detect{|key| @keywords[key].nil?}
    end

    def feature_keywords
      keywords('feature')
    end

    def scenario_keywords
      keywords('scenario')
    end

    def scenario_outline_keywords
      keywords('scenario_outline')
    end

    def background_keywords
      keywords('background')
    end

    def examples_keywords
      keywords('examples')
    end

    def but_keywords(space=true)
      keywords('but', space)
    end

    def and_keywords(space=true)
      keywords('and', space)
    end

    def step_keywords
      %w{given when then and but}.map{|key| keywords(key, true)}.flatten.uniq
    end

    def keywords(key, space=false)
      raise "No #{key} in #{@keywords.inspect}" if @keywords[key].nil?
      @keywords[key].split('|').map{|kw| space ? keyword_space(kw) : kw}
    end

    private

    def keyword_space(val)
      (val + ' ').sub(/< $/,'')
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
gherkin-1.0.1-i386-mswin32 lib/gherkin/i18n.rb
gherkin-1.0.1-i386-mingw32 lib/gherkin/i18n.rb
gherkin-1.0.1-universal-java-1.5 lib/gherkin/i18n.rb
gherkin-1.0.1 lib/gherkin/i18n.rb
gherkin-1.0.0-i386-mingw32 lib/gherkin/i18n.rb
gherkin-1.0.0-i386-mswin32 lib/gherkin/i18n.rb
gherkin-1.0.0-universal-java-1.5 lib/gherkin/i18n.rb
gherkin-1.0.0 lib/gherkin/i18n.rb