treetop 1.6.5 → 1.6.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/treetop/compiler/metagrammar.rb +32 -3
- data/lib/treetop/compiler/metagrammar.treetop +32 -3
- data/lib/treetop/compiler/node_classes/anything_symbol.rb +7 -3
- data/lib/treetop/compiler/node_classes/atomic_expression.rb +2 -2
- data/lib/treetop/compiler/node_classes/character_class.rb +5 -1
- data/lib/treetop/compiler/node_classes/choice.rb +3 -3
- data/lib/treetop/compiler/node_classes/nonterminal.rb +4 -0
- data/lib/treetop/compiler/node_classes/parenthesized_expression.rb +1 -1
- data/lib/treetop/compiler/node_classes/parsing_expression.rb +7 -8
- data/lib/treetop/compiler/node_classes/parsing_rule.rb +1 -1
- data/lib/treetop/compiler/node_classes/predicate.rb +6 -6
- data/lib/treetop/compiler/node_classes/predicate_block.rb +1 -1
- data/lib/treetop/compiler/node_classes/repetition.rb +14 -14
- data/lib/treetop/compiler/node_classes/sequence.rb +1 -1
- data/lib/treetop/compiler/node_classes/terminal.rb +32 -28
- data/lib/treetop/runtime/compiled_parser.rb +12 -12
- data/lib/treetop/runtime/syntax_node.rb +15 -15
- data/lib/treetop/runtime/terminal_parse_failure.rb +2 -2
- data/lib/treetop/runtime/terminal_syntax_node.rb +4 -4
- data/lib/treetop/version.rb +1 -1
- data/spec/compiler/anything_symbol_spec.rb +2 -2
- data/spec/compiler/character_class_spec.rb +3 -3
- data/spec/compiler/grammar_spec.rb +2 -2
- data/spec/compiler/not_predicate_spec.rb +6 -6
- data/spec/compiler/occurrence_range_spec.rb +4 -4
- data/spec/compiler/parenthesized_expression_spec.rb +5 -5
- data/spec/compiler/semantic_predicate_spec.rb +7 -7
- data/spec/compiler/terminal_spec.rb +6 -6
- data/spec/compiler/terminal_symbol_spec.rb +2 -2
- data/spec/runtime/compiled_parser_spec.rb +7 -7
- data/spec/spec_helper.rb +6 -1
- data/treetop.gemspec +12 -21
- metadata +8 -17
- data/spec/runtime/interval_skip_list/delete_spec.rb +0 -147
- data/spec/runtime/interval_skip_list/expire_range_spec.rb +0 -349
- data/spec/runtime/interval_skip_list/insert_and_delete_node_spec.rb +0 -385
- data/spec/runtime/interval_skip_list/insert_spec.rb +0 -660
- data/spec/runtime/interval_skip_list/interval_skip_list_spec.graffle +0 -6175
- data/spec/runtime/interval_skip_list/interval_skip_list_spec.rb +0 -58
- data/spec/runtime/interval_skip_list/palindromic_fixture.rb +0 -35
- data/spec/runtime/interval_skip_list/palindromic_fixture_spec.rb +0 -163
- data/spec/runtime/interval_skip_list/spec_helper.rb +0 -91
@@ -17,12 +17,12 @@ module Treetop
|
|
17
17
|
@index = options[:index] if options[:index]
|
18
18
|
result = send("_nt_#{options[:root] || root}")
|
19
19
|
should_consume_all = options.include?(:consume_all_input) ? options[:consume_all_input] : consume_all_input?
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
20
|
+
if (should_consume_all && index != input.size)
|
21
|
+
if index > max_terminal_failure_index # Otherwise the failure is already explained
|
22
|
+
terminal_parse_failure('<END OF INPUT>', true)
|
23
|
+
end
|
24
|
+
return nil
|
25
|
+
end
|
26
26
|
return SyntaxNode.new(input, index...(index + 1)) if result == true
|
27
27
|
return result
|
28
28
|
end
|
@@ -99,14 +99,14 @@ module Treetop
|
|
99
99
|
end
|
100
100
|
|
101
101
|
def has_terminal?(terminal, mode, index)
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
102
|
+
case mode
|
103
|
+
when :regexp # A Regexp has been passed in, either a character class or a literel regex 'foo'r
|
104
|
+
(terminal =~ input[index..-1]) == 0 && $&.length
|
105
|
+
when false # The terminal is a string which must match exactly
|
106
106
|
input[index, terminal.size] == terminal && terminal.size
|
107
|
-
|
107
|
+
when :insens # The terminal is a downcased string which must match input downcased
|
108
108
|
input[index, terminal.size].downcase == terminal && terminal.size
|
109
|
-
|
109
|
+
when true # Only occurs with old compiled grammars, for character classes
|
110
110
|
rx = @regexps[terminal] ||= Regexp.new(terminal)
|
111
111
|
input.index(rx, index) == index && $&.length
|
112
112
|
end
|
@@ -8,8 +8,8 @@ module Treetop
|
|
8
8
|
@input = input
|
9
9
|
@interval = interval
|
10
10
|
if (@elements = elements)
|
11
|
-
|
12
|
-
|
11
|
+
@elements.each { |e| e.equal?(true) or e.parent = self }
|
12
|
+
end
|
13
13
|
end
|
14
14
|
|
15
15
|
def elements
|
@@ -20,7 +20,7 @@ module Treetop
|
|
20
20
|
if element == true
|
21
21
|
index = last_element ? last_element.interval.last : interval.first
|
22
22
|
element = SyntaxNode.new(input, index...(index + 1))
|
23
|
-
|
23
|
+
element.parent = self
|
24
24
|
end
|
25
25
|
last_element = element
|
26
26
|
end
|
@@ -76,21 +76,21 @@ module Treetop
|
|
76
76
|
end
|
77
77
|
|
78
78
|
def inspect_children(indent="")
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
79
|
+
return '' unless elements && elements.size > 0
|
80
|
+
":" +
|
81
|
+
elements.map do |e|
|
82
|
+
begin
|
83
|
+
"\n"+e.inspect(indent+" ")
|
84
|
+
rescue # Defend against inspect not taking a parameter
|
85
|
+
"\n"+indent+" "+e.inspect
|
86
|
+
end
|
87
|
+
end.
|
88
|
+
join("")
|
89
89
|
end
|
90
90
|
|
91
91
|
def inspect(indent="")
|
92
|
-
|
93
|
-
|
92
|
+
inspect_self(indent) +
|
93
|
+
inspect_children(indent)
|
94
94
|
end
|
95
95
|
|
96
96
|
@@dot_id_counter = 0
|
@@ -6,11 +6,11 @@ module Treetop
|
|
6
6
|
def initialize(index, expected_string, unexpected = false)
|
7
7
|
@index = index
|
8
8
|
@expected_string = expected_string
|
9
|
-
|
9
|
+
@unexpected = unexpected
|
10
10
|
end
|
11
11
|
|
12
12
|
def to_s
|
13
|
-
|
13
|
+
"String matching #{expected_string} #{@unexpected ? 'not ' : ''}expected."
|
14
14
|
end
|
15
15
|
end
|
16
16
|
end
|
@@ -7,10 +7,10 @@ module Treetop
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def inspect(indent="")
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
indent+
|
11
|
+
self.class.to_s.sub(/.*:/,'') +
|
12
|
+
" offset=#{interval.first}" +
|
13
|
+
" #{text_value.inspect}"
|
14
14
|
end
|
15
15
|
end
|
16
16
|
end
|
data/lib/treetop/version.rb
CHANGED
@@ -22,8 +22,8 @@ module CharacterClassSpec
|
|
22
22
|
|
23
23
|
it "does not match single characters outside of that range" do
|
24
24
|
parse('8') do |result|
|
25
|
-
|
26
|
-
|
25
|
+
result.should be_nil
|
26
|
+
parser.terminal_failures.size.should == 1
|
27
27
|
end
|
28
28
|
parse('a').should be_nil
|
29
29
|
end
|
@@ -212,7 +212,7 @@ module CharacterClassSpec
|
|
212
212
|
it "doesn't evaluate the insertion" do
|
213
213
|
x = true
|
214
214
|
lambda{
|
215
|
-
|
215
|
+
x = parse("y")
|
216
216
|
}.should_not raise_error
|
217
217
|
x.should be_nil
|
218
218
|
parse('#').should_not be_nil
|
@@ -32,8 +32,8 @@ module GrammarSpec
|
|
32
32
|
|
33
33
|
it "fails if it does not parse all input" do
|
34
34
|
parse('barbarbazbaz') do |result|
|
35
|
-
|
36
|
-
|
35
|
+
result.should be_nil
|
36
|
+
parser.terminal_failures.size.should == 1
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
@@ -6,8 +6,8 @@ module NotPredicateSpec
|
|
6
6
|
|
7
7
|
it "fails to parse input matching the terminal symbol" do
|
8
8
|
parse('foo') do |result|
|
9
|
-
|
10
|
-
|
9
|
+
result.should be_nil
|
10
|
+
parser.terminal_failures.size.should == 1
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
@@ -17,8 +17,8 @@ module NotPredicateSpec
|
|
17
17
|
|
18
18
|
it "fails to parse input matching the terminal symbol" do
|
19
19
|
parse('e') do |result|
|
20
|
-
|
21
|
-
|
20
|
+
result.should be_nil
|
21
|
+
parser.terminal_failures.size.should == 1
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
@@ -44,8 +44,8 @@ module NotPredicateSpec
|
|
44
44
|
|
45
45
|
it "fails to parse matching input" do
|
46
46
|
parse('abcc') do |result|
|
47
|
-
|
48
|
-
|
47
|
+
result.should be_nil
|
48
|
+
parser.terminal_failures.size.should == 1
|
49
49
|
end
|
50
50
|
end
|
51
51
|
end
|
@@ -55,7 +55,7 @@ module OccurrenceRangeSpec
|
|
55
55
|
parse("foofoofoo") do |result|
|
56
56
|
result.should be_nil
|
57
57
|
|
58
|
-
|
58
|
+
parser.terminal_failures.size.should == 1
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
@@ -64,7 +64,7 @@ module OccurrenceRangeSpec
|
|
64
64
|
result.should_not be_nil
|
65
65
|
result.elements.size.should == 2
|
66
66
|
|
67
|
-
|
67
|
+
parser.terminal_failures.size.should == 0
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
@@ -114,7 +114,7 @@ module OccurrenceRangeSpec
|
|
114
114
|
result.should respond_to(:a_method)
|
115
115
|
|
116
116
|
terminal_failures = parser.terminal_failures
|
117
|
-
|
117
|
+
terminal_failures.size.should == 0
|
118
118
|
end
|
119
119
|
end
|
120
120
|
|
@@ -123,7 +123,7 @@ module OccurrenceRangeSpec
|
|
123
123
|
result.should be_nil
|
124
124
|
|
125
125
|
terminal_failures = parser.terminal_failures
|
126
|
-
|
126
|
+
terminal_failures.size.should == 1
|
127
127
|
end
|
128
128
|
end
|
129
129
|
end
|
@@ -14,8 +14,8 @@ module ParenthesizedExpressionSpec
|
|
14
14
|
|
15
15
|
it "should behave as normal" do
|
16
16
|
parse('foo') do |result|
|
17
|
-
|
18
|
-
|
17
|
+
result.should be_nil
|
18
|
+
parser.terminal_failures.size.should == 1
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
@@ -24,9 +24,9 @@ module ParenthesizedExpressionSpec
|
|
24
24
|
testing_expression '("foo" { def inner; end } ) { def outer; end} '
|
25
25
|
it "should extend both code modules " do
|
26
26
|
parse('foo') do |result|
|
27
|
-
|
28
|
-
|
29
|
-
|
27
|
+
skip "Arbitrarily nested modules are not yet compiled"
|
28
|
+
result.should respond_to(:inner)
|
29
|
+
result.should respond_to(:outer)
|
30
30
|
end
|
31
31
|
end
|
32
32
|
end
|
@@ -17,7 +17,7 @@ module SemanticPredicateSpec
|
|
17
17
|
parse('foo', :consume_all_input => false) do |result|
|
18
18
|
result.should be_nil
|
19
19
|
terminal_failures = parser.terminal_failures
|
20
|
-
|
20
|
+
terminal_failures.size.should == 1
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
@@ -44,7 +44,7 @@ module SemanticPredicateSpec
|
|
44
44
|
result.should be_nil
|
45
45
|
$value.should == 'prior '
|
46
46
|
terminal_failures = parser.terminal_failures
|
47
|
-
|
47
|
+
terminal_failures.size.should == 1
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
@@ -69,7 +69,7 @@ module SemanticPredicateSpec
|
|
69
69
|
result.should be_nil
|
70
70
|
$value.should == 'prior '
|
71
71
|
terminal_failures = parser.terminal_failures
|
72
|
-
|
72
|
+
terminal_failures.size.should == 1
|
73
73
|
end
|
74
74
|
end
|
75
75
|
|
@@ -78,7 +78,7 @@ module SemanticPredicateSpec
|
|
78
78
|
parse('foo', :consume_all_input => false) do |result|
|
79
79
|
result.should be_nil
|
80
80
|
terminal_failures = parser.terminal_failures
|
81
|
-
|
81
|
+
# We should get "prior " failed, and also the predicate block
|
82
82
|
terminal_failures.size.should == 2
|
83
83
|
terminal_failures[0].index.should == 0
|
84
84
|
terminal_failures[0].expected_string.should == '"prior "'
|
@@ -105,7 +105,7 @@ module SemanticPredicateSpec
|
|
105
105
|
parse('foo', :consume_all_input => false) do |result|
|
106
106
|
result.should be_nil
|
107
107
|
terminal_failures = parser.terminal_failures
|
108
|
-
|
108
|
+
terminal_failures.size.should == 1
|
109
109
|
end
|
110
110
|
end
|
111
111
|
|
@@ -132,7 +132,7 @@ module SemanticPredicateSpec
|
|
132
132
|
result.should be_nil
|
133
133
|
$value.should == 'prior '
|
134
134
|
terminal_failures = parser.terminal_failures
|
135
|
-
|
135
|
+
terminal_failures.size.should == 1
|
136
136
|
end
|
137
137
|
end
|
138
138
|
|
@@ -157,7 +157,7 @@ module SemanticPredicateSpec
|
|
157
157
|
result.should be_nil
|
158
158
|
$value.should == 'prior '
|
159
159
|
terminal_failures = parser.terminal_failures
|
160
|
-
|
160
|
+
terminal_failures.size.should == 1
|
161
161
|
end
|
162
162
|
end
|
163
163
|
|
@@ -18,14 +18,14 @@ module TerminalSymbolSpec
|
|
18
18
|
it "fails to match the input string other than at the start" do
|
19
19
|
parse " Foo", :index => 0 do |result|
|
20
20
|
result.should be_nil
|
21
|
-
|
21
|
+
parser.terminal_failures.size.should == 1
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
it "fails to match the input string in the wrong case" do
|
26
26
|
parse "foo", :index => 0 do |result|
|
27
27
|
result.should be_nil
|
28
|
-
|
28
|
+
parser.terminal_failures.size.should == 1
|
29
29
|
end
|
30
30
|
end
|
31
31
|
end
|
@@ -78,8 +78,8 @@ module TerminalSymbolSpec
|
|
78
78
|
|
79
79
|
it "fails to parse nonmatching input at the index even if a match occurs later" do
|
80
80
|
parse(" foo", :index => 0) do |result|
|
81
|
-
|
82
|
-
|
81
|
+
result.should be_nil
|
82
|
+
parser.terminal_failures.size.should == 1
|
83
83
|
end
|
84
84
|
end
|
85
85
|
end
|
@@ -131,14 +131,14 @@ module TerminalSymbolSpec
|
|
131
131
|
it "fails to match the input string other than at the start" do
|
132
132
|
parse " Foo", :index => 0 do |result|
|
133
133
|
result.should be_nil
|
134
|
-
|
134
|
+
parser.terminal_failures.size.should == 1
|
135
135
|
end
|
136
136
|
end
|
137
137
|
|
138
138
|
it "fails to match the input string in the wrong case" do
|
139
139
|
parse "foo", :index => 0 do |result|
|
140
140
|
result.should be_nil
|
141
|
-
|
141
|
+
parser.terminal_failures.size.should == 1
|
142
142
|
end
|
143
143
|
end
|
144
144
|
end
|
@@ -32,8 +32,8 @@ module TerminalSymbolSpec
|
|
32
32
|
|
33
33
|
it "fails to parse nonmatching input at the index even if a match occurs later" do
|
34
34
|
parse(" foo", :index => 0) do |result|
|
35
|
-
|
36
|
-
|
35
|
+
result.should be_nil
|
36
|
+
parser.terminal_failures.size.should == 1
|
37
37
|
end
|
38
38
|
end
|
39
39
|
end
|
@@ -128,16 +128,16 @@ module CompiledParserSpec
|
|
128
128
|
grammar Alternates
|
129
129
|
rule main
|
130
130
|
aa &{|s| s[0].elements[0].parent.should == s[0] }
|
131
|
-
|
131
|
+
/ ab &{|s| s[0].elements[0].parent.should == s[0] }
|
132
132
|
end
|
133
133
|
|
134
|
-
|
135
|
-
|
136
|
-
|
134
|
+
rule aa
|
135
|
+
'a' 'a'
|
136
|
+
end
|
137
137
|
|
138
|
-
|
139
|
-
|
140
|
-
|
138
|
+
rule ab
|
139
|
+
'a' 'b'
|
140
|
+
end
|
141
141
|
end
|
142
142
|
}
|
143
143
|
|
data/spec/spec_helper.rb
CHANGED
@@ -8,6 +8,11 @@ $LOAD_PATH.unshift File.expand_path('../../lib')
|
|
8
8
|
require 'treetop'
|
9
9
|
include Treetop
|
10
10
|
|
11
|
+
# We're still using the old expect syntax:
|
12
|
+
RSpec.configure do |c|
|
13
|
+
c.expect_with(:rspec) { |c| c.syntax = :should }
|
14
|
+
end
|
15
|
+
|
11
16
|
module Treetop
|
12
17
|
module ExampleGroupInstanceMethods
|
13
18
|
module ClassMethods
|
@@ -26,7 +31,7 @@ module Treetop
|
|
26
31
|
end
|
27
32
|
|
28
33
|
def testing_grammar(grammar_under_test)
|
29
|
-
|
34
|
+
self.parser_text = grammar_under_test
|
30
35
|
grammar_node = parse_with_metagrammar(grammar_under_test.strip, :module_or_grammar)
|
31
36
|
self.parser_code = grammar_node.compile
|
32
37
|
class_eval(self.parser_code)
|
data/treetop.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: treetop 1.6.
|
5
|
+
# stub: treetop 1.6.6 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "treetop"
|
9
|
-
s.version = "1.6.
|
9
|
+
s.version = "1.6.6"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
s.authors = ["Nathan Sobo", "Clifford Heath"]
|
14
|
-
s.date = "2016-
|
14
|
+
s.date = "2016-07-20"
|
15
15
|
s.description = "A Parsing Expression Grammar (PEG) Parser generator DSL for Ruby"
|
16
16
|
s.email = "cliffordheath@gmail.com"
|
17
17
|
s.executables = ["tt"]
|
@@ -124,15 +124,6 @@ Gem::Specification.new do |s|
|
|
124
124
|
"spec/composition/subfolder/e_includes_c.treetop",
|
125
125
|
"spec/ruby_extensions/string_spec.rb",
|
126
126
|
"spec/runtime/compiled_parser_spec.rb",
|
127
|
-
"spec/runtime/interval_skip_list/delete_spec.rb",
|
128
|
-
"spec/runtime/interval_skip_list/expire_range_spec.rb",
|
129
|
-
"spec/runtime/interval_skip_list/insert_and_delete_node_spec.rb",
|
130
|
-
"spec/runtime/interval_skip_list/insert_spec.rb",
|
131
|
-
"spec/runtime/interval_skip_list/interval_skip_list_spec.graffle",
|
132
|
-
"spec/runtime/interval_skip_list/interval_skip_list_spec.rb",
|
133
|
-
"spec/runtime/interval_skip_list/palindromic_fixture.rb",
|
134
|
-
"spec/runtime/interval_skip_list/palindromic_fixture_spec.rb",
|
135
|
-
"spec/runtime/interval_skip_list/spec_helper.rb",
|
136
127
|
"spec/runtime/syntax_node_spec.rb",
|
137
128
|
"spec/spec_helper.rb",
|
138
129
|
"treetop.gemspec"
|
@@ -148,28 +139,28 @@ Gem::Specification.new do |s|
|
|
148
139
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
149
140
|
s.add_runtime_dependency(%q<polyglot>, ["~> 0.3"])
|
150
141
|
s.add_development_dependency(%q<jeweler>, ["~> 2.0"])
|
151
|
-
s.add_development_dependency(%q<activesupport>, ["~>
|
142
|
+
s.add_development_dependency(%q<activesupport>, ["~> 5"])
|
152
143
|
s.add_development_dependency(%q<i18n>, ["~> 0.6"])
|
153
144
|
s.add_development_dependency(%q<rr>, ["~> 1.0"])
|
154
|
-
s.add_development_dependency(%q<rspec>, ["~>
|
155
|
-
s.add_development_dependency(%q<rake>, ["~>
|
145
|
+
s.add_development_dependency(%q<rspec>, ["~> 3"])
|
146
|
+
s.add_development_dependency(%q<rake>, ["~> 11"])
|
156
147
|
else
|
157
148
|
s.add_dependency(%q<polyglot>, ["~> 0.3"])
|
158
149
|
s.add_dependency(%q<jeweler>, ["~> 2.0"])
|
159
|
-
s.add_dependency(%q<activesupport>, ["~>
|
150
|
+
s.add_dependency(%q<activesupport>, ["~> 5"])
|
160
151
|
s.add_dependency(%q<i18n>, ["~> 0.6"])
|
161
152
|
s.add_dependency(%q<rr>, ["~> 1.0"])
|
162
|
-
s.add_dependency(%q<rspec>, ["~>
|
163
|
-
s.add_dependency(%q<rake>, ["~>
|
153
|
+
s.add_dependency(%q<rspec>, ["~> 3"])
|
154
|
+
s.add_dependency(%q<rake>, ["~> 11"])
|
164
155
|
end
|
165
156
|
else
|
166
157
|
s.add_dependency(%q<polyglot>, ["~> 0.3"])
|
167
158
|
s.add_dependency(%q<jeweler>, ["~> 2.0"])
|
168
|
-
s.add_dependency(%q<activesupport>, ["~>
|
159
|
+
s.add_dependency(%q<activesupport>, ["~> 5"])
|
169
160
|
s.add_dependency(%q<i18n>, ["~> 0.6"])
|
170
161
|
s.add_dependency(%q<rr>, ["~> 1.0"])
|
171
|
-
s.add_dependency(%q<rspec>, ["~>
|
172
|
-
s.add_dependency(%q<rake>, ["~>
|
162
|
+
s.add_dependency(%q<rspec>, ["~> 3"])
|
163
|
+
s.add_dependency(%q<rake>, ["~> 11"])
|
173
164
|
end
|
174
165
|
end
|
175
166
|
|