gherkin 2.4.17 → 2.4.18

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gherkin (2.4.17)
4
+ gherkin (2.4.18)
5
5
  json (>= 1.4.6)
6
6
 
7
7
  GEM
@@ -11,9 +11,9 @@ GEM
11
11
  cucumber (1.0.2)
12
12
  builder (>= 2.1.2)
13
13
  diff-lcs (>= 1.1.2)
14
- gherkin (~> 2.4.5)
14
+ gherkin (~> 2.4.16)
15
15
  json (>= 1.4.6)
16
- term-ansicolor (>= 1.0.5)
16
+ term-ansicolor (>= 1.0.6)
17
17
  diff-lcs (1.1.3)
18
18
  json (1.5.4)
19
19
  json (1.5.4-java)
data/History.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## [2.4.18](https://github.com/cucumber/gherkin/compare/v2.4.17...v2.4.18)
2
+
3
+ ### New Features
4
+
5
+ * Fenced Code Blocks for DocStrings ([#123](https://github.com/cucumber/gherkin/issues/123) Gregory Hnatiuk, Aslak Hellesøy)
6
+
1
7
  ## [2.4.17](https://github.com/cucumber/gherkin/compare/v2.4.16...v2.4.17)
2
8
 
3
9
  ### New Features
data/README.md CHANGED
@@ -52,7 +52,7 @@ The jar file is in the central Maven repo.
52
52
  <dependency>
53
53
  <groupId>info.cukes</groupId>
54
54
  <artifactId>gherkin</artifactId>
55
- <version>2.4.17</version>
55
+ <version>2.4.18</version>
56
56
  </dependency>
57
57
 
58
58
  You can get it manually from [ibiblio](http://mirrors.ibiblio.org/pub/mirrors/maven2/info/cukes/gherkin) or by searching at [maven central](http://search.maven.org/)
@@ -53,7 +53,7 @@ Feature: JSON formatter
53
53
  When I was
54
54
  |asleep|
55
55
  And so
56
- \"\"\"
56
+ \"\"\"plaintext
57
57
  innocent
58
58
  \"\"\"
59
59
 
@@ -181,6 +181,7 @@ Feature: JSON formatter
181
181
  "line": 26,
182
182
  "multiline_arg": {
183
183
  "type": "doc_string",
184
+ "content_type": "plaintext",
184
185
  "value": "innocent",
185
186
  "line": 27
186
187
  }
@@ -1,3 +1,3 @@
1
1
  Given /^they have arrived$/ do |table|
2
- announce table.raw
2
+ puts table.raw
3
3
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "gherkin"
5
- s.version = "2.4.17"
5
+ s.version = "2.4.18"
6
6
  s.authors = ["Mike Sassak", "Gregory Hnatiuk", "Aslak Hellesøy"]
7
7
  s.description = "A fast Gherkin lexer/parser based on the Ragel State Machine Compiler."
8
8
  s.summary = "#{s.name}-#{s.version}"
@@ -146,6 +146,7 @@ module Gherkin
146
146
  }
147
147
  elsif DocString === @multiline_arg
148
148
  hash['multiline_arg']['type'] = 'doc_string'
149
+ hash['multiline_arg']['content_type'] = @multiline_arg.content_type
149
150
  end
150
151
  hash
151
152
  end
@@ -182,10 +183,10 @@ module Gherkin
182
183
  class DocString < Hashable
183
184
  native_impl('gherkin')
184
185
 
185
- attr_reader :value, :line
186
+ attr_reader :content_type, :value, :line
186
187
 
187
- def initialize(value, line)
188
- @value, @line = value, line
188
+ def initialize(content_type, value, line)
189
+ @content_type, @value, @line = content_type, value, line
189
190
  end
190
191
 
191
192
  def line_range
@@ -233,4 +234,4 @@ module Gherkin
233
234
  end
234
235
  end
235
236
  end
236
- end
237
+ end
@@ -181,7 +181,7 @@ module Gherkin
181
181
  private
182
182
 
183
183
  def doc_string(doc_string)
184
- @io.puts " \"\"\"\n" + escape_triple_quotes(indent(doc_string.value, ' ')) + "\n \"\"\""
184
+ @io.puts " \"\"\"" + doc_string.content_type + "\n" + escape_triple_quotes(indent(doc_string.value, ' ')) + "\n \"\"\""
185
185
  end
186
186
 
187
187
  def exception(exception)
@@ -57,7 +57,7 @@ module Gherkin
57
57
  if(ma['type'] == 'table')
58
58
  step.multiline_arg = rows(ma['value'])
59
59
  else
60
- step.multiline_arg = Formatter::Model::DocString.new(ma['value'], ma['line'])
60
+ step.multiline_arg = Formatter::Model::DocString.new(ma['content_type'].to_s, ma['value'], ma['line'])
61
61
  end
62
62
  end
63
63
 
@@ -57,8 +57,8 @@ module Gherkin
57
57
  @table << Formatter::Model::Row.new(grab_comments!, cells, line)
58
58
  end
59
59
 
60
- def doc_string(string, line)
61
- @doc_string = Formatter::Model::DocString.new(string, line)
60
+ def doc_string(string, content_type, line)
61
+ @doc_string = Formatter::Model::DocString.new(string, content_type, line)
62
62
  end
63
63
 
64
64
  def eof
@@ -10,7 +10,7 @@ module Gherkin
10
10
  o.map{|e| rubify(e)}
11
11
  when Java.gherkin.formatter.model.DocString
12
12
  require 'gherkin/formatter/model'
13
- Formatter::Model::DocString.new(o.value, o.line)
13
+ Formatter::Model::DocString.new(o.content_type, o.value, o.line)
14
14
  else
15
15
  o
16
16
  end
@@ -45,6 +45,8 @@ typedef struct lexer_state {
45
45
  size_t next_keyword_start;
46
46
  size_t content_start;
47
47
  size_t content_end;
48
+ size_t docstring_content_type_start;
49
+ size_t docstring_content_type_end;
48
50
  size_t query_start;
49
51
  size_t last_newline;
50
52
  size_t final_newline;
@@ -84,23 +86,33 @@ static VALUE rb_eGherkinLexingError;
84
86
  lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
85
87
  }
86
88
 
87
- action begin_pystring_content {
89
+ action begin_docstring_content {
88
90
  MARK(content_start, p);
89
91
  }
90
92
 
91
- action start_pystring {
93
+ action start_docstring {
92
94
  lexer->current_line = lexer->line_number;
93
95
  lexer->start_col = p - data - lexer->last_newline;
94
96
  }
95
97
 
96
- action store_pystring_content {
98
+ action store_docstring_content {
97
99
  int len = LEN(content_start, PTR_TO(final_newline));
100
+ int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
98
101
 
99
102
  if (len < 0) len = 0;
103
+ if (type_len < 0) len = 0;
100
104
 
101
- store_pystring_content(listener, lexer->start_col, PTR_TO(content_start), len, lexer->current_line);
105
+ store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
102
106
  }
103
107
 
108
+ action start_docstring_content_type {
109
+ MARK(docstring_content_type_start, p);
110
+ }
111
+
112
+ action end_docstring_content_type {
113
+ MARK(docstring_content_type_end, p);
114
+ }
115
+
104
116
  action store_feature_content {
105
117
  STORE_KW_END_CON(feature);
106
118
  }
@@ -311,26 +323,27 @@ store_attr(VALUE listener, const char * attr_type,
311
323
  VALUE val = ENCODED_STR_NEW(at, length);
312
324
  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
313
325
  }
314
-
315
326
  static void
316
- store_pystring_content(VALUE listener,
327
+ store_docstring_content(VALUE listener,
317
328
  int start_col,
329
+ const char *type_at, size_t type_length,
318
330
  const char *at, size_t length,
319
331
  int current_line)
320
332
  {
321
333
  VALUE re2;
322
334
  VALUE unescape_escaped_quotes;
323
335
  VALUE con = ENCODED_STR_NEW(at, length);
336
+ VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
324
337
 
325
338
  unindent(con, start_col);
326
339
 
327
340
  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
328
341
  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
329
342
  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
343
+ rb_funcall(con_type, rb_intern("strip!"), 0);
330
344
  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
331
- rb_funcall(listener, rb_intern("doc_string"), 2, con, INT2FIX(current_line));
345
+ rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
332
346
  }
333
-
334
347
  static void
335
348
  raise_lexer_error(const char * at, int line)
336
349
  {
@@ -341,6 +354,8 @@ static void lexer_init(lexer_state *lexer) {
341
354
  lexer->content_start = 0;
342
355
  lexer->content_end = 0;
343
356
  lexer->content_len = 0;
357
+ lexer->docstring_content_type_start = 0;
358
+ lexer->docstring_content_type_end = 0;
344
359
  lexer->mark = 0;
345
360
  lexer->keyword_start = 0;
346
361
  lexer->keyword_end = 0;
@@ -21,18 +21,27 @@ public class <%= @i18n.underscored_iso_code.upcase %> implements Lexer {
21
21
  }
22
22
  }
23
23
 
24
- action start_pystring {
24
+ action start_docstring {
25
25
  currentLine = lineNumber;
26
26
  startCol = p - lastNewline;
27
27
  }
28
28
 
29
- action begin_pystring_content {
29
+ action begin_docstring_content {
30
30
  contentStart = p;
31
31
  }
32
32
 
33
- action store_pystring_content {
33
+ action start_docstring_content_type {
34
+ docstringContentTypeStart = p;
35
+ }
36
+
37
+ action end_docstring_content_type {
38
+ docstringContentTypeEnd = p;
39
+ }
40
+
41
+ action store_docstring_content {
34
42
  String con = unindent(startCol, substring(data, contentStart, nextKeywordStart-1).replaceFirst("(\\r?\\n)?([\\t ])*\\Z", "").replaceAll("\\\\\"\\\\\"\\\\\"", "\"\"\""));
35
- listener.docString(con, currentLine);
43
+ String conType = substring(data, docstringContentTypeStart, docstringContentTypeEnd).trim();
44
+ listener.docString(conType, con, currentLine);
36
45
  }
37
46
 
38
47
  action store_feature_content {
@@ -164,6 +173,8 @@ public class <%= @i18n.underscored_iso_code.upcase %> implements Lexer {
164
173
 
165
174
  int contentStart = -1;
166
175
  int currentLine = -1;
176
+ int docstringContentTypeStart = -1;
177
+ int docstringContentTypeEnd = -1;
167
178
  int startCol = -1;
168
179
  int nextKeywordStart = -1;
169
180
  int keywordStart = -1;
@@ -9,21 +9,30 @@
9
9
  this.start_col = p - this.last_newline - (this.keyword+':').length;
10
10
  }
11
11
 
12
- action start_pystring {
12
+ action start_docstring {
13
13
  this.current_line = this.line_number;
14
14
  this.start_col = p - this.last_newline;
15
15
  }
16
16
 
17
- action begin_pystring_content {
17
+ action begin_docstring_content {
18
18
  this.content_start = p;
19
19
  }
20
20
 
21
- action store_pystring_content {
21
+ action start_docstring_content_type {
22
+ this.docstring_content_type_start = p;
23
+ }
24
+
25
+ action end_docstring_content_type {
26
+ this.docstring_content_type_end = p;
27
+ }
28
+
29
+ action store_docstring_content {
22
30
  var con = this.unindent(
23
31
  this.start_col,
24
32
  this.bytesToString(data.slice(this.content_start, this.next_keyword_start-1)).replace(/(\r?\n)?([\t ])*$/, '').replace(/ESCAPED_TRIPLE_QUOTE/mg, '"""')
25
33
  );
26
- this.listener.doc_string(con, this.current_line);
34
+ var con_type = this.bytesToString(data.slice(this.docstring_content_type_start, this.docstring_content_type_end)).trim();
35
+ this.listener.doc_string(con_type, con, this.current_line);
27
36
  }
28
37
 
29
38
  action store_feature_content {
@@ -12,20 +12,27 @@ module Gherkin
12
12
  @start_col = p - @last_newline - "#{@keyword}:".length
13
13
  }
14
14
 
15
- action start_pystring {
15
+ action start_docstring {
16
16
  @current_line = @line_number
17
17
  @start_col = p - @last_newline
18
18
  }
19
19
 
20
- action begin_pystring_content {
20
+ action begin_docstring_content {
21
21
  @content_start = p
22
22
  }
23
23
 
24
- action store_pystring_content {
24
+ action start_docstring_content_type {
25
+ @docstring_content_type_start = p
26
+ }
27
+ action end_docstring_content_type {
28
+ @docstring_content_type_end = p
29
+ }
30
+
31
+ action store_docstring_content {
25
32
  con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""'))
26
- @listener.doc_string(con, @current_line)
33
+ con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip
34
+ @listener.doc_string(con_type, con, @current_line)
27
35
  }
28
-
29
36
  action store_feature_content {
30
37
  p = store_keyword_content(:feature, data, p, eof)
31
38
  }
@@ -40,11 +40,11 @@
40
40
  RowBody = space* Cell** PIPE :>> (space* EOL+ space*) %store_row;
41
41
  Row = StartRow :>> RowBody <: EndRow?;
42
42
 
43
- StartDocString = '"""' >start_pystring space* :>> EOL;
44
- EndDocString = (space* '"""') >next_keyword_start;
45
- DocString = space* StartDocString %begin_pystring_content (^EOL | EOL)* :>> EndDocString %store_pystring_content space* EOL+;
43
+ StartDocString = '"""' >start_docstring ^EOL* >start_docstring_content_type %end_docstring_content_type :>> EOL;
44
+ EndDocString = (space* '"""') >next_keyword_start;
45
+ DocString = space* StartDocString %begin_docstring_content (^EOL | EOL)* :>> EndDocString %store_docstring_content space* EOL+;
46
46
 
47
- Tokens = BOM? (space | EOL)* (Tags | Comment | FeatureHeading | BackgroundHeading | ScenarioHeading | ScenarioOutlineHeading | ExamplesHeading | Step | Row | DocString)* (space | EOL)* EOF;
47
+ Tokens = BOM? (space | EOL)* (Tags | Comment | FeatureHeading | BackgroundHeading | ScenarioHeading | ScenarioOutlineHeading | ExamplesHeading | Step | Row | DocString )* (space | EOL)* EOF;
48
48
 
49
49
  main := Tokens %end_feature @!end_feature;
50
50
  }%%
@@ -130,6 +130,7 @@
130
130
  "keyword": "Given ",
131
131
  "multiline_arg": {
132
132
  "type": "doc_string",
133
+ "content_type": "text",
133
134
  "value": "Makes Homer something something\nAnd something else",
134
135
  "line": 777
135
136
  }
@@ -23,17 +23,17 @@ Feature: some feature
23
23
  """
24
24
  Then bar
25
25
  EOS
26
- @listener.should_receive(:doc_string).with(" Hello\nGoodbye", 4)
26
+ @listener.should_receive(:doc_string).with('', " Hello\nGoodbye", 4)
27
27
  scan(str)
28
28
  end
29
29
 
30
30
  it "should parse a simple doc_string" do
31
- @listener.should_receive(:doc_string).with("I am a doc_string", 1)
31
+ @listener.should_receive(:doc_string).with('', "I am a doc_string", 1)
32
32
  scan ps("I am a doc_string")
33
33
  end
34
34
 
35
35
  it "should parse an empty doc_string" do
36
- @listener.should_receive(:doc_string).with("", 4)
36
+ @listener.should_receive(:doc_string).with('', '', 4)
37
37
  scan("Feature: Hi\nScenario: Hi\nGiven a step\n\"\"\"\n\"\"\"")
38
38
  end
39
39
 
@@ -45,25 +45,25 @@ doc_string = <<EOS
45
45
 
46
46
  """
47
47
  EOS
48
- @listener.should_receive(:doc_string).with("\n\n", 1)
48
+ @listener.should_receive(:doc_string).with('', "\n\n", 1)
49
49
  scan(doc_string)
50
50
  end
51
51
 
52
52
  it "should parse content separated by two newlines" do
53
53
  scan ps("A\n\nB")
54
54
  @listener.to_sexp.should == [
55
- [:doc_string, "A\n\nB", 1],
55
+ [:doc_string, '', "A\n\nB", 1],
56
56
  [:eof]
57
57
  ]
58
58
  end
59
59
 
60
60
  it "should parse a multiline string" do
61
- @listener.should_receive(:doc_string).with("A\nB\nC\nD", 1)
61
+ @listener.should_receive(:doc_string).with('', "A\nB\nC\nD", 1)
62
62
  scan ps("A\nB\nC\nD")
63
63
  end
64
64
 
65
65
  it "should ignore unescaped quotes inside the string delimeters" do
66
- @listener.should_receive(:doc_string).with("What does \"this\" mean?", 1)
66
+ @listener.should_receive(:doc_string).with('', "What does \"this\" mean?", 1)
67
67
  scan ps('What does "this" mean?')
68
68
  end
69
69
 
@@ -74,12 +74,12 @@ str = <<EOS
74
74
  Line two
75
75
  """
76
76
  EOS
77
- @listener.should_receive(:doc_string).with(" Line one\nLine two", 1)
77
+ @listener.should_receive(:doc_string).with('', " Line one\nLine two", 1)
78
78
  scan(str)
79
79
  end
80
80
 
81
81
  it "should preserve tabs within the content" do
82
- @listener.should_receive(:doc_string).with("I have\tsome tabs\nInside\t\tthe content", 1)
82
+ @listener.should_receive(:doc_string).with('', "I have\tsome tabs\nInside\t\tthe content", 1)
83
83
  scan ps("I have\tsome tabs\nInside\t\tthe content")
84
84
  end
85
85
 
@@ -98,7 +98,7 @@ Feature: Sample
98
98
 
99
99
  EOS
100
100
 
101
- @listener.should_receive(:doc_string).with(doc_string, 1)
101
+ @listener.should_receive(:doc_string).with('', doc_string, 1)
102
102
  scan ps(doc_string)
103
103
  end
104
104
 
@@ -108,7 +108,7 @@ str = <<EOS
108
108
  Line one
109
109
  """
110
110
  EOS
111
- @listener.should_receive(:doc_string).with(" Line one", 1)
111
+ @listener.should_receive(:doc_string).with('', " Line one", 1)
112
112
  scan(str)
113
113
  end
114
114
 
@@ -120,12 +120,12 @@ str = <<EOS
120
120
 
121
121
  """
122
122
  EOS
123
- @listener.should_receive(:doc_string).with("DocString text\n\n",1)
123
+ @listener.should_receive(:doc_string).with('', "DocString text\n\n", 1)
124
124
  scan(str)
125
125
  end
126
126
 
127
127
  it "should preserve CRLFs within doc_strings" do
128
- @listener.should_receive(:doc_string).with("Line one\r\nLine two\r\n", 1)
128
+ @listener.should_receive(:doc_string).with('', "Line one\r\nLine two\r\n", 1)
129
129
  scan("\"\"\"\r\nLine one\r\nLine two\r\n\r\n\"\"\"")
130
130
  end
131
131
 
@@ -135,7 +135,7 @@ str = <<EOS
135
135
  \\"\\"\\"
136
136
  """
137
137
  EOS
138
- @listener.should_receive(:doc_string).with('"""', 1)
138
+ @listener.should_receive(:doc_string).with('', '"""', 1)
139
139
  scan(str)
140
140
  end
141
141
 
@@ -145,7 +145,17 @@ str = <<EOS
145
145
  \\" \\"\\"
146
146
  """
147
147
  EOS
148
- @listener.should_receive(:doc_string).with('\" \"\"', 1)
148
+ @listener.should_receive(:doc_string).with('', '\" \"\"', 1)
149
+ scan(str)
150
+ end
151
+
152
+ it "should lex doc_string content_types" do
153
+ str = <<EOS
154
+ """gherkin type
155
+ Feature: Doc String Types
156
+ """
157
+ EOS
158
+ @listener.should_receive(:doc_string).with('gherkin type', 'Feature: Doc String Types', 1)
149
159
  scan(str)
150
160
  end
151
161
  end
@@ -286,7 +286,7 @@ f'real
286
286
  scan("Given I have a string\n\"\"\"\nhello\nworld\n\"\"\"")
287
287
  @listener.to_sexp.should == [
288
288
  [:step, "Given ", "I have a string", 1],
289
- [:doc_string, "hello\nworld", 2],
289
+ [:doc_string, '', "hello\nworld", 2],
290
290
  [:eof]
291
291
  ]
292
292
  end
@@ -497,7 +497,7 @@ f'real
497
497
  [:step, "Then ", "I am happy", 37],
498
498
  [:scenario, "Scenario", "Hammerzeit", "", 39],
499
499
  [:step, "Given ", "All work and no play", 40],
500
- [:doc_string, "Makes Homer something something\nAnd something else", 41 ],
500
+ [:doc_string, '', "Makes Homer something something\nAnd something else", 41 ],
501
501
  [:step, "Then ", "crazy", 45],
502
502
  [:eof]
503
503
  ]
@@ -540,7 +540,7 @@ f'real
540
540
  [:step, "Then ", "I am happy", 37],
541
541
  [:scenario, "Scenario", "Hammerzeit", "", 39],
542
542
  [:step, "Given ", "All work and no play", 40],
543
- [:doc_string, "Makes Homer something something\r\nAnd something else", 41],
543
+ [:doc_string, '', "Makes Homer something something\r\nAnd something else", 41],
544
544
  [:step, "Then ", "crazy", 45],
545
545
  [:eof]
546
546
  ]
@@ -1,4 +1,4 @@
1
- unless ENV['RUBY_CC_VERSION'] || defined?(JRUBY_VERSION)
1
+ unless ENV['RUBY_CC_VERSION']
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new(:cucumber) do |t|
@@ -45,6 +45,6 @@ namespace :release do
45
45
 
46
46
  task :symlink_docs do
47
47
  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'")
48
- sh("ssh cukes.info 'cd /var/www/gherkin/api/ruby && rm -f latest && ln -s #{GHERKIN_VERSION} latest'")
48
+ sh("ssh cukes.info 'cd /var/www/gherkin/api/java && rm -f latest && ln -s #{GHERKIN_VERSION} latest'")
49
49
  end
50
50
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gherkin
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.17
4
+ version: 2.4.18
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -11,11 +11,11 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2011-09-04 00:00:00.000000000Z
14
+ date: 2011-09-05 00:00:00.000000000Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rake-compiler
18
- requirement: &2168708000 !ruby/object:Gem::Requirement
18
+ requirement: &2168910260 !ruby/object:Gem::Requirement
19
19
  none: false
20
20
  requirements:
21
21
  - - ! '>='
@@ -23,10 +23,10 @@ dependencies:
23
23
  version: 0.7.9
24
24
  type: :development
25
25
  prerelease: false
26
- version_requirements: *2168708000
26
+ version_requirements: *2168910260
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: json
29
- requirement: &2168707520 !ruby/object:Gem::Requirement
29
+ requirement: &2168909780 !ruby/object:Gem::Requirement
30
30
  none: false
31
31
  requirements:
32
32
  - - ! '>='
@@ -34,10 +34,10 @@ dependencies:
34
34
  version: 1.4.6
35
35
  type: :runtime
36
36
  prerelease: false
37
- version_requirements: *2168707520
37
+ version_requirements: *2168909780
38
38
  - !ruby/object:Gem::Dependency
39
39
  name: cucumber
40
- requirement: &2168707040 !ruby/object:Gem::Requirement
40
+ requirement: &2168909320 !ruby/object:Gem::Requirement
41
41
  none: false
42
42
  requirements:
43
43
  - - ! '>='
@@ -45,10 +45,10 @@ dependencies:
45
45
  version: 1.0.2
46
46
  type: :development
47
47
  prerelease: false
48
- version_requirements: *2168707040
48
+ version_requirements: *2168909320
49
49
  - !ruby/object:Gem::Dependency
50
50
  name: rake
51
- requirement: &2168706580 !ruby/object:Gem::Requirement
51
+ requirement: &2168908860 !ruby/object:Gem::Requirement
52
52
  none: false
53
53
  requirements:
54
54
  - - ! '>='
@@ -56,10 +56,10 @@ dependencies:
56
56
  version: 0.9.2
57
57
  type: :development
58
58
  prerelease: false
59
- version_requirements: *2168706580
59
+ version_requirements: *2168908860
60
60
  - !ruby/object:Gem::Dependency
61
61
  name: bundler
62
- requirement: &2168706120 !ruby/object:Gem::Requirement
62
+ requirement: &2168908400 !ruby/object:Gem::Requirement
63
63
  none: false
64
64
  requirements:
65
65
  - - ! '>='
@@ -67,10 +67,10 @@ dependencies:
67
67
  version: 1.0.18
68
68
  type: :development
69
69
  prerelease: false
70
- version_requirements: *2168706120
70
+ version_requirements: *2168908400
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: rspec
73
- requirement: &2168705660 !ruby/object:Gem::Requirement
73
+ requirement: &2168907940 !ruby/object:Gem::Requirement
74
74
  none: false
75
75
  requirements:
76
76
  - - ! '>='
@@ -78,10 +78,10 @@ dependencies:
78
78
  version: 2.6.0
79
79
  type: :development
80
80
  prerelease: false
81
- version_requirements: *2168705660
81
+ version_requirements: *2168907940
82
82
  - !ruby/object:Gem::Dependency
83
83
  name: therubyracer
84
- requirement: &2168705120 !ruby/object:Gem::Requirement
84
+ requirement: &2168907400 !ruby/object:Gem::Requirement
85
85
  none: false
86
86
  requirements:
87
87
  - - ! '>='
@@ -89,10 +89,10 @@ dependencies:
89
89
  version: 0.9.4
90
90
  type: :development
91
91
  prerelease: false
92
- version_requirements: *2168705120
92
+ version_requirements: *2168907400
93
93
  - !ruby/object:Gem::Dependency
94
94
  name: yard
95
- requirement: &2168704660 !ruby/object:Gem::Requirement
95
+ requirement: &2168906940 !ruby/object:Gem::Requirement
96
96
  none: false
97
97
  requirements:
98
98
  - - ! '>='
@@ -100,10 +100,10 @@ dependencies:
100
100
  version: 0.7.2
101
101
  type: :development
102
102
  prerelease: false
103
- version_requirements: *2168704660
103
+ version_requirements: *2168906940
104
104
  - !ruby/object:Gem::Dependency
105
105
  name: rdiscount
106
- requirement: &2168704200 !ruby/object:Gem::Requirement
106
+ requirement: &2168906480 !ruby/object:Gem::Requirement
107
107
  none: false
108
108
  requirements:
109
109
  - - ! '>='
@@ -111,10 +111,10 @@ dependencies:
111
111
  version: 1.6.8
112
112
  type: :development
113
113
  prerelease: false
114
- version_requirements: *2168704200
114
+ version_requirements: *2168906480
115
115
  - !ruby/object:Gem::Dependency
116
116
  name: term-ansicolor
117
- requirement: &2168703740 !ruby/object:Gem::Requirement
117
+ requirement: &2168906020 !ruby/object:Gem::Requirement
118
118
  none: false
119
119
  requirements:
120
120
  - - ! '>='
@@ -122,10 +122,10 @@ dependencies:
122
122
  version: 1.0.6
123
123
  type: :development
124
124
  prerelease: false
125
- version_requirements: *2168703740
125
+ version_requirements: *2168906020
126
126
  - !ruby/object:Gem::Dependency
127
127
  name: builder
128
- requirement: &2168693020 !ruby/object:Gem::Requirement
128
+ requirement: &2168898780 !ruby/object:Gem::Requirement
129
129
  none: false
130
130
  requirements:
131
131
  - - ! '>='
@@ -133,7 +133,7 @@ dependencies:
133
133
  version: 2.1.2
134
134
  type: :development
135
135
  prerelease: false
136
- version_requirements: *2168693020
136
+ version_requirements: *2168898780
137
137
  description: A fast Gherkin lexer/parser based on the Ragel State Machine Compiler.
138
138
  email: cukes@googlegroups.com
139
139
  executables: []
@@ -218,7 +218,6 @@ files:
218
218
  - gherkin.gemspec
219
219
  - ikvm/.gitignore
220
220
  - java/.gitignore
221
- - java/Gherkin.iml
222
221
  - java/src/main/java/gherkin/lexer/i18n/.gitignore
223
222
  - java/src/main/resources/gherkin/.gitignore
224
223
  - js/.gitignore
@@ -487,7 +486,7 @@ rubyforge_project:
487
486
  rubygems_version: 1.8.6
488
487
  signing_key:
489
488
  specification_version: 3
490
- summary: gherkin-2.4.17
489
+ summary: gherkin-2.4.18
491
490
  test_files:
492
491
  - features/escaped_pipes.feature
493
492
  - features/feature_parser.feature