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 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