kosmas58-cucumber 0.3.11.3 → 0.3.11.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. data/History.txt +36 -0
  2. data/Manifest.txt +9 -0
  3. data/config/hoe.rb +1 -2
  4. data/examples/i18n/ar/Rakefile +1 -1
  5. data/examples/i18n/ar/features/addition.feature +1 -0
  6. data/examples/i18n/bg/Rakefile +1 -1
  7. data/examples/i18n/bg/features/addition.feature +1 -0
  8. data/examples/i18n/bg/features/consecutive_calculations.feature +1 -0
  9. data/examples/i18n/bg/features/division.feature +1 -0
  10. data/examples/i18n/cat/Rakefile +1 -1
  11. data/examples/i18n/cat/features/suma.feature +1 -0
  12. data/examples/i18n/da/Rakefile +1 -1
  13. data/examples/i18n/da/features/summering.feature +1 -0
  14. data/examples/i18n/de/Rakefile +1 -1
  15. data/examples/i18n/de/features/addition.feature +1 -0
  16. data/examples/i18n/de/features/division.feature +1 -0
  17. data/examples/i18n/en/Rakefile +1 -1
  18. data/examples/i18n/en/features/addition.feature +1 -0
  19. data/examples/i18n/en/features/division.feature +1 -0
  20. data/examples/i18n/en-lol/features/stuffing.feature +1 -1
  21. data/examples/i18n/es/Rakefile +1 -1
  22. data/examples/i18n/es/features/adicion.feature +1 -0
  23. data/examples/i18n/et/Rakefile +1 -1
  24. data/examples/i18n/et/features/jagamine.feature +1 -0
  25. data/examples/i18n/et/features/liitmine.feature +1 -0
  26. data/examples/i18n/fi/Rakefile +1 -1
  27. data/examples/i18n/fi/features/jakolasku.feature +1 -0
  28. data/examples/i18n/fr/Rakefile +1 -1
  29. data/examples/i18n/fr/features/addition.feature +2 -1
  30. data/examples/i18n/he/Rakefile +1 -1
  31. data/examples/i18n/he/features/addition.feature +1 -0
  32. data/examples/i18n/he/features/division.feature +1 -0
  33. data/examples/i18n/hu/Rakefile +1 -1
  34. data/examples/i18n/hu/features/addition.feature +1 -0
  35. data/examples/i18n/hu/features/division.feature +1 -0
  36. data/examples/i18n/id/Rakefile +1 -1
  37. data/examples/i18n/id/features/addition.feature +1 -0
  38. data/examples/i18n/id/features/division.feature +1 -0
  39. data/examples/i18n/it/Rakefile +1 -1
  40. data/examples/i18n/it/features/somma.feature +1 -0
  41. data/examples/i18n/ja/Rakefile +1 -1
  42. data/examples/i18n/ja/features/addition.feature +1 -0
  43. data/examples/i18n/ja/features/division.feature +1 -0
  44. data/examples/i18n/ko/Rakefile +1 -1
  45. data/examples/i18n/ko/features/addition.feature +1 -0
  46. data/examples/i18n/ko/features/division.feature +1 -0
  47. data/examples/i18n/lt/Rakefile +1 -1
  48. data/examples/i18n/lt/features/addition.feature +1 -0
  49. data/examples/i18n/lt/features/division.feature +1 -0
  50. data/examples/i18n/lv/Rakefile +1 -1
  51. data/examples/i18n/lv/features/addition.feature +1 -0
  52. data/examples/i18n/lv/features/division.feature +1 -0
  53. data/examples/i18n/no/Rakefile +1 -1
  54. data/examples/i18n/no/features/summering.feature +1 -0
  55. data/examples/i18n/pl/Rakefile +1 -1
  56. data/examples/i18n/pl/features/addition.feature +1 -0
  57. data/examples/i18n/pl/features/division.feature +1 -0
  58. data/examples/i18n/pt/Rakefile +1 -1
  59. data/examples/i18n/pt/features/adicao.feature +1 -0
  60. data/examples/i18n/ro/Rakefile +1 -1
  61. data/examples/i18n/ro/features/suma.feature +1 -0
  62. data/examples/i18n/ru/Rakefile +1 -1
  63. data/examples/i18n/ru/features/addition.feature +1 -0
  64. data/examples/i18n/ru/features/consecutive_calculations.feature +1 -0
  65. data/examples/i18n/ru/features/division.feature +1 -0
  66. data/examples/i18n/se/Rakefile +1 -1
  67. data/examples/i18n/se/features/summering.feature +1 -0
  68. data/examples/i18n/sk/Rakefile +1 -1
  69. data/examples/i18n/sk/features/addition.feature +1 -0
  70. data/examples/i18n/sk/features/division.feature +1 -0
  71. data/examples/i18n/zh-CN/features/addition.feature +1 -0
  72. data/examples/i18n/zh-TW/features/addition.feature +1 -0
  73. data/examples/i18n/zh-TW/features/division.feature +1 -0
  74. data/examples/sinatra/features/step_definitions/add_steps.rb +1 -1
  75. data/examples/sinatra/features/support/env.rb +13 -5
  76. data/features/after_block_exceptions.feature +4 -1
  77. data/features/after_step_block_exceptions.feature +4 -1
  78. data/features/background.feature +6 -0
  79. data/features/cucumber_cli.feature +11 -1
  80. data/features/cucumber_cli_diff_disabled.feature +7 -1
  81. data/features/drb_server_integration.feature +5 -4
  82. data/features/expand.feature +2 -1
  83. data/features/html_formatter/a.html +12 -14
  84. data/features/junit_formatter.feature +4 -4
  85. data/features/step_definitions/cucumber_steps.rb +2 -2
  86. data/features/support/env.rb +7 -4
  87. data/features/work_in_progress.feature +3 -0
  88. data/lib/cucumber/ast/comment.rb +1 -1
  89. data/lib/cucumber/ast/feature.rb +2 -2
  90. data/lib/cucumber/ast/feature_element.rb +4 -0
  91. data/lib/cucumber/ast/scenario.rb +5 -3
  92. data/lib/cucumber/ast/scenario_outline.rb +6 -1
  93. data/lib/cucumber/ast/step.rb +4 -0
  94. data/lib/cucumber/ast/step_invocation.rb +6 -1
  95. data/lib/cucumber/cli/configuration.rb +37 -26
  96. data/lib/cucumber/cli/main.rb +4 -5
  97. data/lib/cucumber/formatter/console.rb +12 -0
  98. data/lib/cucumber/formatter/html.rb +3 -2
  99. data/lib/cucumber/formatter/junit.rb +3 -6
  100. data/lib/cucumber/formatter/pretty.rb +2 -4
  101. data/lib/cucumber/formatter/profile.rb +1 -1
  102. data/lib/cucumber/languages.yml +3 -3
  103. data/lib/cucumber/parser/feature.rb +12 -16
  104. data/lib/cucumber/parser/feature.tt +1 -3
  105. data/lib/cucumber/parser/i18n.tt +30 -23
  106. data/lib/cucumber/parser/treetop_ext.rb +12 -83
  107. data/lib/cucumber/parser.rb +1 -33
  108. data/lib/cucumber/platform.rb +6 -0
  109. data/lib/cucumber/step_definition.rb +6 -0
  110. data/lib/cucumber/step_mother.rb +3 -3
  111. data/lib/cucumber/version.rb +1 -1
  112. data/lib/cucumber.rb +0 -57
  113. data/rails_generators/cucumber/templates/cucumber.rake +4 -0
  114. data/spec/cucumber/ast/step_collection_spec.rb +5 -4
  115. data/spec/cucumber/cli/configuration_spec.rb +42 -9
  116. data/spec/cucumber/cli/main_spec.rb +2 -10
  117. data/spec/cucumber/parser/feature_parser_spec.rb +11 -9
  118. data/spec/cucumber/parser/table_parser_spec.rb +1 -1
  119. data/spec/spec_helper.rb +0 -1
  120. metadata +3 -13
@@ -4,9 +4,11 @@ require 'rbconfig'
4
4
  require 'yaml'
5
5
 
6
6
  module Cucumber
7
+ # TODO: Move these constants and the file to Language. Update wiki
7
8
  LANGUAGE_FILE = File.expand_path(File.dirname(__FILE__) + '/languages.yml')
8
9
  LANGUAGES = YAML.load_file(LANGUAGE_FILE)
9
10
  BINARY = File.expand_path(File.dirname(__FILE__) + '/../../bin/cucumber')
11
+ LIBDIR = File.expand_path(File.dirname(__FILE__) + '/../../lib')
10
12
  JRUBY = defined?(JRUBY_VERSION)
11
13
  IRONRUBY = Config::CONFIG['sitedir'] =~ /IronRuby/
12
14
  WINDOWS = Config::CONFIG['host_os'] =~ /mswin|mingw/
@@ -14,4 +16,8 @@ module Cucumber
14
16
  RAILS = defined?(Rails)
15
17
  RUBY_BINARY = File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name'])
16
18
  RUBY_1_9 = RUBY_VERSION =~ /^1\.9/
19
+
20
+ def self.file_mode(m)
21
+ RUBY_1_9 ? "#{m}:UTF-8" : m
22
+ end
17
23
  end
@@ -86,6 +86,8 @@ module Cucumber
86
86
 
87
87
  include StepDefinitionMethods
88
88
 
89
+ attr_reader :regexp, :proc
90
+
89
91
  def initialize(pattern, &proc)
90
92
  raise MissingProc if proc.nil?
91
93
  if String === pattern
@@ -112,5 +114,9 @@ module Cucumber
112
114
  def file_colon_line
113
115
  @proc.file_colon_line
114
116
  end
117
+
118
+ def file
119
+ @file ||= file_colon_line.split(':')[0]
120
+ end
115
121
  end
116
122
  end
@@ -254,12 +254,12 @@ module Cucumber
254
254
  @snippet_generator.snippet_text(step_keyword, step_name, multiline_arg_class)
255
255
  end
256
256
 
257
- def before_and_after(scenario, skip=false)
258
- before(scenario) unless skip
257
+ def before_and_after(scenario, skip_hooks=false)
258
+ before(scenario) unless skip_hooks
259
259
  @current_scenario = scenario
260
260
  yield scenario
261
261
  @current_scenario = nil
262
- after(scenario) unless skip
262
+ after(scenario) unless skip_hooks
263
263
  scenario_visited(scenario)
264
264
  end
265
265
 
@@ -3,7 +3,7 @@ module Cucumber #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 3
5
5
  TINY = 11
6
- PATCH = 3 # Set to nil for official release
6
+ PATCH = 6 # Set to nil for official release
7
7
 
8
8
  STRING = [MAJOR, MINOR, TINY, PATCH].compact.join('.')
9
9
  end
data/lib/cucumber.rb CHANGED
@@ -9,60 +9,3 @@ require 'cucumber/step_mother'
9
9
  require 'cucumber/cli/main'
10
10
  require 'cucumber/broadcaster'
11
11
  require 'cucumber/core_ext/exception'
12
-
13
- module Cucumber
14
- KEYWORD_KEYS = %w{name native encoding feature background scenario scenario_outline examples given when then but}
15
-
16
- class << self
17
- # The currently active language
18
- attr_reader :lang
19
-
20
- def load_language(lang) #:nodoc:
21
- return if @lang
22
- @lang = lang
23
- alias_step_definitions(lang)
24
- Parser.load_parser(keyword_hash)
25
- end
26
-
27
- def language_incomplete?(lang=@lang)
28
- KEYWORD_KEYS.detect{|key| keyword_hash(lang)[key].nil?}
29
- end
30
-
31
- # File mode that accounts for Ruby platform and current language
32
- def file_mode(m)
33
- Cucumber::RUBY_1_9 ? "#{m}:#{keyword_hash['encoding']}" : m
34
- end
35
-
36
- # Returns a Hash of the currently active
37
- # language, or for a specific language if +lang+ is
38
- # specified.
39
- def keyword_hash(lang=@lang)
40
- LANGUAGES[lang]
41
- end
42
-
43
- def scenario_keyword
44
- keyword_hash['scenario'].split('|')[0] + ':'
45
- end
46
-
47
- def alias_step_definitions(lang) #:nodoc:
48
- keywords = %w{given when then and but}.map{|keyword| keyword_hash(lang)[keyword].split('|')}
49
- alias_steps(keywords.flatten)
50
- end
51
-
52
- # Sets up additional method aliases for Given, When and Then.
53
- # This does *not* affect how feature files are parsed. If you
54
- # want to create aliases in the parser, you have to do this in
55
- # languages.yml. For example:
56
- #
57
- # and: And|With
58
- def alias_steps(keywords)
59
- keywords.each do |adverb|
60
- StepMother.alias_adverb(adverb)
61
- World.alias_adverb(adverb)
62
- end
63
- end
64
- end
65
-
66
- # Make sure we always have English aliases
67
- alias_step_definitions('en')
68
- end
@@ -1,5 +1,7 @@
1
1
  $LOAD_PATH.unshift(RAILS_ROOT + '/vendor/plugins/cucumber/lib') if File.directory?(RAILS_ROOT + '/vendor/plugins/cucumber/lib')
2
2
 
3
+ unless ARGV.any? {|a| a =~ /^gems/}
4
+
3
5
  begin
4
6
  require 'cucumber/rake/task'
5
7
 
@@ -18,3 +20,5 @@ rescue LoadError
18
20
  abort 'Cucumber rake task is not available. Be sure to install cucumber as a gem or plugin'
19
21
  end
20
22
  end
23
+
24
+ end
@@ -4,10 +4,11 @@ module Cucumber
4
4
  module Ast
5
5
  describe StepCollection do
6
6
  it "should convert And to Given in snippets" do
7
- c = StepCollection.new([
8
- Step.new(1, 'Given', 'cukes'),
9
- Step.new(2, 'And', 'turnips')
10
- ])
7
+ s1 = Step.new(1, 'Given', 'cukes')
8
+ s2 = Step.new(2, 'And', 'turnips')
9
+ s1.stub!(:language).and_return(Parser::I18n::Language['en'])
10
+ s2.stub!(:language).and_return(Parser::I18n::Language['en'])
11
+ c = StepCollection.new([s1, s2])
11
12
  actual_keywords = c.step_invocations.map{|i| i.actual_keyword}
12
13
  actual_keywords.should == %w{Given Given}
13
14
  end
@@ -138,12 +138,22 @@ module Cli
138
138
 
139
139
  end
140
140
 
141
+ context '--drb in the default profile and no arguments specified' do
142
+ it "expands the profile's arguments into the args excpet for --drb" do
143
+ given_cucumber_yml_defined_as({'default' => '--drb features --format pretty'})
144
+ config = Configuration.new(StringIO.new)
145
+ args = []
146
+ config.parse!(args)
147
+ args.should == %w{features --format pretty}
148
+ end
149
+ end
150
+
141
151
  it "should expand args from YAML file" do
142
152
  given_cucumber_yml_defined_as({'bongo' => '--require from/yml'})
143
153
 
144
154
  config = Configuration.new
145
155
  config.parse!(%w{--format progress --profile bongo})
146
- config.options[:formats].should == {'progress' => STDOUT}
156
+ config.options[:formats].should == [['progress', STDOUT]]
147
157
  config.options[:require].should == ['from/yml']
148
158
  end
149
159
 
@@ -255,26 +265,34 @@ END_OF_MESSAGE
255
265
  it "should accept --out option" do
256
266
  config = Configuration.new(StringIO.new)
257
267
  config.parse!(%w{--out jalla.txt})
258
- config.options[:formats]['pretty'].should == 'jalla.txt'
268
+ config.options[:formats].should == [['pretty', 'jalla.txt']]
259
269
  end
260
270
 
261
271
  it "should accept multiple --out options" do
262
272
  config = Configuration.new(StringIO.new)
263
273
  config.parse!(%w{--format progress --out file1 --out file2})
264
- config.options[:formats].should == {'progress' => 'file2'}
274
+ config.options[:formats].should == [['progress', 'file2']]
265
275
  end
266
276
 
267
- it "should accept multiple --format options" do
268
- config = Configuration.new(StringIO.new)
269
- config.parse!(%w{--format pretty --format progress})
270
- config.options[:formats].should have_key('pretty')
271
- config.options[:formats].should have_key('progress')
277
+ it "should accept multiple --format options and put the STDOUT one first so progress is seen" do
278
+ io = StringIO.new
279
+ config = Configuration.new(io)
280
+ config.parse!(%w{--format pretty --out pretty.txt --format progress})
281
+ config.options[:formats].should == [['progress', io], ['pretty', 'pretty.txt']]
282
+ end
283
+
284
+ it "should not accept multiple --format options when both use implicit STDOUT" do
285
+ io = StringIO.new
286
+ config = Configuration.new(io)
287
+ lambda do
288
+ config.parse!(%w{--format pretty --format progress})
289
+ end.should raise_error("All but one formatter must use --out, only one can print to STDOUT")
272
290
  end
273
291
 
274
292
  it "should associate --out to previous --format" do
275
293
  config = Configuration.new(StringIO.new)
276
294
  config.parse!(%w{--format progress --out file1 --format profile --out file2})
277
- config.options[:formats].should == {"profile"=>"file2", "progress"=>"file1"}
295
+ config.options[:formats].should == [["progress", "file1"], ["profile" ,"file2"]]
278
296
  end
279
297
 
280
298
  it "should accept --color option" do
@@ -358,6 +376,21 @@ END_OF_MESSAGE
358
376
  config.feature_files.should == ["cucumber.feature"]
359
377
  end
360
378
 
379
+ it "should allow specifying environment variables on the command line" do
380
+ config = Configuration.new
381
+ config.parse!(["foo=bar"])
382
+ ENV["foo"].should == "bar"
383
+ config.feature_files.should == []
384
+ end
385
+
386
+ it "should allow specifying environment variables in profiles" do
387
+ given_cucumber_yml_defined_as({'selenium' => 'RAILS_ENV=selenium'})
388
+ config = Configuration.new
389
+ config.parse!(["--profile", "selenium"])
390
+ ENV["RAILS_ENV"].should == "selenium"
391
+ config.feature_files.should == []
392
+ end
393
+
361
394
  end
362
395
  end
363
396
  end
@@ -35,7 +35,7 @@ module Cucumber
35
35
  @cli = Main.new(%w{--verbose example.feature}, @out)
36
36
  @cli.stub!(:require)
37
37
 
38
- Parser::FeatureParser.stub!(:new).and_return(mock("feature parser", :parse_file => @empty_feature))
38
+ FeatureFile.stub!(:new).and_return(mock("feature file", :parse => @empty_feature))
39
39
 
40
40
  @cli.execute!(Object.new.extend(StepMother))
41
41
 
@@ -115,10 +115,9 @@ module Cucumber
115
115
  @cli.execute!(@step_mother).should == 'foo'
116
116
  end
117
117
 
118
-
119
118
  it "ceases execution if the DrbClient is able to perform the execution" do
120
119
  DRbClient.stub!(:run).and_return(true)
121
- @configuration.should_not_receive(:load_language)
120
+ @configuration.should_not_receive(:build_formatter_broadcaster)
122
121
  @cli.execute!(@step_mother)
123
122
  end
124
123
 
@@ -134,15 +133,8 @@ module Cucumber
134
133
  @configuration.should_receive(:parse!).exactly(:twice)
135
134
  @cli.execute!(@step_mother)
136
135
  end
137
-
138
- it "proceeds with the execution locally" do
139
- @configuration.should_receive(:load_language)
140
- @cli.execute!(@step_mother)
141
- end
142
136
  end
143
-
144
137
  end
145
-
146
138
  end
147
139
  end
148
140
  end
@@ -1,11 +1,11 @@
1
1
  require File.dirname(__FILE__) + '/../../spec_helper'
2
- require 'cucumber/parser'
2
+ require 'cucumber/parser/i18n/language'
3
3
 
4
4
  module Cucumber
5
5
  module Parser
6
6
  describe Feature do
7
7
  before do
8
- @parser = FeatureParser.new
8
+ @parser = I18n::Language['en'].parser
9
9
  end
10
10
 
11
11
  def parse(text)
@@ -13,11 +13,11 @@ module Cucumber
13
13
  end
14
14
 
15
15
  def parse_file(file)
16
- @parser.parse_file(File.dirname(__FILE__) + "/../treetop_parser/" + file, {})
16
+ FeatureFile.new(File.dirname(__FILE__) + "/../treetop_parser/" + file).parse
17
17
  end
18
18
 
19
19
  def parse_example_file(file)
20
- @parser.parse_file(File.dirname(__FILE__) + "/../../../examples/" + file, {})
20
+ FeatureFile.new(File.dirname(__FILE__) + "/../../../examples/" + file).parse
21
21
  end
22
22
 
23
23
  describe "Comments" do
@@ -25,7 +25,7 @@ module Cucumber
25
25
  parse(%{# My comment
26
26
  Feature: hi
27
27
  }).to_sexp.should ==
28
- [:feature, nil, "Feature: hi\n",
28
+ [:feature, nil, "Feature: hi",
29
29
  [:comment, "# My comment\n"]]
30
30
  end
31
31
 
@@ -34,13 +34,13 @@ Feature: hi
34
34
  # World
35
35
  Feature: hi
36
36
  }).to_sexp.should ==
37
- [:feature, nil, "Feature: hi\n",
37
+ [:feature, nil, "Feature: hi",
38
38
  [:comment, "# Hello\n# World\n"]]
39
39
  end
40
40
 
41
41
  it "should parse a file with no comments" do
42
42
  parse("Feature: hi\n").to_sexp.should ==
43
- [:feature, nil, "Feature: hi\n"]
43
+ [:feature, nil, "Feature: hi"]
44
44
  end
45
45
 
46
46
  it "should parse a file with only a multiline comment with newlines" do
@@ -61,7 +61,7 @@ Feature: hi
61
61
  describe "Tags" do
62
62
  it "should parse a file with tags on a feature" do
63
63
  parse("# My comment\n@hello @world Feature: hi\n").to_sexp.should ==
64
- [:feature, nil, "Feature: hi\n",
64
+ [:feature, nil, "Feature: hi",
65
65
  [:comment, "# My comment\n"],
66
66
  [:tag, "hello"],
67
67
  [:tag, "world"]]
@@ -352,7 +352,9 @@ Given I am a step
352
352
 
353
353
  describe "Filtering" do
354
354
  it "should filter outline tables" do
355
- f = parse_example_file('self_test/features/outline_sample.feature:12')
355
+ ff = FeatureFile.new(
356
+ File.dirname(__FILE__) + '/../../../examples/self_test/features/outline_sample.feature:12')
357
+ f = ff.parse({:lang => 'en'})
356
358
  f.to_sexp.should ==
357
359
  [:feature,
358
360
  "./spec/cucumber/parser/../../../examples/self_test/features/outline_sample.feature",
@@ -6,7 +6,7 @@ module Cucumber
6
6
  module Parser
7
7
  describe 'Tables' do
8
8
  before do
9
- @parser = FeatureParser.new
9
+ @parser = I18n::EnglishParser.new
10
10
  end
11
11
 
12
12
  def parse(text)
data/spec/spec_helper.rb CHANGED
@@ -6,7 +6,6 @@ require 'spec/autorun'
6
6
  ENV['CUCUMBER_COLORS']=nil
7
7
  $:.unshift(File.dirname(__FILE__) + '/../lib')
8
8
  require 'cucumber'
9
- Cucumber.load_language('en')
10
9
  $:.unshift(File.dirname(__FILE__))
11
10
 
12
11
  ::Term::ANSIColor.coloring = true
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kosmas58-cucumber
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.11.3
4
+ version: 0.3.11.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - "Aslak Helles\xC3\xB8y"
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-06-07 00:00:00 -07:00
12
+ date: 2009-06-16 00:00:00 -07:00
13
13
  default_executable: cucumber
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -30,17 +30,7 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 1.2.5
34
- version:
35
- - !ruby/object:Gem::Dependency
36
- name: polyglot
37
- type: :runtime
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- version: 0.2.5
33
+ version: 1.2.6
44
34
  version:
45
35
  - !ruby/object:Gem::Dependency
46
36
  name: diff-lcs