cross-stub 0.1.3.1 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/HISTORY.txt +5 -0
- data/VERSION +1 -1
- data/cross-stub.gemspec +3 -3
- data/lib/cross-stub/pseudo_class.rb +10 -3
- data/rails_generators/cross_stub/cross_stub_generator.rb +1 -1
- data/spec/cross-stub/clearing_stubs_spec.rb +75 -69
- data/spec/cross-stub/creating_stubs_spec.rb +78 -72
- data/spec/cross-stub/stubbing_error_spec.rb +12 -0
- data/spec/helpers.rb +13 -2
- data/spec/spec_helper.rb +6 -2
- metadata +44 -21
data/HISTORY.txt
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.4
|
data/cross-stub.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{cross-stub}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.4"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["NgTzeYang"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-04-03}
|
13
13
|
s.description = %q{}
|
14
14
|
s.email = %q{ngty77@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -44,7 +44,7 @@ Gem::Specification.new do |s|
|
|
44
44
|
s.homepage = %q{http://github.com/ngty/cross-stub}
|
45
45
|
s.rdoc_options = ["--charset=UTF-8"]
|
46
46
|
s.require_paths = ["lib"]
|
47
|
-
s.rubygems_version = %q{1.3.
|
47
|
+
s.rubygems_version = %q{1.3.6}
|
48
48
|
s.summary = %q{Simple cross process stubbing}
|
49
49
|
s.test_files = [
|
50
50
|
"spec/helpers.rb",
|
@@ -10,10 +10,18 @@ module CrossStub
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def initialize(klass)
|
13
|
-
@klass =
|
13
|
+
@klass = get_class(klass)
|
14
14
|
@metaclass = (class << @klass ; self ; end)
|
15
15
|
end
|
16
16
|
|
17
|
+
def get_class(klass)
|
18
|
+
if klass.is_a?(String)
|
19
|
+
klass.split(/::/).inject(Object) { |const_train, const| const_train.const_get(const) }
|
20
|
+
else
|
21
|
+
klass
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
17
25
|
def id
|
18
26
|
@klass.to_s
|
19
27
|
end
|
@@ -24,8 +32,7 @@ module CrossStub
|
|
24
32
|
|
25
33
|
def replace_method(method, value_or_code)
|
26
34
|
status = backup_method(method)
|
27
|
-
@klass.instance_eval
|
28
|
-
"#{value_or_code}" =~ /^def / ? value_or_code :
|
35
|
+
@klass.instance_eval "#{value_or_code}" =~ /^def / ? value_or_code :
|
29
36
|
%\def #{method}; Marshal.load(%|#{Marshal.dump(value_or_code)}|) ; end\
|
30
37
|
status
|
31
38
|
end
|
@@ -4,7 +4,7 @@ class CrossStubGenerator < Rails::Generator::Base
|
|
4
4
|
record do |m|
|
5
5
|
m.file 'config/initializers/cross-stub.rb', 'config/initializers/cross-stub.rb'
|
6
6
|
m.file 'features/support/cross-stub.rb', 'features/support/cross-stub.rb'
|
7
|
-
m.gsub_file 'config/environments/cucumber.rb', /\z/, "config.gem 'cross-stub', :version => '>=0.1.
|
7
|
+
m.gsub_file 'config/environments/cucumber.rb', /\z/, "config.gem 'cross-stub', :version => '>=0.1.4'\n"
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
@@ -8,99 +8,105 @@ describe 'Clearing Stubs' do
|
|
8
8
|
|
9
9
|
behaves_like "has #{mode} process setup"
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
end
|
11
|
+
%w{AnyClass AnyClass::Inner AnyModule AnyModule::Inner}.each do |klass_or_module|
|
12
|
+
|
13
|
+
before do
|
14
|
+
@context = @get_context[klass_or_module]
|
15
|
+
end
|
17
16
|
|
18
|
-
|
19
|
-
|
20
|
-
|
17
|
+
it "should clear hash generated stub and return original value for #{klass_or_module} in #{mode} process" do
|
18
|
+
original_value = @context.say_world
|
19
|
+
@context.xstub(:say_world => 'i say world')
|
21
20
|
CrossStub.clear
|
22
|
-
@get_value[
|
21
|
+
@get_value["#{@context}.say_world"].should.equal original_value
|
23
22
|
end
|
24
|
-
end
|
25
23
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
24
|
+
it "should clear hash generated stub and raise NoMethodError for #{klass_or_module} in #{mode} process" do
|
25
|
+
should.raise(NoMethodError) do
|
26
|
+
@context.xstub(:say_hello => 'i say hello')
|
27
|
+
CrossStub.clear
|
28
|
+
@get_value["#{@context}.say_hello"]
|
29
|
+
end
|
30
|
+
end
|
32
31
|
|
33
|
-
|
34
|
-
|
35
|
-
|
32
|
+
it "should clear symbol generated stub and return original value for #{klass_or_module} in #{mode} process" do
|
33
|
+
original_value = @context.say_world
|
34
|
+
@context.xstub(:say_world)
|
36
35
|
CrossStub.clear
|
37
|
-
@get_value[
|
36
|
+
@get_value["#{@context}.say_world"].should.equal original_value
|
38
37
|
end
|
39
|
-
end
|
40
38
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
39
|
+
it "should clear symbol generated stub and raise NoMethodError for #{klass_or_module} in #{mode} process" do
|
40
|
+
should.raise(NoMethodError) do
|
41
|
+
@context.xstub(:say_hello)
|
42
|
+
CrossStub.clear
|
43
|
+
@get_value["#{@context}.say_hello"]
|
44
|
+
end
|
45
45
|
end
|
46
|
-
CrossStub.clear
|
47
|
-
@get_value['AnyClass.say_world'].should.equal original_value
|
48
|
-
end
|
49
46
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
def
|
47
|
+
it "should clear block generated stub and return original value for #{klass_or_module} in #{mode} process" do
|
48
|
+
original_value = @context.say_world
|
49
|
+
@context.xstub do
|
50
|
+
def say_world ; 'i say world' ; end
|
54
51
|
end
|
55
52
|
CrossStub.clear
|
56
|
-
@get_value[
|
53
|
+
@get_value["#{@context}.say_world"].should.equal original_value
|
57
54
|
end
|
58
|
-
end
|
59
55
|
|
60
|
-
|
61
|
-
|
56
|
+
it "should clear block generated stub and raise NoMethodError for #{klass_or_module} in #{mode} process" do
|
57
|
+
should.raise(NoMethodError) do
|
58
|
+
@context.xstub do
|
59
|
+
def say_hello ; 'i say hello' ; end
|
60
|
+
end
|
61
|
+
CrossStub.clear
|
62
|
+
@get_value["#{@context}.say_hello"]
|
63
|
+
end
|
64
|
+
end
|
62
65
|
|
63
|
-
#
|
64
|
-
|
65
|
-
@get_value['AnyClass.say_world']
|
66
|
+
it "should always clear previously generated stub for #{klass_or_module} in #{mode} process" do
|
67
|
+
original_value = @context.say_world
|
66
68
|
|
67
|
-
|
68
|
-
|
69
|
-
|
69
|
+
# Stub an existing method
|
70
|
+
@context.xstub(:say_world => 'i say world')
|
71
|
+
@get_value["#{@context}.say_world"]
|
70
72
|
|
71
|
-
|
72
|
-
|
73
|
-
|
73
|
+
# Clear stubs without refreshing another process
|
74
|
+
CrossStub.clear
|
75
|
+
CrossStub.setup(:file => $cache_file)
|
74
76
|
|
75
|
-
|
76
|
-
|
77
|
-
|
77
|
+
# Stub a non-existing method
|
78
|
+
@context.xstub(:say_hello => 'i say hello')
|
79
|
+
@get_value["#{@context}.say_hello"]
|
78
80
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
@get_value['AnyClass.say_hello']
|
81
|
+
# Make sure existing method returns to original method
|
82
|
+
@get_value["#{@context}.say_world"].should.equal original_value
|
83
|
+
end
|
83
84
|
|
84
|
-
|
85
|
-
|
86
|
-
|
85
|
+
it "should always clear previously generated stub and raise NoMethodError for #{klass_or_module} in #{mode} process" do
|
86
|
+
# Stub a non-existing method
|
87
|
+
@context.xstub(:say_hello => 'i say hello')
|
88
|
+
@get_value["#{@context}.say_hello"]
|
87
89
|
|
88
|
-
|
89
|
-
|
90
|
-
|
90
|
+
# Clear stubs without refreshing another process
|
91
|
+
CrossStub.clear
|
92
|
+
CrossStub.setup(:file => $cache_file)
|
91
93
|
|
92
|
-
|
93
|
-
|
94
|
-
|
94
|
+
# Stub an existing method
|
95
|
+
@context.xstub(:say_world => 'i say world')
|
96
|
+
@get_value["#{@context}.say_world"]
|
95
97
|
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
value = nil
|
100
|
-
should.not.raise(NoMethodError) { value = @get_value['Time.now'] }
|
101
|
-
value.should.not.equal 'abc'
|
102
|
-
end
|
98
|
+
# Make sure accessing non-existing method throws error
|
99
|
+
should.raise(NoMethodError) { @get_value["#{@context}.say_hello"] }
|
100
|
+
end
|
103
101
|
|
102
|
+
it "should clear for method not implemented in ruby and return original value for #{klass_or_module} in #{mode} process" do
|
103
|
+
Time.xstub(:now => 'abc')
|
104
|
+
CrossStub.clear
|
105
|
+
value = nil
|
106
|
+
should.not.raise(NoMethodError) { value = @get_value['Time.now'] }
|
107
|
+
value.should.not.equal 'abc'
|
108
|
+
end
|
109
|
+
end
|
104
110
|
end
|
105
111
|
|
106
112
|
end
|
@@ -8,97 +8,103 @@ describe 'Creating Stubs' do
|
|
8
8
|
|
9
9
|
behaves_like "has #{mode} process setup"
|
10
10
|
|
11
|
-
|
12
|
-
AnyClass.xstub(:say_hello => 'i say hello', :say_world => 'i say world')
|
13
|
-
@get_value['AnyClass.say_hello'].should.equal 'i say hello'
|
14
|
-
@get_value['AnyClass.say_world'].should.equal 'i say world'
|
15
|
-
end
|
11
|
+
%w{AnyClass AnyClass::Inner AnyModule AnyModule::Inner}.each do |klass_or_module|
|
16
12
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
end
|
13
|
+
before do
|
14
|
+
@context = @get_context[klass_or_module]
|
15
|
+
end
|
21
16
|
|
22
|
-
|
23
|
-
|
24
|
-
|
17
|
+
it "should create with hash argument(s) for #{klass_or_module} class in #{mode} process" do
|
18
|
+
@context.xstub(:say_hello => 'i say hello', :say_world => 'i say world')
|
19
|
+
@get_value["#{@context}.say_hello"].should.equal 'i say hello'
|
20
|
+
@get_value["#{@context}.say_world"].should.equal 'i say world'
|
25
21
|
end
|
26
|
-
@get_value['AnyClass.say_hello'].should.equal 'i say hello'
|
27
|
-
end
|
28
22
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
23
|
+
it "should create with symbol argument(s) for #{klass_or_module} class in #{mode} process" do
|
24
|
+
@context.xstub(:say_hello)
|
25
|
+
@get_value["#{@context}.say_hello"].should.equal nil
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should create with block with no argument for #{klass_or_module} class in #{mode} process" do
|
29
|
+
@context.xstub do
|
30
|
+
def say_hello ; 'i say hello' ; end
|
33
31
|
end
|
32
|
+
@get_value["#{@context}.say_hello"].should.equal 'i say hello'
|
34
33
|
end
|
35
|
-
@get_value['AnyClass.say_hello'].should.equal nil
|
36
|
-
@get_value['AnyClass.say_world'].should.equal 'i say world'
|
37
|
-
end
|
38
34
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
35
|
+
it "should create with symbol & block with no argument for #{klass_or_module} class in #{mode} process" do
|
36
|
+
@context.xstub(:say_hello) do
|
37
|
+
def say_world
|
38
|
+
'i say world'
|
39
|
+
end
|
43
40
|
end
|
41
|
+
@get_value["#{@context}.say_hello"].should.equal nil
|
42
|
+
@get_value["#{@context}.say_world"].should.equal 'i say world'
|
44
43
|
end
|
45
|
-
@get_value['AnyClass.say_hello'].should.equal 'i say hello'
|
46
|
-
@get_value['AnyClass.say_world'].should.equal 'i say world'
|
47
|
-
end
|
48
44
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
45
|
+
it "should create with hash & block with no argument for #{klass_or_module} class in #{mode} process" do
|
46
|
+
@context.xstub(:say_hello => 'i say hello') do
|
47
|
+
def say_world
|
48
|
+
'i say world'
|
49
|
+
end
|
50
|
+
end
|
51
|
+
@get_value["#{@context}.say_hello"].should.equal 'i say hello'
|
52
|
+
@get_value["#{@context}.say_world"].should.equal 'i say world'
|
54
53
|
end
|
55
54
|
|
56
|
-
|
57
|
-
|
55
|
+
it "should always create the most recent for #{klass_or_module} class in #{mode} process" do
|
56
|
+
found, expected = [], ['i say hello', 'i say something else', 'i say something else again']
|
57
|
+
stub_and_get_value = lambda do |value|
|
58
|
+
@context.xstub(:say_hello => value)
|
59
|
+
@get_value["#{@context}.say_hello"]
|
60
|
+
end
|
58
61
|
|
59
|
-
|
60
|
-
|
62
|
+
found << stub_and_get_value[expected[0]]
|
63
|
+
found << stub_and_get_value[expected[1]]
|
61
64
|
|
62
|
-
|
63
|
-
|
64
|
-
end
|
65
|
+
CrossStub.clear
|
66
|
+
CrossStub.setup(:file => $cache_file)
|
65
67
|
|
66
|
-
|
67
|
-
|
68
|
-
def do_action(who, action)
|
69
|
-
%\#{who} #{action} #{something}\
|
70
|
-
end
|
68
|
+
found << stub_and_get_value[expected[2]]
|
69
|
+
found.should.equal expected
|
71
70
|
end
|
72
|
-
@get_value['AnyClass.do_action.i.say'].should.equal 'i say hello'
|
73
|
-
end
|
74
71
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
72
|
+
it "should create stub with dependency on other stub for #{klass_or_module} class in #{mode} process" do
|
73
|
+
@context.xstub(:something => 'hello') do
|
74
|
+
def do_action(who, action)
|
75
|
+
%\#{who} #{action} #{something}\
|
76
|
+
end
|
77
|
+
end
|
78
|
+
@get_value["#{@context}.do_action.i.say"].should.equal 'i say hello'
|
79
|
+
end
|
80
80
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
# # end
|
87
|
-
# # end
|
88
|
-
# # AnyClass.say_hello.should.equal 'i say 3 hellos'
|
89
|
-
# end
|
90
|
-
#
|
91
|
-
# it "should create with hash & block that takes argument(s) for #{mode} process" do
|
92
|
-
# # a, b = 1, 2
|
93
|
-
# # AnyClass.xstub(:say_world => 'i say world') do |a, b|
|
94
|
-
# # def say_hello
|
95
|
-
# # "i say #{a+b} hellos"
|
96
|
-
# # end
|
97
|
-
# # end
|
98
|
-
# # AnyClass.say_hello.should.equal 'i say 3 hellos'
|
99
|
-
# # AnyClass.say_world.should.equal 'i say world'
|
100
|
-
# end
|
81
|
+
it "should create for method not implemented in ruby for #{klass_or_module} class in #{mode} process" do
|
82
|
+
now = Time.now - 365*60*60*24
|
83
|
+
Time.xstub(:now => now)
|
84
|
+
@get_value['Time.now'].should.equal now
|
85
|
+
end
|
101
86
|
|
87
|
+
# it "should create with block that takes argument(s) for #{mode} process" do
|
88
|
+
# # a, b = 1, 2
|
89
|
+
# # AnyClass.xstub do |a, b|
|
90
|
+
# # def say_hello
|
91
|
+
# # "i say #{a+b} hellos"
|
92
|
+
# # end
|
93
|
+
# # end
|
94
|
+
# # AnyClass.say_hello.should.equal 'i say 3 hellos'
|
95
|
+
# end
|
96
|
+
#
|
97
|
+
# it "should create with hash & block that takes argument(s) for #{mode} process" do
|
98
|
+
# # a, b = 1, 2
|
99
|
+
# # AnyClass.xstub(:say_world => 'i say world') do |a, b|
|
100
|
+
# # def say_hello
|
101
|
+
# # "i say #{a+b} hellos"
|
102
|
+
# # end
|
103
|
+
# # end
|
104
|
+
# # AnyClass.say_hello.should.equal 'i say 3 hellos'
|
105
|
+
# # AnyClass.say_world.should.equal 'i say world'
|
106
|
+
# end
|
107
|
+
end
|
102
108
|
end
|
103
109
|
|
104
110
|
end
|
@@ -16,6 +16,18 @@ describe 'Stubbing Error' do
|
|
16
16
|
}
|
17
17
|
end
|
18
18
|
|
19
|
+
it 'should not be raised when stubbing nested class' do
|
20
|
+
should.not.raise(CrossStub::Error) {
|
21
|
+
AnyClass::Inner.xstub(:say_hello => 'i say hello')
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should not be raised when stubbing nested module' do
|
26
|
+
should.not.raise(CrossStub::Error) {
|
27
|
+
AnyModule::Inner.xstub(:say_hello => 'i say hello')
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
19
31
|
it 'should be raised when stubbing instance' do
|
20
32
|
should.raise(CrossStub::CannotStubInstanceError) do
|
21
33
|
o = AnyClass.new
|
data/spec/helpers.rb
CHANGED
@@ -12,12 +12,22 @@ class AnyClass
|
|
12
12
|
def self.say_world
|
13
13
|
'u say world'
|
14
14
|
end
|
15
|
+
class Inner
|
16
|
+
def self.say_world
|
17
|
+
'u say world'
|
18
|
+
end
|
19
|
+
end
|
15
20
|
end
|
16
21
|
|
17
22
|
module AnyModule
|
18
23
|
def self.say_world
|
19
24
|
'u say world'
|
20
25
|
end
|
26
|
+
module Inner
|
27
|
+
def self.say_world
|
28
|
+
'u say world'
|
29
|
+
end
|
30
|
+
end
|
21
31
|
end
|
22
32
|
|
23
33
|
module EchoClient
|
@@ -85,12 +95,13 @@ module EchoServer
|
|
85
95
|
CrossStub.refresh(:file => $cache_file)
|
86
96
|
log "(2) EchoServer::EM#receive_data ... completes stubs refresh"
|
87
97
|
klass, method, *args = klass_and_method.split('.')
|
98
|
+
konst = klass.split(/::/).inject(Object) { |const_train, const| const_train.const_get(const) }
|
88
99
|
log "(3) EchoServer::EM#receive_data ... parses arguments to:",
|
89
100
|
" * klass ... #{klass}",
|
90
101
|
" * method ... #{method}",
|
91
102
|
" * args ... #{args.inspect}"
|
92
|
-
value = args.empty? ?
|
93
|
-
|
103
|
+
value = args.empty? ? konst.send(method) :
|
104
|
+
konst.send(method, *args) rescue $!.message
|
94
105
|
log "(4) EchoServer::EM#receive_data ... returns: #{value.inspect}"
|
95
106
|
send_data(Marshal.dump(value))
|
96
107
|
log "(5) EchoServer::EM#receive_data ... end"
|
data/spec/spec_helper.rb
CHANGED
@@ -10,6 +10,9 @@ Bacon.summary_on_exit
|
|
10
10
|
shared 'has standard setup' do
|
11
11
|
before do
|
12
12
|
CrossStub.setup(:file => $cache_file)
|
13
|
+
@get_context = lambda do |klass_or_module|
|
14
|
+
klass_or_module.split(/::/).inject(Object) { |context, name| context.const_get(name) }
|
15
|
+
end
|
13
16
|
end
|
14
17
|
after do
|
15
18
|
CrossStub.clear
|
@@ -20,8 +23,9 @@ shared 'has current process setup' do
|
|
20
23
|
before do
|
21
24
|
@get_value = lambda do |klass_and_method_and_args|
|
22
25
|
klass, method, *args = klass_and_method_and_args.split('.')
|
23
|
-
|
24
|
-
|
26
|
+
konst = klass.split(/::/).inject(Object) { |const_train, const| const_train.const_get(const) }
|
27
|
+
args.empty? ? konst.send(method) :
|
28
|
+
konst.send(method, *args)
|
25
29
|
end
|
26
30
|
end
|
27
31
|
end
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cross-stub
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
- 4
|
9
|
+
version: 0.1.4
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- NgTzeYang
|
@@ -9,49 +14,65 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date: 2010-
|
17
|
+
date: 2010-04-03 00:00:00 +08:00
|
13
18
|
default_executable:
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: bacon
|
17
|
-
|
18
|
-
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
24
|
requirements:
|
21
25
|
- - ">="
|
22
26
|
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
- 0
|
30
|
+
- 0
|
23
31
|
version: 0.0.0
|
24
|
-
|
32
|
+
type: :development
|
33
|
+
version_requirements: *id001
|
25
34
|
- !ruby/object:Gem::Dependency
|
26
35
|
name: eventmachine
|
27
|
-
|
28
|
-
|
29
|
-
version_requirements: !ruby/object:Gem::Requirement
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
30
38
|
requirements:
|
31
39
|
- - ">="
|
32
40
|
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 0
|
43
|
+
- 0
|
44
|
+
- 0
|
33
45
|
version: 0.0.0
|
34
|
-
|
46
|
+
type: :development
|
47
|
+
version_requirements: *id002
|
35
48
|
- !ruby/object:Gem::Dependency
|
36
49
|
name: ParseTree
|
37
|
-
|
38
|
-
|
39
|
-
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
40
52
|
requirements:
|
41
53
|
- - "="
|
42
54
|
- !ruby/object:Gem::Version
|
55
|
+
segments:
|
56
|
+
- 3
|
57
|
+
- 0
|
58
|
+
- 4
|
43
59
|
version: 3.0.4
|
44
|
-
|
60
|
+
type: :runtime
|
61
|
+
version_requirements: *id003
|
45
62
|
- !ruby/object:Gem::Dependency
|
46
63
|
name: ruby2ruby
|
47
|
-
|
48
|
-
|
49
|
-
version_requirements: !ruby/object:Gem::Requirement
|
64
|
+
prerelease: false
|
65
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
50
66
|
requirements:
|
51
67
|
- - "="
|
52
68
|
- !ruby/object:Gem::Version
|
69
|
+
segments:
|
70
|
+
- 1
|
71
|
+
- 2
|
72
|
+
- 4
|
53
73
|
version: 1.2.4
|
54
|
-
|
74
|
+
type: :runtime
|
75
|
+
version_requirements: *id004
|
55
76
|
description: ""
|
56
77
|
email: ngty77@gmail.com
|
57
78
|
executables: []
|
@@ -98,18 +119,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
98
119
|
requirements:
|
99
120
|
- - ">="
|
100
121
|
- !ruby/object:Gem::Version
|
122
|
+
segments:
|
123
|
+
- 0
|
101
124
|
version: "0"
|
102
|
-
version:
|
103
125
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
126
|
requirements:
|
105
127
|
- - ">="
|
106
128
|
- !ruby/object:Gem::Version
|
129
|
+
segments:
|
130
|
+
- 0
|
107
131
|
version: "0"
|
108
|
-
version:
|
109
132
|
requirements: []
|
110
133
|
|
111
134
|
rubyforge_project:
|
112
|
-
rubygems_version: 1.3.
|
135
|
+
rubygems_version: 1.3.6
|
113
136
|
signing_key:
|
114
137
|
specification_version: 3
|
115
138
|
summary: Simple cross process stubbing
|