spy 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0b0de47cae4d5ee5cf4709bc537489dc137007b5
4
+ data.tar.gz: 4e6cff2b7b27e27c787ad93d5fb1af723f382739
5
+ SHA512:
6
+ metadata.gz: fed5be1346e1c658363827797fd9a20b1241f33724c4af92b8f1616887967a3ff44ea51409ec027a8187b9b95db606cd361972cbed323c7bb4ebdbf5c734d8d1
7
+ data.tar.gz: 65ce3667c4665ef8a396d0e6ab3248d88d57eaedff2b6393865d661813b4253c63e213990fa0f3e8684c5e7b882e92db44dd74c1e2cd1a7483611d1239e968a7
data/.gitignore CHANGED
@@ -1,6 +1,7 @@
1
1
  *.gem
2
2
  *.rbc
3
3
  *.sw*
4
+ *.rbx
4
5
  .bundle
5
6
  .config
6
7
  .yardoc
data/README.md CHANGED
@@ -101,7 +101,7 @@ when the method is not stubbed. Spy will not let you stub a method that wasn't
101
101
  on the mocked class. You can spy on the classes and call through to the original method.
102
102
 
103
103
  ```ruby
104
- book = Spy.mock(Book)
104
+ book = Spy.mock(Book) # Must be a class
105
105
  Spy.on(book, first_name: "Neil", last_name: "Gaiman")
106
106
  Spy.on(book, :author).and_call_through
107
107
  book.author #=> "Neil Gaiman"
@@ -113,7 +113,7 @@ book.title #=> Spy::NeverHookedError: 'title' was never hooked on mock spy.
113
113
  To stub methods during instantiation just add arguments.
114
114
 
115
115
  ```ruby
116
- book = Spy.mock(book, :first_name, author: "Neil Gaiman")
116
+ book = Spy.mock(Book, :first_name, author: "Neil Gaiman")
117
117
  ```
118
118
 
119
119
  ### Arbitrary Handling
@@ -139,7 +139,7 @@ end
139
139
  When you stub a method it returns a spy. A spy records what calls have been made to a given method.
140
140
 
141
141
  ```ruby
142
- validator = Spy.double("validator")
142
+ validator = Spy.mock(Validator)
143
143
  validate_spy = Spy.on(validator, :validate)
144
144
  validate_spy.has_been_called? #=> false
145
145
 
@@ -181,26 +181,30 @@ first_call.result #=> "hello world"
181
181
  first_call.called_from #=> "file_name.rb:line_number"
182
182
  ```
183
183
 
184
- ### MiniTest
184
+ ## Test Framework Integration
185
185
 
186
- In `test_helper.rb`
186
+ ### MiniTest/TestUnit
187
+
188
+ in your `test_helper.rb` add this line after you include your framework
187
189
 
188
190
  ```ruby
189
- require "spy"
190
- MiniTest::TestCase.add_teardown_hook { Spy.teardown }
191
+ require 'spy/integration'
192
+ ```
191
193
 
194
+ In your test file
192
195
 
193
- class TestBook < MiniTest::Unit::TestCase
196
+ ```ruby
194
197
  def test_title
195
- book = book.new
196
- title_spy = spy.on(book, title)
198
+ book = Book.new
199
+ title_spy = Spy.on(book, title)
197
200
  book.title
198
201
  book.title
199
202
 
203
+ assert_received book, :title
204
+
200
205
  assert title_spy.has_been_called?
201
206
  assert_equal 2, title_spy.calls.count
202
207
  end
203
- end
204
208
  ```
205
209
 
206
210
  ### Rspec
@@ -209,34 +213,28 @@ In `spec_helper.rb`
209
213
 
210
214
  ```ruby
211
215
  require "rspec/autorun"
212
- require "spy"
216
+ require "spy/integration"
213
217
  RSpec.configure do |c|
214
- c.after { Spy.teardown }
215
- c.mock_with :absolutely_nothing # this is completely optional.
218
+ c.mock_with Spy::RspecAdapter
216
219
  end
220
+ ```
221
+
222
+ In your test
217
223
 
224
+ ```ruby
218
225
  describe Book do
219
226
  it "title can be called" do
220
227
  book = book.new
221
- title_spy = spy.on(book, title)
222
- book.title
223
- book.title
224
-
225
- expect(title_spy).to have_been_called
226
- expect(title_spy.calls.count).to eq(2)
227
- end
228
- end
229
- ```
228
+ page_spy = Spy.on(book, page)
229
+ book.page(1)
230
+ book.page(2)
230
231
 
231
- ### Test::Unit
232
+ expect(book).to have_received(:page)
233
+ expect(book).to have_received(:page).with(1)
234
+ expect(book).to have_received(:page).with(2)
232
235
 
233
- ```ruby
234
- require "spy"
235
- class Test::Unit::TestCase
236
- def teardown
237
- # if you don't add super to every teardown then you will have to add this
238
- # line to every file.
239
- Spy.teardown
236
+ expect(page_spy).to have_been_called
237
+ expect(page_spy.calls.count).to eq(2)
240
238
  end
241
239
  end
242
240
  ```
data/lib/spy.rb CHANGED
@@ -1,9 +1,10 @@
1
+ require "spy/exceptions"
1
2
  require "spy/core_ext/marshal"
2
3
  require "spy/agency"
4
+ require "spy/api"
3
5
  require "spy/base"
4
6
  require "spy/call_log"
5
7
  require "spy/constant"
6
- require "spy/exceptions"
7
8
  require "spy/mock"
8
9
  require "spy/nest"
9
10
  require "spy/subroutine"
@@ -41,7 +42,11 @@ module Spy
41
42
  removed_spies.size > 1 ? removed_spies : removed_spies.first
42
43
  end
43
44
 
44
- #
45
+ # stubs the instance method of a given Class so all instance methods of this
46
+ # class will have the given method stubbed
47
+ # @param base_class [Class] The class you wish to stub the instance methods of
48
+ # @param method_names *[Symbol, Hash]
49
+ # @return [Spy,Array<Spy>]
45
50
  def on_instance_method(base_class, *method_names)
46
51
  spies = method_names.map do |method_name|
47
52
  create_and_hook_spy(base_class, method_name, false)
@@ -50,13 +55,17 @@ module Spy
50
55
  spies.size > 1 ? spies : spies.first
51
56
  end
52
57
 
53
- def off_instance_method(base_object, *method_names)
58
+ # remove the stub from given Class
59
+ # @param base_class [Class]
60
+ # @param method_names *[Symbol]
61
+ # @return [Spy]
62
+ def off_instance_method(base_class, *method_names)
54
63
  removed_spies = method_names.map do |method_name|
55
- spy = Subroutine.get(base_object, method_name, false)
64
+ spy = Subroutine.get(base_class, method_name, false)
56
65
  if spy
57
66
  spy.unhook
58
67
  else
59
- raise NoSpyError, "#{method_name} was not hooked on #{base_object.inspect}."
68
+ raise NoSpyError, "#{method_name} was not hooked on #{base_class.inspect}."
60
69
  end
61
70
  end
62
71
 
@@ -108,6 +117,10 @@ module Spy
108
117
  spies.size > 1 ? spies : spies.first
109
118
  end
110
119
 
120
+ # Create a mock object from a given class
121
+ # @param klass [Class] class you wish to mock
122
+ # @param stubs *[Symbol, Hash] methods you with to stub
123
+ # @return [Object]
111
124
  def mock(klass, *stubs)
112
125
  new_mock = Mock.new(klass).new
113
126
  if stubs.size > 0
@@ -116,6 +129,11 @@ module Spy
116
129
  new_mock
117
130
  end
118
131
 
132
+ # create a mock object from a given class with all the methods stubbed out
133
+ # and returning nil unless specified otherwise.
134
+ # @param klass [Class] class you wish to mock
135
+ # @param stubs *[Symbol, Hash] methods you with to stub
136
+ # @return [Object]
119
137
  def mock_all(klass, *stubs)
120
138
  mock_klass = Mock.new(klass)
121
139
  new_mock = mock_klass.new
@@ -68,7 +68,7 @@ module Spy
68
68
  private
69
69
 
70
70
  def check_spy!(spy)
71
- raise ArgumentError, "#{spy}, was not a spy" unless spy.is_a?(Base) || spy.respond_to?(:_mock_class, true)
71
+ raise ArgumentError, "#{spy}, was not a spy" unless spy.is_a?(Base)
72
72
  end
73
73
  end
74
74
  end
@@ -0,0 +1,72 @@
1
+ module Spy
2
+ module API
3
+ DidNotReceiveError = Class.new(Spy::Error)
4
+
5
+ def assert_received(base_object, method_name)
6
+ assert Subroutine.get(base_object, method_name).has_been_called?,
7
+ "#{method_name} was not called on #{base_object.inspect}"
8
+ end
9
+
10
+ def assert_received_with(base_object, method_name, *args, &block)
11
+ assert Subroutine.get(base_object, method_name).has_been_called_with?(*args, &block),
12
+ "#{method_name} was not called on #{base_object.inspect} with #{args.inspect}"
13
+ end
14
+
15
+ def have_received(method_name)
16
+ HaveReceived.new(method_name)
17
+ end
18
+
19
+ class HaveReceived
20
+ attr_reader :method_name, :actual
21
+
22
+ def initialize(method_name)
23
+ @method_name = method_name
24
+ @with = nil
25
+ end
26
+
27
+ def matches?(actual)
28
+ @actual = actual
29
+ case @with
30
+ when Proc
31
+ spy.has_been_called_with?(&@with)
32
+ when Array
33
+ spy.has_been_called_with?(*@with)
34
+ else
35
+ spy.has_been_called?
36
+ end
37
+ end
38
+
39
+ def with(*args)
40
+ @with = block_given? ? Proc.new : args
41
+ self
42
+ end
43
+
44
+ def failure_message_for_should
45
+ "expected #{actual.inspect} to have received #{method_name.inspect}#{args_message}"
46
+ end
47
+
48
+ def failure_message_for_should_not
49
+ "expected #{actual.inspect} to not have received #{method_name.inspect}#{args_message}, but did"
50
+ end
51
+
52
+ def description
53
+ "to have received #{method_name.inspect}#{args_message}"
54
+ end
55
+
56
+ private
57
+
58
+ def args_message
59
+ case @with
60
+ when Array
61
+ " with #{@with.inspect}"
62
+ when Proc
63
+ " with given block"
64
+ end
65
+ end
66
+
67
+ def spy
68
+ @spy ||= Subroutine.get(@actual, @method_name)
69
+ end
70
+ end
71
+ end
72
+ end
@@ -1,33 +1,8 @@
1
1
  module Spy
2
- class Error < StandardError; end
3
-
4
- class AlreadyStubbedError < Error
5
- def to_s
6
- @mesg || "Spy is already stubbed."
7
- end
8
- end
9
-
10
- class AlreadyHookedError < Error
11
- def to_s
12
- @mesg || "Spy is already hooked."
13
- end
14
- end
15
-
16
- class NotHookedError < Error
17
- def to_s
18
- @mesg || "Spy was not hooked."
19
- end
20
- end
21
-
22
- class NeverHookedError < Error
23
- def to_s
24
- @mesg || "Spy was never hooked."
25
- end
26
- end
27
-
28
- class NoSpyError < Error
29
- def to_s
30
- @mesg || "Spy could not be found"
31
- end
32
- end
2
+ Error = Class.new(StandardError)
3
+ AlreadyStubbedError = Class.new(Error)
4
+ AlreadyHookedError = Class.new(Error)
5
+ NotHookedError = Class.new(Error)
6
+ NeverHookedError = Class.new(Error)
7
+ NoSpyError = Class.new(Error)
33
8
  end
@@ -0,0 +1,42 @@
1
+ require 'spy'
2
+
3
+ module Spy
4
+ if defined?(::MiniTest::Unit::TestCase)
5
+ class MiniTestAdapter
6
+ include API
7
+ def after_teardown
8
+ super
9
+ Spy.teardown
10
+ end
11
+ end
12
+
13
+ ::MiniTest::Unit::TestCase.send(:include, MiniTestAdapter)
14
+ end
15
+
16
+ if defined?(::Test::Unit::TestCase) && !(defined?(::MiniTest::Unit::TestCase) && (::Test::Unit::TestCase < ::MiniTest::Unit::TestCase)) && !(defined?(::MiniTest::Spec) && (::Test::Unit::TestCase < ::MiniTest::Spec))
17
+
18
+ class TestUnitAdapter
19
+ include API
20
+ def self.included(mod)
21
+ mod.teardown :spy_teardown, :after => :append
22
+ end
23
+
24
+ def spy_teardown
25
+ Spy.teardown
26
+ end
27
+ end
28
+
29
+ ::Test::Unit::TestCase.send(:include, TestUnitAdapter)
30
+ end
31
+
32
+ class RspecAdapter
33
+ include API
34
+ def setup_mocks_for_rspec
35
+ end
36
+ def verify_mocks_for_rspec
37
+ end
38
+ def teardown_mocks_for_rspec
39
+ Spy.teardown
40
+ end
41
+ end
42
+ end
@@ -12,35 +12,32 @@ module Spy
12
12
  Agency.instance.recruit(self)
13
13
  end
14
14
 
15
- def is_a?(other)
16
- self.class.ancestors.include?(other)
17
- end
18
-
19
- alias :kind_of? :is_a?
20
-
15
+ # the only method that doesn't work correctly of a mock if inherited. We
16
+ # overwite for compatibility.
17
+ # @param other [Class]
18
+ # @return [Boolean]
21
19
  def instance_of?(other)
22
20
  other == self.class
23
21
  end
24
22
 
23
+ # returns the original class method if the current method is a mock_method
24
+ # @param method_name [Symbol, String]
25
+ # @return [Method]
25
26
  def method(method_name)
26
27
  new_method = super
27
- if new_method.parameters.size >= 1 &&
28
- new_method.parameters.last.last == :mock_method
29
-
30
- begin
31
- _mock_class.send(:remove_method, method_name)
32
- real_method = super
33
- ensure
34
- _mock_class.send(:define_method, method_name, new_method)
35
- end
36
-
37
- real_method
28
+ parameters = new_method.parameters
29
+ if parameters.size >= 1 && parameters.last.last == :mock_method
30
+ self.class.instance_method(method_name).bind(self)
38
31
  else
39
32
  new_method
40
33
  end
41
34
  end
42
35
 
43
36
  class << self
37
+ # This will create a new Mock class with all the instance methods of given
38
+ # klass mocked out.
39
+ # @param klass [Class]
40
+ # @return [Class]
44
41
  def new(klass)
45
42
  mock_klass = Class.new(klass)
46
43
  mock_klass.class_exec do
@@ -56,6 +53,8 @@ module Spy
56
53
  mock_klass
57
54
  end
58
55
 
56
+ private
57
+
59
58
  def included(mod)
60
59
  method_classes = classes_to_override_methods(mod)
61
60
 
@@ -65,13 +64,13 @@ module Spy
65
64
  mocked_methods << method_name
66
65
  args = args_for_method(mod.instance_method(method_name))
67
66
 
68
- mod.class_eval <<-DEF_METHOD, __FILE__, __LINE__+1
67
+ mod.class_eval <<-DEF_METHOD, __FILE__, __LINE__ + 1
69
68
  def #{method_name}(#{args})
70
69
  raise ::Spy::NeverHookedError, "'#{method_name}' was never hooked on mock spy."
71
70
  end
72
-
73
- #{visibility} :#{method_name}
74
71
  DEF_METHOD
72
+
73
+ mod.send(visibility, method_name)
75
74
  end
76
75
  end
77
76
 
@@ -80,8 +79,6 @@ module Spy
80
79
  end
81
80
  end
82
81
 
83
- private
84
-
85
82
  def classes_to_override_methods(mod)
86
83
  method_classes = mod.ancestors
87
84
  method_classes.shift
@@ -95,7 +92,7 @@ module Spy
95
92
 
96
93
  def get_inherited_methods(klass_ancestors, visibility)
97
94
  instance_methods = klass_ancestors.map do |klass|
98
- klass.send("#{visibility}_instance_methods".to_sym, false)
95
+ klass.send("#{visibility}_instance_methods".to_sym, false)
99
96
  end
100
97
  instance_methods.flatten!
101
98
  instance_methods.uniq!
@@ -103,7 +100,8 @@ module Spy
103
100
  end
104
101
 
105
102
  def args_for_method(method)
106
- args = method.parameters.map do |type,name|
103
+ args = method.parameters
104
+ args.map! do |type,name|
107
105
  name ||= :args
108
106
  case type
109
107
  when :req
@@ -113,7 +111,8 @@ module Spy
113
111
  when :rest
114
112
  "*#{name}"
115
113
  end
116
- end.compact
114
+ end
115
+ args.compact!
117
116
  args << "&mock_method"
118
117
  args.join(",")
119
118
  end
@@ -193,9 +193,8 @@ module Spy
193
193
  # @return [Boolean]
194
194
  def has_been_called_with?(*args)
195
195
  raise NeverHookedError unless @was_hooked
196
- calls.any? do |call_log|
197
- call_log.args == args
198
- end
196
+ match = block_given? ? Proc.new : proc { |call| call.args == args }
197
+ calls.any?(&match)
199
198
  end
200
199
 
201
200
  # invoke that the method has been called. You really shouldn't use this
@@ -331,7 +330,9 @@ module Spy
331
330
  if base_object.respond_to?(method_name, true)
332
331
  spied_method = base_object.method(method_name)
333
332
  end
334
- elsif (base_object.instance_methods + base_object.private_instance_methods).include?(method_name)
333
+ elsif (base_object.public_instance_methods +
334
+ base_object.protected_instance_methods +
335
+ base_object.private_instance_methods).include?(method_name)
335
336
  spied_method = base_object.instance_method(method_name)
336
337
  end
337
338
 
@@ -1,3 +1,3 @@
1
1
  module Spy
2
- VERSION = "0.3.1"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -0,0 +1,40 @@
1
+ require 'test_helper'
2
+
3
+ class TestApi < MiniTest::Unit::TestCase
4
+ include Spy::API
5
+
6
+ def setup
7
+ @pen = Pen.new
8
+ Spy.on(@pen, :write)
9
+ end
10
+
11
+ def test_assert_received
12
+ @pen.write(:hello)
13
+ assert_received(@pen, :write)
14
+ end
15
+
16
+ def test_assert_received_with
17
+ @pen.write(:world)
18
+ assert_received_with(@pen, :write, :world)
19
+ assert_received_with(@pen, :write) do |call|
20
+ call.args == [:world]
21
+ end
22
+ end
23
+
24
+ def test_have_received
25
+ @pen.write(:foo)
26
+ matcher = have_received(:write)
27
+ assert matcher.matches?(@pen)
28
+ end
29
+
30
+ def test_have_received_with
31
+ @pen.write(:bar)
32
+ matcher = have_received(:write).with(:bar)
33
+ assert matcher.matches?(@pen)
34
+
35
+ matcher = have_received(:write).with do |call|
36
+ call.args == [:bar]
37
+ end
38
+ assert matcher.matches?(@pen)
39
+ end
40
+ end
@@ -76,11 +76,13 @@ module Spy
76
76
  assert_equal pen_methods.sort, @pen_mock.mocked_methods.sort
77
77
  end
78
78
 
79
- def test_base_class_methods_are_not_stubbed
80
- (Object.instance_methods - [:tap, :pretty_print_inspect]).each do |method_name|
81
- object_method = Object.instance_method(method_name)
82
- if object_method.parameters == []
83
- @pen.send(method_name)
79
+ buggy_methods = [:tap, :pretty_print_inspect]
80
+ methods_to_test = Object.instance_methods - buggy_methods
81
+ methods_to_test.each do |method_name|
82
+ object_method = Object.instance_method(method_name)
83
+ if object_method.arity == 0 || (RUBY_ENGINE != "jruby" && object_method.parameters == [])
84
+ define_method("test_base_class_method_#{method_name}_is_not_stubbed") do
85
+ @pen_mock.new.send(method_name)
84
86
  end
85
87
  end
86
88
  end
metadata CHANGED
@@ -1,110 +1,97 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
5
- prerelease:
4
+ version: 0.4.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Ryan Ong
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-03-13 00:00:00.000000000 Z
11
+ date: 2013-05-08 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: pry
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: pry-nav
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: minitest
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: 4.5.0
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: 4.5.0
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: rspec-core
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - '>='
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - '>='
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: rspec-expectations
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ! '>='
73
+ - - '>='
84
74
  - !ruby/object:Gem::Version
85
75
  version: '0'
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ! '>='
80
+ - - '>='
92
81
  - !ruby/object:Gem::Version
93
82
  version: '0'
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: coveralls
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
- - - ! '>='
87
+ - - '>='
100
88
  - !ruby/object:Gem::Version
101
89
  version: '0'
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
- - - ! '>='
94
+ - - '>='
108
95
  - !ruby/object:Gem::Version
109
96
  version: '0'
110
97
  description: A simple modern mocking library that uses the spy pattern and checks
@@ -125,11 +112,13 @@ files:
125
112
  - Rakefile
126
113
  - lib/spy.rb
127
114
  - lib/spy/agency.rb
115
+ - lib/spy/api.rb
128
116
  - lib/spy/base.rb
129
117
  - lib/spy/call_log.rb
130
118
  - lib/spy/constant.rb
131
119
  - lib/spy/core_ext/marshal.rb
132
120
  - lib/spy/exceptions.rb
121
+ - lib/spy/integration.rb
133
122
  - lib/spy/mock.rb
134
123
  - lib/spy/nest.rb
135
124
  - lib/spy/subroutine.rb
@@ -151,6 +140,7 @@ files:
151
140
  - spec/spy/stub_spec.rb
152
141
  - spec/spy/to_ary_spec.rb
153
142
  - spy.gemspec
143
+ - test/integration/test_api.rb
154
144
  - test/integration/test_constant_spying.rb
155
145
  - test/integration/test_instance_method.rb
156
146
  - test/integration/test_mocking.rb
@@ -162,27 +152,26 @@ files:
162
152
  homepage: https://github.com/ryanong/spy
163
153
  licenses:
164
154
  - MIT
155
+ metadata: {}
165
156
  post_install_message:
166
157
  rdoc_options: []
167
158
  require_paths:
168
159
  - lib
169
160
  required_ruby_version: !ruby/object:Gem::Requirement
170
- none: false
171
161
  requirements:
172
- - - ! '>='
162
+ - - '>='
173
163
  - !ruby/object:Gem::Version
174
164
  version: 1.9.3
175
165
  required_rubygems_version: !ruby/object:Gem::Requirement
176
- none: false
177
166
  requirements:
178
- - - ! '>='
167
+ - - '>='
179
168
  - !ruby/object:Gem::Version
180
169
  version: '0'
181
170
  requirements: []
182
171
  rubyforge_project:
183
- rubygems_version: 1.8.23
172
+ rubygems_version: 2.0.3
184
173
  signing_key:
185
- specification_version: 3
174
+ specification_version: 4
186
175
  summary: Spy is a mocking library that was made for the modern age. It supports only
187
176
  1.9.3+. Spy by default will raise an error if you attempt to stub a method that
188
177
  doesn't exist or call the stubbed method with the wrong arity.
@@ -203,6 +192,7 @@ test_files:
203
192
  - spec/spy/stub_implementation_spec.rb
204
193
  - spec/spy/stub_spec.rb
205
194
  - spec/spy/to_ary_spec.rb
195
+ - test/integration/test_api.rb
206
196
  - test/integration/test_constant_spying.rb
207
197
  - test/integration/test_instance_method.rb
208
198
  - test/integration/test_mocking.rb
@@ -211,4 +201,3 @@ test_files:
211
201
  - test/spy/test_subroutine.rb
212
202
  - test/support/pen.rb
213
203
  - test/test_helper.rb
214
- has_rdoc: