cross-stub 0.1.3.1 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
data/HISTORY.txt CHANGED
@@ -1,3 +1,8 @@
1
+ === 0.1.4 2010-04-03
2
+
3
+ = Bugfixes
4
+ * fixed taken-for-granted-yet-broken support for nested class & module [#liangzan]
5
+
1
6
  === 0.1.3.1 2010-02-04
2
7
 
3
8
  * no bug fix nor new function added, somehow the previously gem release failed to
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.3.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.3.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-02-04}
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.5}
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 = klass.is_a?(String) ? Object.const_get(klass) : 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.3.1'\n"
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
- it "should clear hash generated stub and return original value for #{mode} process" do
12
- original_value = AnyClass.say_world
13
- AnyClass.xstub(:say_world => 'i say world')
14
- CrossStub.clear
15
- @get_value['AnyClass.say_world'].should.equal original_value
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
- it "should clear hash generated stub and raise NoMethodError for #{mode} process" do
19
- should.raise(NoMethodError) do
20
- AnyClass.xstub(:say_hello => 'i say hello')
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['AnyClass.say_hello']
21
+ @get_value["#{@context}.say_world"].should.equal original_value
23
22
  end
24
- end
25
23
 
26
- it "should clear symbol generated stub and return original value for #{mode} process" do
27
- original_value = AnyClass.say_world
28
- AnyClass.xstub(:say_world)
29
- CrossStub.clear
30
- @get_value['AnyClass.say_world'].should.equal original_value
31
- end
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
- it "should clear symbol generated stub and raise NoMethodError for #{mode} process" do
34
- should.raise(NoMethodError) do
35
- AnyClass.xstub(:say_hello)
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['AnyClass.say_hello']
36
+ @get_value["#{@context}.say_world"].should.equal original_value
38
37
  end
39
- end
40
38
 
41
- it "should clear block generated stub and return original value for #{mode} process" do
42
- original_value = AnyClass.say_world
43
- AnyClass.xstub do
44
- def say_world ; 'i say world' ; end
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
- it "should clear block generated stub and raise NoMethodError for #{mode} process" do
51
- should.raise(NoMethodError) do
52
- AnyClass.xstub do
53
- def say_hello ; 'i say hello' ; end
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['AnyClass.say_hello']
53
+ @get_value["#{@context}.say_world"].should.equal original_value
57
54
  end
58
- end
59
55
 
60
- it "should always clear previously generated stub for #{mode} process" do
61
- original_value = AnyClass.say_world
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
- # Stub an existing method
64
- AnyClass.xstub(:say_world => 'i say world')
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
- # Clear stubs without refreshing another process
68
- CrossStub.clear
69
- CrossStub.setup(:file => $cache_file)
69
+ # Stub an existing method
70
+ @context.xstub(:say_world => 'i say world')
71
+ @get_value["#{@context}.say_world"]
70
72
 
71
- # Stub a non-existing method
72
- AnyClass.xstub(:say_hello => 'i say hello')
73
- @get_value['AnyClass.say_hello']
73
+ # Clear stubs without refreshing another process
74
+ CrossStub.clear
75
+ CrossStub.setup(:file => $cache_file)
74
76
 
75
- # Make sure existing method returns to original method
76
- @get_value['AnyClass.say_world'].should.equal original_value
77
- end
77
+ # Stub a non-existing method
78
+ @context.xstub(:say_hello => 'i say hello')
79
+ @get_value["#{@context}.say_hello"]
78
80
 
79
- it "should always clear previously generated stub and raise NoMethodError for #{mode} process" do
80
- # Stub a non-existing method
81
- AnyClass.xstub(:say_hello => 'i say hello')
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
- # Clear stubs without refreshing another process
85
- CrossStub.clear
86
- CrossStub.setup(:file => $cache_file)
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
- # Stub an existing method
89
- AnyClass.xstub(:say_world => 'i say world')
90
- @get_value['AnyClass.say_world']
90
+ # Clear stubs without refreshing another process
91
+ CrossStub.clear
92
+ CrossStub.setup(:file => $cache_file)
91
93
 
92
- # Make sure accessing non-existing method throws error
93
- should.raise(NoMethodError) { @get_value['AnyClass.say_hello'] }
94
- end
94
+ # Stub an existing method
95
+ @context.xstub(:say_world => 'i say world')
96
+ @get_value["#{@context}.say_world"]
95
97
 
96
- it "should clear for method not implemented in ruby and return original value for #{mode} process" do
97
- Time.xstub(:now => 'abc')
98
- CrossStub.clear
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
- it "should create with hash argument(s) for #{mode} process" do
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
- it "should create with symbol argument(s) for #{mode} process" do
18
- AnyClass.xstub(:say_hello)
19
- @get_value['AnyClass.say_hello'].should.equal nil
20
- end
13
+ before do
14
+ @context = @get_context[klass_or_module]
15
+ end
21
16
 
22
- it "should create with block with no argument for #{mode} process" do
23
- AnyClass.xstub do
24
- def say_hello ; 'i say hello' ; end
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
- it "should create with symbol & block with no argument for #{mode} process" do
30
- AnyClass.xstub(:say_hello) do
31
- def say_world
32
- 'i say world'
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
- it "should create with hash & block with no argument for #{mode} process" do
40
- AnyClass.xstub(:say_hello => 'i say hello') do
41
- def say_world
42
- 'i say world'
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
- it "should always create the most recent for #{mode} process" do
50
- found, expected = [], ['i say hello', 'i say something else', 'i say something else again']
51
- stub_and_get_value = lambda do |value|
52
- AnyClass.xstub(:say_hello => value)
53
- @get_value['AnyClass.say_hello']
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
- found << stub_and_get_value[expected[0]]
57
- found << stub_and_get_value[expected[1]]
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
- CrossStub.clear
60
- CrossStub.setup(:file => $cache_file)
62
+ found << stub_and_get_value[expected[0]]
63
+ found << stub_and_get_value[expected[1]]
61
64
 
62
- found << stub_and_get_value[expected[2]]
63
- found.should.equal expected
64
- end
65
+ CrossStub.clear
66
+ CrossStub.setup(:file => $cache_file)
65
67
 
66
- it "should create stub with dependency on other stub for #{mode} process" do
67
- AnyClass.xstub(:something => 'hello') do
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
- it "should create for method not implemented in ruby for #{mode} process" do
76
- now = Time.now - 365*60*60*24
77
- Time.xstub(:now => now)
78
- @get_value['Time.now'].should.equal now
79
- end
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
- # it "should create with block that takes argument(s) for #{mode} process" do
82
- # # a, b = 1, 2
83
- # # AnyClass.xstub do |a, b|
84
- # # def say_hello
85
- # # "i say #{a+b} hellos"
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? ? Object.const_get(klass).send(method) :
93
- Object.const_get(klass).send(method, *args) rescue $!.message
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
- args.empty? ? Object.const_get(klass).send(method) :
24
- Object.const_get(klass).send(method, *args)
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
- version: 0.1.3.1
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-02-04 00:00:00 +08:00
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
- type: :development
18
- version_requirement:
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
- version:
32
+ type: :development
33
+ version_requirements: *id001
25
34
  - !ruby/object:Gem::Dependency
26
35
  name: eventmachine
27
- type: :development
28
- version_requirement:
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
- version:
46
+ type: :development
47
+ version_requirements: *id002
35
48
  - !ruby/object:Gem::Dependency
36
49
  name: ParseTree
37
- type: :runtime
38
- version_requirement:
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
- version:
60
+ type: :runtime
61
+ version_requirements: *id003
45
62
  - !ruby/object:Gem::Dependency
46
63
  name: ruby2ruby
47
- type: :runtime
48
- version_requirement:
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
- version:
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.5
135
+ rubygems_version: 1.3.6
113
136
  signing_key:
114
137
  specification_version: 3
115
138
  summary: Simple cross process stubbing