Sha256: 047cdd1c79995b0aa8b4667b1d9a8bff44e2434e5670d912ce7e8587c704a9af

Contents?: true

Size: 1.39 KB

Versions: 2

Compression:

Stored size: 1.39 KB

Contents

class FeatureCompiler
  def initialize
    require 'yaml'
    require 'erb'
    
    @tt = PLATFORM =~ /mswin|mingw/ ? 'tt.bat' : 'tt'

    @template = ERB.new(IO.read(File.dirname(__FILE__) + '/../lib/cucumber/treetop_parser/feature.treetop.erb'))
    @langs = YAML.load_file(File.dirname(__FILE__) + '/../lib/cucumber/languages.yml')
  end
  
  def compile_all
    @langs.keys.each do |lang|
      compile(lang)
    end
  end
  
  def compile(lang)
    words = @langs['en'].merge(@langs[lang]) # Use English words if languages.yml is missing a word
    grammar_file = File.dirname(__FILE__) + "/../lib/cucumber/treetop_parser/feature_#{lang}.treetop"
    ruby_file    = File.dirname(__FILE__) + "/../lib/cucumber/treetop_parser/feature_#{lang}.rb"
    grammar      = @template.result(binding)
    File.open(grammar_file, "wb") do |io|
      io.write(grammar)
    end
    sh "#{@tt} #{grammar_file}"
    FileUtils.rm(grammar_file)
    
    # Change code so it isn't part of RDoc
    lines = IO.read(ruby_file).split("\n")
    lines.each do |line|
      if line =~ /\s*(def|class|module)/
        line << " #:nodoc:"
      end
    end
    File.open(ruby_file, 'wb'){|io| io.write(lines.join("\n"))}
  end
end

namespace :treetop do
  desc 'Compile the grammar for all languages in languages.yml'
  task :compile do
    FeatureCompiler.new.compile_all
  end

  task :compile_en do
    FeatureCompiler.new.compile('en')
  end
end

Version data entries

2 entries across 2 versions & 2 rubygems

Version Path
elight-cucumber-0.1.9 gem_tasks/treetop.rake
cucumber-0.1.8 gem_tasks/treetop.rake