bryanl-gherkin 2.11.1.1-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (142) hide show
  1. data/.gitattributes +2 -0
  2. data/.mailmap +2 -0
  3. data/.rbenv-gemsets +1 -0
  4. data/.rspec +1 -0
  5. data/.rvmrc +1 -0
  6. data/.travis.yml +16 -0
  7. data/.yardopts +5 -0
  8. data/Gemfile +5 -0
  9. data/History.md +788 -0
  10. data/LICENSE +20 -0
  11. data/README.md +272 -0
  12. data/Rakefile +26 -0
  13. data/build_native_gems.sh +7 -0
  14. data/cucumber.yml +4 -0
  15. data/examples/parse_and_output_json.rb +19 -0
  16. data/features/.cucumber/stepdefs.json +244 -0
  17. data/features/escaped_pipes.feature +8 -0
  18. data/features/feature_parser.feature +237 -0
  19. data/features/json_formatter.feature +498 -0
  20. data/features/json_parser.feature +331 -0
  21. data/features/native_lexer.feature +19 -0
  22. data/features/parser_with_native_lexer.feature +205 -0
  23. data/features/pretty_formatter.feature +16 -0
  24. data/features/step_definitions/eyeball_steps.rb +3 -0
  25. data/features/step_definitions/gherkin_steps.rb +29 -0
  26. data/features/step_definitions/json_formatter_steps.rb +30 -0
  27. data/features/step_definitions/json_parser_steps.rb +20 -0
  28. data/features/step_definitions/pretty_formatter_steps.rb +85 -0
  29. data/features/steps_parser.feature +46 -0
  30. data/features/support/env.rb +42 -0
  31. data/gherkin.gemspec +77 -0
  32. data/install_mingw_os_x.sh +7 -0
  33. data/js/.npmignore +1 -0
  34. data/js/lib/gherkin/lexer/.npmignore +0 -0
  35. data/lib/gherkin/c_lexer.rb +17 -0
  36. data/lib/gherkin/formatter/ansi_escapes.rb +97 -0
  37. data/lib/gherkin/formatter/argument.rb +16 -0
  38. data/lib/gherkin/formatter/escaping.rb +15 -0
  39. data/lib/gherkin/formatter/filter_formatter.rb +146 -0
  40. data/lib/gherkin/formatter/hashable.rb +19 -0
  41. data/lib/gherkin/formatter/json_formatter.rb +122 -0
  42. data/lib/gherkin/formatter/line_filter.rb +26 -0
  43. data/lib/gherkin/formatter/model.rb +281 -0
  44. data/lib/gherkin/formatter/pretty_formatter.rb +244 -0
  45. data/lib/gherkin/formatter/regexp_filter.rb +21 -0
  46. data/lib/gherkin/formatter/step_printer.rb +21 -0
  47. data/lib/gherkin/formatter/tag_count_formatter.rb +47 -0
  48. data/lib/gherkin/formatter/tag_filter.rb +19 -0
  49. data/lib/gherkin/i18n.rb +180 -0
  50. data/lib/gherkin/i18n.yml +613 -0
  51. data/lib/gherkin/js_lexer.rb +20 -0
  52. data/lib/gherkin/json_parser.rb +177 -0
  53. data/lib/gherkin/lexer/i18n_lexer.rb +46 -0
  54. data/lib/gherkin/listener/event.rb +45 -0
  55. data/lib/gherkin/listener/formatter_listener.rb +143 -0
  56. data/lib/gherkin/native/java.rb +72 -0
  57. data/lib/gherkin/native/null.rb +5 -0
  58. data/lib/gherkin/native/therubyracer.rb +39 -0
  59. data/lib/gherkin/native.rb +7 -0
  60. data/lib/gherkin/parser/meta.txt +5 -0
  61. data/lib/gherkin/parser/parser.rb +164 -0
  62. data/lib/gherkin/parser/root.txt +11 -0
  63. data/lib/gherkin/parser/steps.txt +4 -0
  64. data/lib/gherkin/rb_lexer/README.rdoc +8 -0
  65. data/lib/gherkin/rb_lexer.rb +8 -0
  66. data/lib/gherkin/rubify.rb +24 -0
  67. data/lib/gherkin/tag_expression.rb +62 -0
  68. data/lib/gherkin.jar +0 -0
  69. data/lib/gherkin.rb +2 -0
  70. data/ragel/lexer.c.rl.erb +454 -0
  71. data/ragel/lexer.java.rl.erb +219 -0
  72. data/ragel/lexer.js.rl.erb +227 -0
  73. data/ragel/lexer.rb.rl.erb +174 -0
  74. data/ragel/lexer_common.rl.erb +50 -0
  75. data/spec/gherkin/c_lexer_spec.rb +22 -0
  76. data/spec/gherkin/fixtures/1.feature +8 -0
  77. data/spec/gherkin/fixtures/comments_in_table.feature +9 -0
  78. data/spec/gherkin/fixtures/complex.feature +45 -0
  79. data/spec/gherkin/fixtures/complex.json +139 -0
  80. data/spec/gherkin/fixtures/complex_for_filtering.feature +60 -0
  81. data/spec/gherkin/fixtures/complex_with_tags.feature +61 -0
  82. data/spec/gherkin/fixtures/dos_line_endings.feature +45 -0
  83. data/spec/gherkin/fixtures/examples_with_only_header.feature +14 -0
  84. data/spec/gherkin/fixtures/hantu_pisang.feature +35 -0
  85. data/spec/gherkin/fixtures/i18n_fr.feature +14 -0
  86. data/spec/gherkin/fixtures/i18n_fr2.feature +8 -0
  87. data/spec/gherkin/fixtures/i18n_no.feature +7 -0
  88. data/spec/gherkin/fixtures/i18n_pt1.feature +44 -0
  89. data/spec/gherkin/fixtures/i18n_pt2.feature +4 -0
  90. data/spec/gherkin/fixtures/i18n_pt3.feature +4 -0
  91. data/spec/gherkin/fixtures/i18n_pt4.feature +4 -0
  92. data/spec/gherkin/fixtures/i18n_zh-CN.feature +9 -0
  93. data/spec/gherkin/fixtures/issue_145.feature +22 -0
  94. data/spec/gherkin/fixtures/scenario_outline_with_tags.feature +13 -0
  95. data/spec/gherkin/fixtures/scenario_without_steps.feature +5 -0
  96. data/spec/gherkin/fixtures/simple_with_comments.feature +7 -0
  97. data/spec/gherkin/fixtures/simple_with_tags.feature +11 -0
  98. data/spec/gherkin/fixtures/with_bom.feature +3 -0
  99. data/spec/gherkin/formatter/ansi_escapes_spec.rb +32 -0
  100. data/spec/gherkin/formatter/filter_formatter_spec.rb +204 -0
  101. data/spec/gherkin/formatter/json_formatter_spec.rb +92 -0
  102. data/spec/gherkin/formatter/model_spec.rb +28 -0
  103. data/spec/gherkin/formatter/pretty_formatter_spec.rb +177 -0
  104. data/spec/gherkin/formatter/spaces.feature +9 -0
  105. data/spec/gherkin/formatter/step_printer_spec.rb +55 -0
  106. data/spec/gherkin/formatter/tabs.feature +9 -0
  107. data/spec/gherkin/formatter/tag_count_formatter_spec.rb +30 -0
  108. data/spec/gherkin/i18n_spec.rb +241 -0
  109. data/spec/gherkin/java_lexer_spec.rb +20 -0
  110. data/spec/gherkin/js_lexer_spec.rb +23 -0
  111. data/spec/gherkin/json_parser_spec.rb +176 -0
  112. data/spec/gherkin/lexer/i18n_lexer_spec.rb +43 -0
  113. data/spec/gherkin/output_stream_string_io.rb +20 -0
  114. data/spec/gherkin/parser/parser_spec.rb +16 -0
  115. data/spec/gherkin/rb_lexer_spec.rb +20 -0
  116. data/spec/gherkin/sexp_recorder.rb +59 -0
  117. data/spec/gherkin/shared/bom_group.rb +20 -0
  118. data/spec/gherkin/shared/doc_string_group.rb +163 -0
  119. data/spec/gherkin/shared/lexer_group.rb +591 -0
  120. data/spec/gherkin/shared/row_group.rb +125 -0
  121. data/spec/gherkin/shared/tags_group.rb +54 -0
  122. data/spec/gherkin/tag_expression_spec.rb +142 -0
  123. data/spec/spec_helper.rb +75 -0
  124. data/tasks/bench/feature_builder.rb +49 -0
  125. data/tasks/bench/null_listener.rb +4 -0
  126. data/tasks/bench.rake +184 -0
  127. data/tasks/compile.rake +120 -0
  128. data/tasks/cucumber.rake +22 -0
  129. data/tasks/gems.rake +31 -0
  130. data/tasks/ikvm.rake +124 -0
  131. data/tasks/ragel_task.rb +100 -0
  132. data/tasks/release.rake +49 -0
  133. data/tasks/rspec.rake +8 -0
  134. data/tasks/yard/default/layout/html/bubble_32x32.png +0 -0
  135. data/tasks/yard/default/layout/html/bubble_48x48.png +0 -0
  136. data/tasks/yard/default/layout/html/footer.erb +5 -0
  137. data/tasks/yard/default/layout/html/index.erb +1 -0
  138. data/tasks/yard/default/layout/html/layout.erb +25 -0
  139. data/tasks/yard/default/layout/html/logo.erb +1 -0
  140. data/tasks/yard/default/layout/html/setup.rb +4 -0
  141. data/tasks/yard.rake +7 -0
  142. metadata +412 -0
@@ -0,0 +1,120 @@
1
+ require File.dirname(__FILE__) + '/ragel_task'
2
+ BYPASS_NATIVE_IMPL = true
3
+ require 'gherkin/i18n'
4
+
5
+ CLEAN.include [
6
+ 'pkg', 'tmp',
7
+ '**/*.{o,bundle,jar,so,obj,pdb,lib,def,exp,log,rbc}', 'ext',
8
+ 'java/target',
9
+ 'ragel/i18n/*.rl',
10
+ 'lib/gherkin/rb_lexer/*.rb',
11
+ 'lib/*.dll',
12
+ 'ext/**/*.c',
13
+ 'java/src/main/java/gherkin/lexer/i18n/*.java',
14
+ 'java/src/main/resources/gherkin/*.properties',
15
+ 'js/lib/gherkin/lexer/*.js',
16
+ 'doc'
17
+ ]
18
+
19
+ desc "Compile the Java extensions"
20
+ task :jar => 'lib/gherkin.jar'
21
+
22
+ file 'lib/gherkin.jar' => Dir['java/src/main/java/**/*.java'] do
23
+ sh("mvn -f java/pom.xml package")
24
+ end
25
+
26
+ desc "Build Javascript lexers"
27
+ task :js
28
+
29
+ rl_langs = ENV['RL_LANGS'] ? ENV['RL_LANGS'].split(',') : []
30
+ langs = Gherkin::I18n.all.select { |lang| rl_langs.empty? || rl_langs.include?(lang.iso_code) }
31
+
32
+ # http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6457127
33
+ file 'lib/gherkin.jar' => "java/src/main/resources/gherkin/I18nKeywords_in.properties"
34
+ file "java/src/main/resources/gherkin/I18nKeywords_in.properties" => "java/src/main/resources/gherkin/I18nKeywords_id.properties" do
35
+ cp "java/src/main/resources/gherkin/I18nKeywords_id.properties", "java/src/main/resources/gherkin/I18nKeywords_in.properties"
36
+ end
37
+
38
+ # http://forums.sun.com/thread.jspa?threadID=5335461
39
+ file 'lib/gherkin.jar' => "java/src/main/resources/gherkin/I18nKeywords_iw.properties"
40
+ file "java/src/main/resources/gherkin/I18nKeywords_iw.properties" => "java/src/main/resources/gherkin/I18nKeywords_he.properties" do
41
+ cp "java/src/main/resources/gherkin/I18nKeywords_he.properties", "java/src/main/resources/gherkin/I18nKeywords_iw.properties"
42
+ end
43
+
44
+ java_i18n_properties = "java/src/main/resources/gherkin/I18n.properties"
45
+ file java_i18n_properties => 'lib/gherkin/i18n.yml' do
46
+ File.open(java_i18n_properties, 'wb') do |io|
47
+ io.puts("# Generated file. Do not edit.")
48
+ io.puts("i18n.isoCodes=#{langs.map{|i18n| i18n.iso_code}.join(',')}")
49
+ end
50
+ end
51
+
52
+ langs.each do |i18n|
53
+ java = RagelTask.new('java', i18n)
54
+ rb = RagelTask.new('rb', i18n)
55
+ js = RagelTask.new('js', i18n)
56
+
57
+ lang_country = i18n.iso_code.split(/-/)
58
+ suffix = lang_country.length == 1 ? lang_country[0] : "#{lang_country[0]}_#{lang_country[1].upcase}"
59
+ java_properties = "java/src/main/resources/gherkin/I18nKeywords_#{suffix}.properties"
60
+ file java_properties => 'lib/gherkin/i18n.yml' do
61
+ File.open(java_properties, 'wb') do |io|
62
+ io.puts("# Generated file. Do not edit.")
63
+ (Gherkin::I18n::KEYWORD_KEYS + %w{name native}).each do |key|
64
+ value = Gherkin::I18n.unicode_escape(i18n.keywords(key).join("|"))
65
+ io.puts("#{key}:#{value}")
66
+ end
67
+ end
68
+ end
69
+ file 'lib/gherkin.jar' => [java.target, rb.target, java_properties, java_i18n_properties]
70
+
71
+ begin
72
+ if !defined?(JRUBY_VERSION)
73
+ require 'rake/extensiontask'
74
+
75
+ c = RagelTask.new('c', i18n)
76
+
77
+ extconf = "ext/gherkin_lexer_#{i18n.underscored_iso_code}/extconf.rb"
78
+ file extconf do
79
+ FileUtils.mkdir(File.dirname(extconf)) unless File.directory?(File.dirname(extconf))
80
+ File.open(extconf, "w") do |io|
81
+ io.write(<<-EOF)
82
+ require 'mkmf'
83
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
84
+ $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
85
+ dir_config("gherkin_lexer_#{i18n.underscored_iso_code}")
86
+ have_library("c", "main")
87
+ create_makefile("gherkin_lexer_#{i18n.underscored_iso_code}")
88
+ EOF
89
+ end
90
+ end
91
+
92
+ Rake::ExtensionTask.new("gherkin_lexer_#{i18n.underscored_iso_code}") do |ext|
93
+ if ENV['RUBY_CC_VERSION']
94
+ ext.cross_compile = true
95
+ ext.cross_platform = 'x86-mingw32'
96
+ end
97
+ end
98
+
99
+ # The way tasks are defined with compile:xxx (but without namespace) in rake-compiler forces us
100
+ # to use these hacks for setting up dependencies. Ugly!
101
+ Rake::Task["compile:gherkin_lexer_#{i18n.underscored_iso_code}"].prerequisites.unshift(extconf)
102
+ Rake::Task["compile:gherkin_lexer_#{i18n.underscored_iso_code}"].prerequisites.unshift(c.target)
103
+ Rake::Task["compile:gherkin_lexer_#{i18n.underscored_iso_code}"].prerequisites.unshift(rb.target)
104
+ Rake::Task["compile:gherkin_lexer_#{i18n.underscored_iso_code}"].prerequisites.unshift(js.target) if ENV['GHERKIN_JS']
105
+
106
+ Rake::Task["compile"].prerequisites.unshift(extconf)
107
+ Rake::Task["compile"].prerequisites.unshift(c.target)
108
+ Rake::Task["compile"].prerequisites.unshift(rb.target)
109
+ Rake::Task["compile"].prerequisites.unshift(js.target) if ENV['GHERKIN_JS']
110
+
111
+ Rake::Task["js"].prerequisites.unshift(js.target) if ENV['GHERKIN_JS']
112
+ end
113
+ rescue LoadError
114
+ unless defined?($c_warned)
115
+ warn "WARNING: Rake::ExtensionTask not installed. Skipping C compilation."
116
+ $c_warned = true
117
+ task :compile # no-op
118
+ end
119
+ end
120
+ end
@@ -0,0 +1,22 @@
1
+
2
+ unless ENV['RUBY_CC_VERSION']
3
+ require 'cucumber/rake/task'
4
+
5
+ Cucumber::Rake::Task.new(:cucumber) do |t|
6
+ profile = ENV['TRAVIS'] ? 'travis' : 'default'
7
+ t.cucumber_opts = "--profile #{profile}"
8
+ end
9
+
10
+ namespace :cucumber do
11
+ Cucumber::Rake::Task.new(:rcov, "Run Cucumber using RCov") do |t|
12
+ t.cucumber_opts = "--profile default"
13
+ t.rcov = RUBY_VERSION =~ /^1\.8/
14
+ t.rcov_opts = %w{--exclude spec\/}
15
+ end
16
+
17
+ Cucumber::Rake::Task.new(:native_lexer, "Run Native lexer Cucumber features") do |t|
18
+ t.cucumber_opts = "--profile native_lexer"
19
+ end
20
+ task :native_lexer => [:clean, :compile]
21
+ end
22
+ end
data/tasks/gems.rake ADDED
@@ -0,0 +1,31 @@
1
+ namespace :gems do
2
+ task :win do
3
+ unless File.directory?(File.expand_path('~/.rake-compiler'))
4
+ STDERR.puts "[ERROR] You must install MinGW rubies to build gherkin gems for Windows. See README.rdoc"
5
+ exit(1)
6
+ end
7
+ # rvm and mingw ruby versions have to match to avoid errors
8
+ sh "rvm 1.8.7-p352@cucumber do rake cross compile RUBY_CC_VERSION=1.8.7"
9
+ sh "bundle exec rake cross compile RUBY_CC_VERSION=1.9.3"
10
+ # This will copy the .so files to the proper place
11
+ sh "bundle exec rake -t cross compile RUBY_CC_VERSION=1.8.7:1.9.3"
12
+ end
13
+
14
+ desc 'Prepare JRuby binares'
15
+ task :jruby => [:jar] do
16
+ sh "rvm jruby@cucumber exec rspec spec"
17
+ end
18
+
19
+ task :sanity do
20
+ raise "The jruby gem looks too small" if File.stat("release/gherkin-#{GHERKIN_VERSION}-java.gem").size < 1000000
21
+ end
22
+
23
+ desc "Prepare binaries for all gems"
24
+ task :prepare => [
25
+ :clean,
26
+ :spec,
27
+ :win,
28
+ :jruby
29
+ ]
30
+
31
+ end
data/tasks/ikvm.rake ADDED
@@ -0,0 +1,124 @@
1
+ # encoding: utf-8
2
+
3
+ namespace :ikvm do
4
+ IKVM_VERSION = '0.46.0.1'
5
+ IKVM_DIR = "ikvm/ikvm-#{IKVM_VERSION}"
6
+ IKVM_ZIP = "ikvm/ikvmbin-#{IKVM_VERSION}.zip"
7
+ CLOBBER.include(IKVM_DIR, IKVM_ZIP)
8
+ IKVM_BIN_DIR = "#{IKVM_DIR}/bin"
9
+ IKVMC_EXE = "#{IKVM_BIN_DIR}/ikvmc.exe"
10
+ GHERKIN_EXE = "release/gherkin.exe"
11
+ GHERKIN_PKG_DLL = "release/nuspec/lib/gherkin.dll"
12
+ GHERKIN_NUSPEC = "release/nuspec/gherkin.nuspec"
13
+ GHERKIN_NUPKG = "release/gherkin.#{GHERKIN_VERSION}.nupkg"
14
+ GHERKIN_LIB_DLL = 'lib/gherkin.dll'
15
+
16
+ def mono(args)
17
+ if(`which mono`.strip =~ /mono/)
18
+ # http://monomvc.wordpress.com/2012/03/06/nuget-on-mono/
19
+ sh("mono --runtime=v4.0.30319 #{args}")
20
+ else
21
+ raise "[ERROR] You must install Mono and IKVM build gherkin for .NET. See README.md"
22
+ end
23
+ end
24
+
25
+ def ikvmc(args)
26
+ begin
27
+ mono("#{IKVMC_EXE} #{args}")
28
+ rescue => e
29
+ if e.message =~ /Cannot open assembly/
30
+ e.message << "\n\n[ERROR] You must install Mono and IKVM build gherkin for .NET. See README.md"
31
+ end
32
+ raise e
33
+ end
34
+ end
35
+
36
+ def nuget(args)
37
+ mono("/usr/local/nuget/NuGet.exe #{args}")
38
+ end
39
+
40
+ file GHERKIN_EXE => [IKVMC_EXE, 'lib/gherkin.jar'] do
41
+ ikvmc("-target:exe lib/gherkin.jar -out:#{GHERKIN_EXE}")
42
+ end
43
+
44
+ file GHERKIN_PKG_DLL => [IKVMC_EXE, 'lib/gherkin.jar'] do
45
+ mkdir_p File.dirname(GHERKIN_PKG_DLL) unless File.directory?(File.dirname(GHERKIN_PKG_DLL))
46
+ ikvmc("-target:library lib/gherkin.jar -out:#{GHERKIN_PKG_DLL} -version:#{GHERKIN_VERSION}")
47
+ end
48
+
49
+ file GHERKIN_LIB_DLL => GHERKIN_PKG_DLL do
50
+ cp GHERKIN_PKG_DLL, GHERKIN_LIB_DLL
51
+ end
52
+
53
+ file GHERKIN_NUPKG => [GHERKIN_PKG_DLL, GHERKIN_NUSPEC] do
54
+ pkg_dir = File.dirname(GHERKIN_EXE)
55
+ mkdir_p File.dirname(pkg_dir) unless File.directory?(pkg_dir)
56
+ nuget("Pack #{GHERKIN_NUSPEC} -Version #{GHERKIN_VERSION} -OutputDirectory #{pkg_dir}")
57
+ # Now, fix the path inside the file - see https://github.com/cucumber/gherkin/issues/148
58
+ require 'zip/zipfilesystem'
59
+ Zip::ZipFile.open(GHERKIN_NUPKG) do |zipfile|
60
+ begin
61
+ zipfile.file.rename 'lib%2Fgherkin.dll', 'lib/gherkin.dll'
62
+ rescue => looks_like_nuget_has_been_fixed
63
+ end
64
+ end
65
+ end
66
+
67
+ file GHERKIN_NUSPEC do
68
+ mkdir_p File.dirname(GHERKIN_NUSPEC) unless File.directory?(File.dirname(GHERKIN_NUSPEC))
69
+ File.open(GHERKIN_NUSPEC, "w") do |io|
70
+ io.write(<<-EOF)
71
+ <?xml version="1.0"?>
72
+ <package>
73
+ <metadata>
74
+ <id>gherkin</id>
75
+ <version>#{GHERKIN_VERSION}</version>
76
+ <authors>aslakhellesoy</authors>
77
+ <owners>Mike Sassak, Gregory Hnatiuk, Aslak Hellesøy</owners>
78
+ <projectUrl>https://github.com/cucumber/gherkin</projectUrl>
79
+ <licenseUrl>https://github.com/cucumber/gherkin/blob/master/LICENSE</licenseUrl>
80
+ <iconUrl>https://github.com/cucumber/cukes.info/raw/master/templates/images/gherkin/gherkin_128x128.png</iconUrl>
81
+ <requireLicenseAcceptance>false</requireLicenseAcceptance>
82
+ <description>A fast lexer and parser for the Gherkin language based on Ragel</description>
83
+ <copyright>Copyright (c) 2009-2011 Mike Sassak, Gregory Hnatiuk, Aslak Hellesøy</copyright>
84
+ <dependencies>
85
+ <dependency id="IKVM" version="#{IKVM_VERSION}" />
86
+ </dependencies>
87
+ <tags>gherkin cucumber specflow bdd lexer parser</tags>
88
+ </metadata>
89
+ </package>
90
+ EOF
91
+ end
92
+ end
93
+
94
+ task :nupkg => GHERKIN_NUPKG
95
+
96
+ task :check => [GHERKIN_EXE, :copy_ikvm_dlls] do
97
+ puts "************** Pretty printing some features with .NET. **************"
98
+ mono "#{GHERKIN_EXE} features"
99
+ puts "************** DONE Pretty printing some features with .NET. All OK. **************"
100
+ end
101
+
102
+ task :copy_ikvm_dlls => IKVMC_EXE do
103
+ exe_dir = File.dirname(GHERKIN_EXE)
104
+ mkdir_p File.dirname(exe_dir) unless File.directory?(exe_dir)
105
+ Dir["#{IKVM_BIN_DIR}/*.dll"].each do |dll|
106
+ cp dll, exe_dir
107
+ end
108
+ end
109
+
110
+ task :push => GHERKIN_NUPKG do
111
+ nuget("Push #{GHERKIN_NUPKG}")
112
+ nuget("Publish gherkin #{GHERKIN_VERSION}")
113
+ end
114
+
115
+ file IKVMC_EXE do
116
+ sh("wget http://downloads.sourceforge.net/project/ikvm/ikvm/#{IKVM_VERSION}/ikvmbin-#{IKVM_VERSION}.zip -O #{IKVM_ZIP}")
117
+ Dir.chdir('ikvm') do
118
+ sh("unzip ikvmbin-#{IKVM_VERSION}.zip")
119
+ end
120
+ end
121
+ end
122
+
123
+ task :ikvm => ['ikvm:check']
124
+
@@ -0,0 +1,100 @@
1
+ require 'yaml'
2
+ require 'erb'
3
+ require 'rbconfig'
4
+
5
+ class RagelTask
6
+ begin
7
+ # Support Rake >= 0.9.0
8
+ require 'rake/dsl_definition'
9
+ include Rake::DSL
10
+ rescue LoadError
11
+ end
12
+
13
+ RL_OUTPUT_DIR = File.dirname(__FILE__) + "/../ragel/i18n"
14
+ UGLIFYJS = File.dirname(__FILE__) + "/../js/node_modules/uglify-js/bin/uglifyjs"
15
+
16
+ def initialize(lang, i18n)
17
+ @lang = lang
18
+ @i18n = i18n
19
+ define_tasks
20
+ end
21
+
22
+ def define_tasks
23
+ deps = [lang_ragel, common_ragel]
24
+ deps.unshift(UGLIFYJS) if(@lang == 'js')
25
+
26
+ file target => deps do
27
+ mkdir_p(File.dirname(target)) unless File.directory?(File.dirname(target))
28
+ sh "ragel #{flags} #{lang_ragel} -o #{target}"
29
+ if(@lang == 'js')
30
+ # Ragel chokes if we put the escaped triple quotes in .rl, so we'll do the replace with sed after the fact. Lots of backslashes!!
31
+ sed = Config::CONFIG['host_os'] =~ /linux/i ? "sed -i" : "sed -i ''"
32
+ sh %{#{sed} 's/ESCAPED_TRIPLE_QUOTE/\\\\\\\\\\\\"\\\\\\\\\\\\"\\\\\\\\\\\\"/' #{target}}
33
+
34
+ # Minify
35
+ sh %{node #{UGLIFYJS} #{target} > #{target.gsub(/\.js$/, '.min.js')}}
36
+ end
37
+ end
38
+
39
+ file UGLIFYJS do
40
+ unless File.exist?(UGLIFYJS)
41
+ Dir.chdir('js') do
42
+ sh "npm install"
43
+ end
44
+ end
45
+ end
46
+
47
+ file lang_ragel => lang_erb do
48
+ write(ERB.new(IO.read(lang_erb)).result(binding), lang_ragel)
49
+ end
50
+
51
+ file common_ragel => common_erb do
52
+ write(ERB.new(IO.read(common_erb)).result(binding), common_ragel)
53
+ end
54
+ end
55
+
56
+ def target
57
+ {
58
+ 'c' => "ext/gherkin_lexer_#{@i18n.underscored_iso_code}/gherkin_lexer_#{@i18n.underscored_iso_code}.c",
59
+ 'java' => "java/src/main/java/gherkin/lexer/i18n/#{@i18n.underscored_iso_code.upcase}.java",
60
+ 'rb' => "lib/gherkin/rb_lexer/#{@i18n.underscored_iso_code}.rb",
61
+ 'js' => "js/lib/gherkin/lexer/#{@i18n.underscored_iso_code}.js"
62
+ }[@lang]
63
+ end
64
+
65
+ def common_ragel
66
+ RL_OUTPUT_DIR + "/lexer_common.#{@i18n.underscored_iso_code}.rl"
67
+ end
68
+
69
+ def common_erb
70
+ File.dirname(__FILE__) + '/../ragel/lexer_common.rl.erb'
71
+ end
72
+
73
+ def lang_ragel
74
+ RL_OUTPUT_DIR + "/#{@i18n.underscored_iso_code}.#{@lang}.rl"
75
+ end
76
+
77
+ def lang_erb
78
+ File.dirname(__FILE__) + "/../ragel/lexer.#{@lang}.rl.erb"
79
+ end
80
+
81
+ def flags
82
+ {
83
+ 'c' => '-C',
84
+ 'java' => '-J',
85
+ 'rb' => '-R',
86
+ 'js' => '-E'
87
+ }[@lang]
88
+ end
89
+
90
+ def write(content, filename)
91
+ mkdir_p(File.dirname(filename)) unless File.directory?(File.dirname(filename))
92
+ File.open(filename, "wb") do |file|
93
+ file.write(content)
94
+ end
95
+ end
96
+
97
+ def ragel_list(keywords)
98
+ "(#{keywords.map{|keyword| %{"#{keyword}"}}.join(' | ')})"
99
+ end
100
+ end
@@ -0,0 +1,49 @@
1
+ namespace :release do
2
+ desc 'Upload all packages and tag git'
3
+ task :ALL => ['gems:sanity', 'ikvm:check', :mvn_deploy_jar, :mvn_deploy_site, :push_native_gems, :push_npm_package, 'ikvm:push', :release, :push_yard, :symlink_docs, :post_release]
4
+
5
+ desc 'Push all gems to rubygems.org'
6
+ task :push_native_gems do
7
+ Dir.chdir('release') do
8
+ Dir['*.gem'].each do |gem_file|
9
+ sh("gem push #{gem_file}")
10
+ end
11
+ end
12
+ end
13
+
14
+ task :post_release => :ikvm do
15
+ puts "\n\n****** Manually close and release at https://oss.sonatype.org/index.html#stagingRepositories ******\n\n"
16
+ end
17
+
18
+ desc 'Push jar to central Maven repo'
19
+ task :mvn_deploy_jar do
20
+ Dir.chdir('java') do
21
+ sh("mvn clean source:jar javadoc:jar deploy")
22
+ end
23
+ end
24
+
25
+ desc 'Push javadocs to cukes.info'
26
+ task :mvn_deploy_site do
27
+ Dir.chdir('java') do
28
+ sh("mvn site:site site:deploy")
29
+ end
30
+ end
31
+
32
+ desc 'Push npm package to http://npmjs.org/'
33
+ task :push_npm_package do
34
+ Dir.chdir('js') do
35
+ sh("npm publish")
36
+ end
37
+ end
38
+
39
+ desc 'Push yardoc to http://cukes.info/gherkin/api/#{GHERKIN_VERSION}'
40
+ task :push_yard => :yard do
41
+ sh("tar czf release/api-#{GHERKIN_VERSION}.tgz -C doc .")
42
+ sh("scp release/api-#{GHERKIN_VERSION}.tgz cukes.info:/var/www/gherkin/api/ruby")
43
+ end
44
+
45
+ task :symlink_docs do
46
+ sh("ssh cukes.info 'cd /var/www/gherkin/api/ruby && mkdir #{GHERKIN_VERSION} && tar xzf api-#{GHERKIN_VERSION}.tgz -C #{GHERKIN_VERSION} && rm -f latest && ln -s #{GHERKIN_VERSION} latest'")
47
+ sh("ssh cukes.info 'cd /var/www/gherkin/api/java && rm -f latest && ln -s #{GHERKIN_VERSION} latest'")
48
+ end
49
+ end
data/tasks/rspec.rake ADDED
@@ -0,0 +1,8 @@
1
+ require 'rspec/core/rake_task'
2
+
3
+ RSpec::Core::RakeTask.new(:spec)
4
+
5
+ RSpec::Core::RakeTask.new(:rcov) do |t|
6
+ t.rcov = true
7
+ t.rcov_opts = %w{--exclude osx\/objc,gems\/,spec\/}
8
+ end
@@ -0,0 +1,5 @@
1
+ <div id="footer">
2
+ Generated on <%= Time.now.strftime("%c") %> by
3
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
4
+ <%= YARD::VERSION %> (ruby-<%= RUBY_VERSION %>).
5
+ </div>
@@ -0,0 +1 @@
1
+ <%= yieldall %>
@@ -0,0 +1,25 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+ <head>
5
+ <%= erb(:headers) %>
6
+ </head>
7
+ <body>
8
+ <script type="text/javascript" charset="utf-8">
9
+ if (window.top.frames.main) document.body.className = 'frames';
10
+ </script>
11
+
12
+ <div id="header">
13
+ <%= erb(:logo) %>
14
+ <%= erb(:breadcrumb) %>
15
+ <%= erb(:search) %>
16
+ <div class="clear"></div>
17
+ </div>
18
+
19
+ <iframe id="search_frame"></iframe>
20
+
21
+ <div id="content"><%= yieldall %></div>
22
+
23
+ <%= erb(:footer) %>
24
+ </body>
25
+ </html>
@@ -0,0 +1 @@
1
+ <h3><img src="<%= url_for('images/bubble_32x32.png') %>"></img> Gherkin <%= GHERKIN_VERSION %></h3>
@@ -0,0 +1,4 @@
1
+ def init
2
+ super
3
+ options[:serializer].serialize('/images/bubble_32x32.png', IO.read(File.dirname(__FILE__) + '/bubble_32x32.png'))
4
+ end
data/tasks/yard.rake ADDED
@@ -0,0 +1,7 @@
1
+ unless ENV['RUBY_CC_VERSION'] || defined?(JRUBY_VERSION)
2
+ require 'yard'
3
+ require 'yard/rake/yardoc_task'
4
+
5
+ YARD::Templates::Engine.register_template_path(File.expand_path(File.join(File.dirname(__FILE__), 'yard')))
6
+ YARD::Rake::YardocTask.new(:yard)
7
+ end