ruby_parser 3.0.1 → 3.0.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of ruby_parser might be problematic. Click here for more details.

data.tar.gz.sig CHANGED
Binary file
data/History.txt CHANGED
@@ -1,3 +1,24 @@
1
+ === 3.0.2 / 2012-11-21
2
+
3
+ 52 down makes 99.9767% or 3.7σ. 130 files failed to parse out of 558k.
4
+
5
+ * 4 minor enhancements:
6
+
7
+ * Added RP_TIMEOUT env var to override default timeout of 10 seconds.
8
+ * Minor optimization to RubyLexer#parse_number
9
+ * Only output parseerror output to stderr if $DEBUG.
10
+ * ruby_parse_extract_error modified to include 'it' blocks in its search.
11
+
12
+ * 7 bug fixes:
13
+
14
+ * 1.9: Fixed args in dot-call forms (eg f.(...)).
15
+ * 1.9: Fixed lexing stabby lambda w/ do/end
16
+ * Deal better with DOS files. Ugh.
17
+ * Fix line number of production after heredoc.
18
+ * Fixed RubyParser#process to reuse parser instances across calls.
19
+ * Fixed line numbers for several productions.
20
+ * new_call sets line number to smallest line number of members.
21
+
1
22
  === 3.0.1 / 2012-11-02
2
23
 
3
24
  * 2 bug fixes -- both based on MRI bugs... Yay?:
data/Rakefile CHANGED
@@ -144,6 +144,7 @@ task :debug => :isolate do
144
144
 
145
145
  $: << "lib"
146
146
  require 'ruby_parser'
147
+ require 'pp'
147
148
 
148
149
  parser = if ENV["V"] == "18" then
149
150
  Ruby18Parser.new
@@ -151,6 +152,8 @@ task :debug => :isolate do
151
152
  Ruby19Parser.new
152
153
  end
153
154
 
155
+ time = (ENV["RP_TIMEOUT"] || 10).to_i
156
+
154
157
  file = ENV["F"] || ENV["FILE"]
155
158
 
156
159
  ruby = if file then
@@ -161,7 +164,7 @@ task :debug => :isolate do
161
164
  end
162
165
 
163
166
  begin
164
- p parser.process(ruby, file)
167
+ pp parser.process(ruby, file, time)
165
168
  rescue Racc::ParseError => e
166
169
  p e
167
170
  ss = parser.lexer.src
@@ -185,4 +188,8 @@ task :extract => :isolate do
185
188
  ruby "-Ilib", "bin/ruby_parse_extract_error", file
186
189
  end
187
190
 
191
+ task :bugs do
192
+ sh "for f in bug*.rb ; do rake debug F=$f && rm $f ; done"
193
+ end
194
+
188
195
  # vim: syntax=Ruby
@@ -21,7 +21,7 @@ class Racc::Parser
21
21
  src = ss.string
22
22
  pre_error = src[0...ss.pos]
23
23
 
24
- defs = pre_error.grep(/^ *def/)
24
+ defs = pre_error.grep(/^ *(?:def|it)/)
25
25
 
26
26
  raise "can't figure out where the bad code starts" unless defs.last
27
27
 
@@ -34,7 +34,7 @@ class Racc::Parser
34
34
 
35
35
  src = pre_error + post_error[0..idx+$&.length]
36
36
 
37
- src.scan(/^(( *)def .*?^\2end)/m)
37
+ src.scan(/^(( *)(?:def|it) .*?^\2end)/m)
38
38
  end
39
39
 
40
40
  def retest_for_errors defs
@@ -56,7 +56,7 @@ def expand path
56
56
  files << f if File.file? f
57
57
  end
58
58
 
59
- files
59
+ files.sort
60
60
  else
61
61
  Dir.glob path
62
62
  end
@@ -86,10 +86,11 @@ end
86
86
 
87
87
  def process file
88
88
  ruby = file == "-" ? $stdin.read : File.read(file)
89
+ time = (ENV["RP_TIMEOUT"] || 10).to_i
89
90
 
90
91
  $stderr.print "# Validating #{file}: "
91
92
  parser = Ruby19Parser.new
92
- parser.process(ruby, file)
93
+ parser.process(ruby, file, time)
93
94
  warn "good"
94
95
  File.unlink file if $d
95
96
  rescue Timeout::Error
data/lib/ruby19_parser.rb CHANGED
@@ -4740,13 +4740,15 @@ def _reduce_322(val, _values, result)
4740
4740
  self.comments.push self.lexer.comments
4741
4741
  self.in_def = true
4742
4742
  self.env.extend
4743
- result = lexer.lineno, lexer.src.beginning_of_line?
4743
+ result = lexer.lineno
4744
4744
 
4745
4745
  result
4746
4746
  end
4747
4747
 
4748
4748
  def _reduce_323(val, _values, result)
4749
4749
  result = new_defn val
4750
+ result[2].line val[2]
4751
+
4750
4752
  self.env.unextend
4751
4753
  self.in_def = false
4752
4754
 
@@ -4764,12 +4766,14 @@ def _reduce_325(val, _values, result)
4764
4766
  self.in_single += 1
4765
4767
  self.env.extend
4766
4768
  lexer.lex_state = :expr_end # force for args
4769
+ result = lexer.lineno
4767
4770
 
4768
4771
  result
4769
4772
  end
4770
4773
 
4771
4774
  def _reduce_326(val, _values, result)
4772
4775
  result = new_defs val
4776
+ result[3].line val[5]
4773
4777
 
4774
4778
  self.env.unextend
4775
4779
  self.in_single -= 1
@@ -5209,13 +5213,13 @@ def _reduce_408(val, _values, result)
5209
5213
  end
5210
5214
 
5211
5215
  def _reduce_409(val, _values, result)
5212
- result = new_call val[0], :call
5216
+ result = new_call val[0], :call, val[2]
5213
5217
 
5214
5218
  result
5215
5219
  end
5216
5220
 
5217
5221
  def _reduce_410(val, _values, result)
5218
- result = new_call val[0], :call
5222
+ result = new_call val[0], :call, val[2]
5219
5223
 
5220
5224
  result
5221
5225
  end
data/lib/ruby19_parser.y CHANGED
@@ -1109,11 +1109,13 @@ rule
1109
1109
  self.comments.push self.lexer.comments
1110
1110
  self.in_def = true
1111
1111
  self.env.extend
1112
- result = lexer.lineno, lexer.src.beginning_of_line?
1112
+ result = lexer.lineno
1113
1113
  }
1114
1114
  f_arglist bodystmt kEND
1115
1115
  {
1116
1116
  result = new_defn val
1117
+ result[2].line val[2]
1118
+
1117
1119
  self.env.unextend
1118
1120
  self.in_def = false
1119
1121
  }
@@ -1127,10 +1129,12 @@ rule
1127
1129
  self.in_single += 1
1128
1130
  self.env.extend
1129
1131
  lexer.lex_state = :expr_end # force for args
1132
+ result = lexer.lineno
1130
1133
  }
1131
1134
  f_arglist bodystmt kEND
1132
1135
  {
1133
1136
  result = new_defs val
1137
+ result[3].line val[5]
1134
1138
 
1135
1139
  self.env.unextend
1136
1140
  self.in_single -= 1
@@ -1452,11 +1456,11 @@ rule
1452
1456
  }
1453
1457
  | primary_value tDOT paren_args
1454
1458
  {
1455
- result = new_call val[0], :call
1459
+ result = new_call val[0], :call, val[2]
1456
1460
  }
1457
1461
  | primary_value tCOLON2 paren_args
1458
1462
  {
1459
- result = new_call val[0], :call
1463
+ result = new_call val[0], :call, val[2]
1460
1464
  }
1461
1465
  | kSUPER paren_args
1462
1466
  {
data/lib/ruby_lexer.rb CHANGED
@@ -279,12 +279,12 @@ class RubyLexer
279
279
  case
280
280
  when src.scan(/[+-]?0[xXbBdD]\b/) then
281
281
  rb_compile_error "Invalid numeric format"
282
+ when src.scan(/[+-]?(?:(?:[1-9][\d_]*|0)(?!\.\d)\b|0[Dd][0-9_]+)/) then
283
+ int_with_base(10)
282
284
  when src.scan(/[+-]?0x[a-f0-9_]+/i) then
283
285
  int_with_base(16)
284
286
  when src.scan(/[+-]?0[Bb][01_]+/) then
285
287
  int_with_base(2)
286
- when src.scan(/[+-]?0[Dd][0-9_]+/) then
287
- int_with_base(10)
288
288
  when src.scan(/[+-]?0[Oo]?[0-7_]*[89]/) then
289
289
  rb_compile_error "Illegal octal digit."
290
290
  when src.scan(/[+-]?0[Oo]?[0-7_]+|0[Oo]/) then
@@ -298,9 +298,7 @@ class RubyLexer
298
298
  end
299
299
  self.yacc_value = number.to_f
300
300
  :tFLOAT
301
- when src.scan(/[+-]?0\b/) then
302
- int_with_base(10)
303
- when src.scan(/[+-]?[\d_]+\b/) then
301
+ when src.scan(/[+-]?[0-9_]+(?![e])/) then
304
302
  int_with_base(10)
305
303
  else
306
304
  rb_compile_error "Bad number format"
@@ -1233,7 +1231,7 @@ class RubyLexer
1233
1231
  return process_token(command_state)
1234
1232
  end
1235
1233
  elsif src.check(/\_/) then
1236
- if src.beginning_of_line? && src.scan(/\__END__(\n|\Z)/) then
1234
+ if src.beginning_of_line? && src.scan(/\__END__(\r?\n|\Z)/) then
1237
1235
  self.lineno = nil
1238
1236
  return RubyLexer::EOF
1239
1237
  elsif src.scan(/\_\w*/) then
@@ -1380,13 +1378,16 @@ class RubyLexer
1380
1378
 
1381
1379
  if keyword.id0 == :kDO then
1382
1380
  self.command_start = true
1383
- return :kDO_COND if cond.is_in_state
1384
- return :kDO_BLOCK if cmdarg.is_in_state && state != :expr_cmdarg
1385
- return :kDO_BLOCK if state == :expr_endarg
1381
+
1386
1382
  if defined?(@hack_expects_lambda) && @hack_expects_lambda
1387
1383
  @hack_expects_lambda = false
1388
1384
  return :kDO_LAMBDA
1389
1385
  end
1386
+
1387
+ return :kDO_COND if cond.is_in_state
1388
+ return :kDO_BLOCK if cmdarg.is_in_state && state != :expr_cmdarg
1389
+ return :kDO_BLOCK if state == :expr_endarg
1390
+
1390
1391
  return :kDO
1391
1392
  end
1392
1393
 
@@ -78,7 +78,7 @@ class RPStringScanner < StringScanner
78
78
 
79
79
  def unread_many str # TODO: remove this entirely - we should not need it
80
80
  warn({:unread_many => caller[0]}.inspect) if ENV['TALLY']
81
- self.extra_lines_added += str.count("\n")
81
+ self.extra_lines_added += str.count("\n") - 1
82
82
  begin
83
83
  string[charpos, 0] = str
84
84
  rescue IndexError
@@ -108,7 +108,7 @@ class RPStringScanner < StringScanner
108
108
  end
109
109
 
110
110
  module RubyParserStuff
111
- VERSION = '3.0.1' unless constants.include? "VERSION" # SIGH
111
+ VERSION = '3.0.2' unless constants.include? "VERSION" # SIGH
112
112
 
113
113
  attr_accessor :lexer, :in_def, :in_single, :file
114
114
  attr_reader :env, :comments
@@ -355,6 +355,8 @@ module RubyParserStuff
355
355
  end
356
356
  end
357
357
 
358
+ result.line(result.line - 1) if result.line and lexer.src.bol?
359
+
358
360
  raise "identifier #{id.inspect} is not valid" unless result
359
361
 
360
362
  result
@@ -517,7 +519,6 @@ module RubyParserStuff
517
519
 
518
520
  def new_call recv, meth, args = nil
519
521
  result = s(:call, recv, meth)
520
- result.line = recv.line if recv
521
522
 
522
523
  # TODO: need a test with f(&b) to produce block_pass
523
524
  # TODO: need a test with f(&b) { } to produce warning
@@ -529,6 +530,9 @@ module RubyParserStuff
529
530
  # HACK quick hack to make this work quickly... easy to clean up above
530
531
  result.concat args[1..-1]
531
532
 
533
+ line = result.grep(Sexp).map(&:line).compact.min
534
+ result.line = line if line
535
+
532
536
  result
533
537
  end
534
538
 
@@ -1046,7 +1050,7 @@ module RubyParserStuff
1046
1050
  end
1047
1051
 
1048
1052
  def yyerror msg
1049
- warn msg
1053
+ warn msg if $DEBUG
1050
1054
  super()
1051
1055
  end
1052
1056
 
@@ -1054,8 +1058,8 @@ module RubyParserStuff
1054
1058
  super
1055
1059
  rescue Racc::ParseError => e
1056
1060
  # I don't like how the exception obscures the error message
1057
- msg = "# ERROR: %s:%p :: %s" % [self.file, lexer.lineno, e.message.strip]
1058
- warn msg
1061
+ e.message.replace "%s:%p :: %s" % [self.file, lexer.lineno, e.message.strip]
1062
+ warn e.message if $DEBUG
1059
1063
  raise
1060
1064
  end
1061
1065
 
@@ -1286,9 +1290,9 @@ class RubyParser
1286
1290
  end
1287
1291
 
1288
1292
  def process(s, f = "(string)") # parens for emacs *sigh*
1289
- Ruby19Parser.new.process s, f
1293
+ @p19.process s, f
1290
1294
  rescue Racc::ParseError
1291
- Ruby18Parser.new.process s, f
1295
+ @p18.process s, f
1292
1296
  end
1293
1297
 
1294
1298
  alias :parse :process
@@ -12,6 +12,18 @@ $: << File.expand_path('~/Work/p4/zss/src/sexp_processor/dev/lib')
12
12
 
13
13
  require 'pt_testcase'
14
14
 
15
+ class Sexp
16
+ alias oldeq2 ==
17
+ def ==(obj) # :nodoc:
18
+ if obj.class == self.class then
19
+ super and
20
+ (self.line.nil? or obj.line.nil? or self.line == obj.line)
21
+ else
22
+ false
23
+ end
24
+ end
25
+ end
26
+
15
27
  class RubyParserTestCase < ParseTreeTestCase
16
28
  attr_accessor :result, :processor
17
29
 
@@ -41,21 +53,18 @@ class RubyParserTestCase < ParseTreeTestCase
41
53
  end
42
54
  end
43
55
 
44
- assert_equal emsg, e.message.strip # TODO: why strip?
56
+ assert_equal emsg, e.message
45
57
  end
46
58
 
47
59
  def assert_parse_error rb, emsg
48
60
  e = nil
49
- out, err = capture_io do
61
+ assert_silent do
50
62
  e = assert_raises Racc::ParseError do
51
63
  processor.parse rb
52
64
  end
53
65
  end
54
66
 
55
- assert_equal "", out
56
- assert_match(/parse error on value/, err)
57
-
58
- assert_equal emsg, e.message.strip # TODO: why strip?
67
+ assert_equal emsg, e.message
59
68
  end
60
69
 
61
70
  def assert_parse_line rb, pt, line
@@ -545,21 +554,8 @@ module TestRubyParserShared
545
554
  end
546
555
 
547
556
  STARTING_LINE = {
548
- "case_nested_inner_no_expr" => 2,
549
- "case_no_expr" => 2,
550
- "case_splat" => 2,
551
- "dstr_heredoc_expand" => 1,
552
- "dstr_heredoc_windoze_sucks" => 1,
553
- "dstr_heredoc_yet_again" => 1,
554
- "str_heredoc" => 1,
555
- "str_heredoc_call" => 1,
556
- "str_heredoc_empty" => 1,
557
- "str_heredoc_indent" => 1,
557
+ "case_no_expr" => 2, # TODO this should be 1
558
558
  "structure_unused_literal_wwtt" => 3, # yes, 3... odd test
559
- "undef_block_1" => 2,
560
- "undef_block_2" => 2,
561
- "undef_block_3" => 2,
562
- "undef_block_wtf" => 2,
563
559
  }
564
560
 
565
561
  def after_process_hook klass, node, data, input_name, output_name
@@ -663,9 +659,12 @@ module TestRubyParserShared
663
659
  puts string
664
660
  CODE
665
661
 
666
- result = processor.parse rb
667
- assert_equal 1, result.lasgn.line
668
- assert_equal 4, result.call.line
662
+ pt = s(:block,
663
+ s(:lasgn, :string,
664
+ s(:str, " very long string\n").line(1)).line(1),
665
+ s(:call, nil, :puts, s(:lvar, :string).line(4)).line(4)).line(1)
666
+
667
+ assert_parse rb, pt
669
668
  end
670
669
 
671
670
  def test_parse_line_newlines
@@ -879,6 +878,68 @@ module TestRubyParserShared
879
878
 
880
879
  assert_parse rb, pt
881
880
  end
881
+
882
+ def test_i_fucking_hate_line_numbers
883
+ rb = <<-EOM.gsub(/^ {6}/, '')
884
+ def a
885
+ p 1
886
+ a.b 2
887
+ c.d 3, 4
888
+ e.f 5
889
+ g.h 6, 7
890
+ p(1)
891
+ a.b(2)
892
+ c.d(3, 4)
893
+ e.f(5)
894
+ g.h(6, 7)
895
+ end
896
+ EOM
897
+
898
+ pt = s(:defn, :a, s(:args).line(2),
899
+ s(:call, nil, :p, s(:lit, 1).line(2)).line(2),
900
+ s(:call, s(:call, nil, :a).line(3), :b,
901
+ s(:lit, 2).line(3)).line(3),
902
+ s(:call, s(:call, nil, :c).line(4), :d,
903
+ s(:lit, 3).line(4), s(:lit, 4).line(4)).line(4),
904
+ s(:call, s(:call, nil, :e).line(5), :f,
905
+ s(:lit, 5).line(5)).line(5),
906
+ s(:call, s(:call, nil, :g).line(6), :h,
907
+ s(:lit, 6).line(6), s(:lit, 7).line(6)).line(6),
908
+ s(:call, nil, :p, s(:lit, 1).line(7)).line(7),
909
+ s(:call, s(:call, nil, :a).line(8), :b,
910
+ s(:lit, 2).line(8)).line(8),
911
+ s(:call, s(:call, nil, :c).line(9), :d,
912
+ s(:lit, 3).line(9), s(:lit, 4).line(9)).line(9),
913
+ s(:call, s(:call, nil, :e).line(10), :f,
914
+ s(:lit, 5).line(10)).line(10),
915
+ s(:call, s(:call, nil, :g).line(11), :h,
916
+ s(:lit, 6).line(11), s(:lit, 7).line(11)).line(11)
917
+ ).line(1)
918
+
919
+ assert_parse rb, pt
920
+ end
921
+
922
+ def test_i_fucking_hate_line_numbers2
923
+ rb = <<-EOM.gsub(/^ {6}/, '')
924
+ def a
925
+ p('a')
926
+ b = 1
927
+ p b
928
+ c =1
929
+ end
930
+ a
931
+ EOM
932
+
933
+ pt = s(:block,
934
+ s(:defn, :a, s(:args).line(2),
935
+ s(:call, nil, :p, s(:str, "a").line(2)).line(2),
936
+ s(:lasgn, :b, s(:lit, 1).line(3)).line(3),
937
+ s(:call, nil, :p, s(:lvar, :b).line(4)).line(4),
938
+ s(:lasgn, :c, s(:lit, 1).line(5)).line(5)).line(1),
939
+ s(:call, nil, :a).line(7)).line(1)
940
+
941
+ assert_parse rb, pt
942
+ end
882
943
  end
883
944
 
884
945
  class TestRubyParser < MiniTest::Unit::TestCase
@@ -889,13 +950,10 @@ class TestRubyParser < MiniTest::Unit::TestCase
889
950
  rb = "while false : 42 end"
890
951
  pt = s(:while, s(:false), s(:lit, 42), true)
891
952
 
892
- out, err = capture_io do
953
+ assert_silent do
893
954
  assert_equal pt, processor.parse(rb)
894
955
  end
895
956
 
896
- assert_empty out
897
- assert_match(/parse error on value .:/, err)
898
-
899
957
  # 1.9 only syntax
900
958
  rb = "a.()"
901
959
  pt = s(:call, s(:call, nil, :a), :call)
@@ -909,7 +967,7 @@ class TestRubyParser < MiniTest::Unit::TestCase
909
967
  end
910
968
  end
911
969
 
912
- msg = "parse error on value \"(\" (tLPAREN2)"
970
+ msg = "(string):1 :: parse error on value \"(\" (tLPAREN2)"
913
971
  assert_equal msg, e.message.strip
914
972
  end
915
973
  end
@@ -1186,13 +1244,13 @@ class TestRuby19Parser < RubyParserTestCase
1186
1244
  def test_do_colon_19
1187
1245
  rb = "while false : 42 end"
1188
1246
 
1189
- assert_parse_error rb, "parse error on value \":\" (tCOLON)"
1247
+ assert_parse_error rb, "(string):1 :: parse error on value \":\" (tCOLON)"
1190
1248
  end
1191
1249
 
1192
1250
  def test_assoc_list_19
1193
1251
  rb = "{1, 2, 3, 4}"
1194
1252
 
1195
- assert_parse_error rb, "parse error on value \",\" (tCOMMA)"
1253
+ assert_parse_error rb, "(string):1 :: parse error on value \",\" (tCOMMA)"
1196
1254
  end
1197
1255
 
1198
1256
  def test_case_then_colon_19
@@ -1203,19 +1261,19 @@ class TestRuby19Parser < RubyParserTestCase
1203
1261
  end
1204
1262
  EOM
1205
1263
 
1206
- assert_parse_error rb, "parse error on value \":\" (tCOLON)"
1264
+ assert_parse_error rb, "(string):2 :: parse error on value \":\" (tCOLON)"
1207
1265
  end
1208
1266
 
1209
1267
  def test_parse_def_xxx1
1210
1268
  rb = 'def f(a, *b, c = nil) end'
1211
1269
 
1212
- assert_parse_error rb, 'parse error on value "=" (tEQL)'
1270
+ assert_parse_error rb, '(string):1 :: parse error on value "=" (tEQL)'
1213
1271
  end
1214
1272
 
1215
1273
  def test_parse_def_xxx2
1216
1274
  rb = 'def f(a = nil, *b, c = nil) end'
1217
1275
 
1218
- assert_parse_error rb, 'parse error on value "=" (tEQL)'
1276
+ assert_parse_error rb, '(string):1 :: parse error on value "=" (tEQL)'
1219
1277
  end
1220
1278
 
1221
1279
  def test_parse_until_not_canonical
@@ -1411,7 +1469,7 @@ class TestRuby19Parser < RubyParserTestCase
1411
1469
  def test_motherfuckin_leading_dots2
1412
1470
  rb = "a\n..b"
1413
1471
 
1414
- assert_parse_error rb, 'parse error on value ".." (tDOT2)'
1472
+ assert_parse_error rb, '(string):2 :: parse error on value ".." (tDOT2)'
1415
1473
  end
1416
1474
 
1417
1475
  def test_kill_me
@@ -1656,4 +1714,24 @@ class TestRuby19Parser < RubyParserTestCase
1656
1714
 
1657
1715
  assert_parse rb, pt
1658
1716
  end
1717
+
1718
+ def test_lambda_do_vs_brace
1719
+ pt = s(:call, nil, :f, s(:iter, s(:call, nil, :lambda), 0))
1720
+
1721
+ rb = "f ->() {}"
1722
+ assert_parse rb, pt
1723
+
1724
+ rb = "f ->() do end"
1725
+ assert_parse rb, pt
1726
+ end
1727
+
1728
+ def test_thingy
1729
+ pt = s(:call, s(:call, nil, :f), :call, s(:lit, 42))
1730
+
1731
+ rb = "f.(42)"
1732
+ assert_parse rb, pt
1733
+
1734
+ rb = "f::(42)"
1735
+ assert_parse rb, pt
1736
+ end
1659
1737
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_parser
3
3
  version: !ruby/object:Gem::Version
4
- hash: 5
4
+ hash: 3
5
5
  prerelease:
6
6
  segments:
7
7
  - 3
8
8
  - 0
9
- - 1
10
- version: 3.0.1
9
+ - 2
10
+ version: 3.0.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ryan Davis
@@ -36,7 +36,7 @@ cert_chain:
36
36
  FBHgymkyj/AOSqKRIpXPhjC6
37
37
  -----END CERTIFICATE-----
38
38
 
39
- date: 2012-11-03 00:00:00 Z
39
+ date: 2012-11-21 00:00:00 Z
40
40
  dependencies:
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: sexp_processor
@@ -61,11 +61,11 @@ dependencies:
61
61
  requirements:
62
62
  - - ~>
63
63
  - !ruby/object:Gem::Version
64
- hash: 25
64
+ hash: 31
65
65
  segments:
66
66
  - 4
67
- - 1
68
- version: "4.1"
67
+ - 2
68
+ version: "4.2"
69
69
  type: :development
70
70
  version_requirements: *id002
71
71
  - !ruby/object:Gem::Dependency
@@ -107,11 +107,11 @@ dependencies:
107
107
  requirements:
108
108
  - - ~>
109
109
  - !ruby/object:Gem::Version
110
- hash: 5
110
+ hash: 1
111
111
  segments:
112
112
  - 3
113
- - 1
114
- version: "3.1"
113
+ - 3
114
+ version: "3.3"
115
115
  type: :development
116
116
  version_requirements: *id005
117
117
  description: |-
metadata.gz.sig CHANGED
Binary file