spy 0.4.5 → 1.0.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 459078e1b4845518e7c5e484f86d9b60fe804b89
4
- data.tar.gz: c4723869289fb3afcba314f16c2f0c9cd5f4a1ac
2
+ SHA256:
3
+ metadata.gz: cc1c3954f26350a18af51b75fd2400d06600c859ba9e4675a2ddfb5b983f8a8d
4
+ data.tar.gz: e535c67bdf68ba225c6cfb98f3182c53004de5452e27eb3d3476deaa16369956
5
5
  SHA512:
6
- metadata.gz: 9686fc4befa165a861d1e9bb862902e02b153a0584961af9b672c225d8206720f2894d33f64062a8d7b8f4ee0cadd6461ae9cd7c12c9d584fc7ad879faaf6d7e
7
- data.tar.gz: 53892408f38307099ecc5ccf7864fbd899f3150c238b71fd8189f561589d702b5d025ed3a5a59800e7caac7277c2d8f98d3f82d99ab647740d164ab98ce067dd
6
+ metadata.gz: 6d6fb00c5cdc3e0f435f24ffdff53921fa8578f69a004c0b995fda335b69a694a4ea06fe61541d66fb0d40c0a52303d197ceec5b429bec102c09828da19082a4
7
+ data.tar.gz: 16de7875661311fa5d6ca327ff4510751e88d743e672e937492a8d4abcbd11599f12df9667965c2e5434a5bd6b5725c12caf4c781672fac033ce6c51b5746dbe
@@ -1,11 +1,11 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.3
4
- - 2.0.0
5
- - jruby-19mode
3
+ - 2.1.0
4
+ - 2.5.1
5
+ - jruby
6
6
  - ruby-head
7
- - rbx-19mode
7
+ - rbx-3
8
8
  matrix:
9
9
  allow_failures:
10
10
  - rvm: ruby-head
11
- - rvm: rbx-19mode
11
+ - rvm: rbx-3
@@ -1,6 +1,7 @@
1
- ## Spy 0.4.3 (Not Released) ##
1
+ ## Spy 1.0.0 (October 10, 2018) ##
2
2
 
3
- * Not Released
3
+ * drop support for ruby 1.9.3, 2.0. Only support 2.1+ (@dylanahsmith)
4
+ * support named arguments (@dylanahsmith)
4
5
 
5
6
  ## Spy 0.4.3 (April 14, 2016) ##
6
7
 
data/README.md CHANGED
@@ -9,7 +9,8 @@
9
9
 
10
10
  Spy is a lightweight stubbing framework with support for method spies, constant stubs, and object mocks.
11
11
 
12
- Spy was designed for 1.9.3+.
12
+ Spy supports ruby 2.1.0+.
13
+ For versions less than 2.1 use v0.4.5
13
14
 
14
15
  Spy features that were completed were tested against the rspec-mocks tests so it covers all cases that rspec-mocks does.
15
16
 
@@ -197,7 +198,7 @@ In your test file
197
198
  ```ruby
198
199
  def test_title
199
200
  book = Book.new
200
- title_spy = Spy.on(book, title)
201
+ title_spy = Spy.on(book, :title)
201
202
  book.title
202
203
  book.title
203
204
 
data/Rakefile CHANGED
@@ -3,7 +3,7 @@ require 'rake/testtask'
3
3
 
4
4
  Rake::TestTask.new do |t|
5
5
  t.libs << "test"
6
- t.test_files = FileList['test/**/test*.rb']
6
+ t.test_files = FileList['test/**/test_*.rb']
7
7
  t.verbose = true
8
8
  end
9
9
 
@@ -32,6 +32,7 @@ module Spy
32
32
  def initialize(object, method_name, singleton_method = true)
33
33
  @base_object, @method_name = object, method_name
34
34
  @singleton_method = singleton_method
35
+ @plan = nil
35
36
  reset!
36
37
  end
37
38
 
@@ -282,6 +283,8 @@ module Spy
282
283
  @arity_range ||=
283
284
  if original_method
284
285
  min = max = 0
286
+ key_args = false
287
+ opt_keys = false
285
288
  original_method.parameters.each do |type,_|
286
289
  case type
287
290
  when :req
@@ -291,8 +294,17 @@ module Spy
291
294
  max += 1
292
295
  when :rest
293
296
  max = Float::INFINITY
297
+ when :keyreq
298
+ key_args = true
299
+ when :keyrest, :key
300
+ key_args = true
301
+ opt_keys = true
294
302
  end
295
303
  end
304
+ if key_args
305
+ max += 1
306
+ min += 1 unless opt_keys
307
+ end
296
308
  (min..max)
297
309
  end
298
310
  end
@@ -1,3 +1,3 @@
1
1
  module Spy
2
- VERSION = "0.4.5"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -6,12 +6,12 @@ require 'spy/version'
6
6
  Gem::Specification.new do |gem|
7
7
  gem.name = "spy"
8
8
  gem.version = Spy::VERSION
9
- gem.required_ruby_version = '>= 1.9.3'
9
+ gem.required_ruby_version = '>= 2.1.0'
10
10
  gem.license = 'MIT'
11
11
  gem.authors = ["Ryan Ong"]
12
12
  gem.email = ["ryanong@gmail.com"]
13
13
  gem.summary = %q{A simple modern mocking library that uses the spy pattern and checks method's existence and arity.}
14
- gem.description = %q{Spy is a mocking library that was made for the modern age. It supports only 1.9.3+. Spy by default will raise an error if you attempt to stub a method that doesn't exist or call the stubbed method with the wrong arity.}
14
+ gem.description = %q{Spy is a mocking library that was made for the modern age. It supports only 2.1.0+. Spy by default will raise an error if you attempt to stub a method that doesn't exist or call the stubbed method with the wrong arity.}
15
15
  gem.homepage = "https://github.com/ryanong/spy"
16
16
 
17
17
  gem.files = `git ls-files`.split($/)
@@ -20,7 +20,9 @@ Gem::Specification.new do |gem|
20
20
  gem.require_paths = ["lib"]
21
21
  gem.add_development_dependency('pry')
22
22
  gem.add_development_dependency('pry-nav')
23
+ gem.add_development_dependency('pry-stack_explorer')
23
24
  gem.add_development_dependency('minitest', '>= 4.5.0')
25
+ gem.add_development_dependency('minitest-reporters')
24
26
  gem.add_development_dependency('rspec-core')
25
27
  gem.add_development_dependency('rspec-expectations')
26
28
  gem.add_development_dependency('coveralls')
@@ -68,6 +68,7 @@ module Spy
68
68
  end
69
69
  end
70
70
 
71
+ BUGGY_METHODS = %i(tap pretty_print_inspect trust untrust untrusted?)
71
72
  def test_mocked_methods
72
73
  pen_methods = Pen.public_instance_methods(false) +
73
74
  Pen.protected_instance_methods(false) +
@@ -76,8 +77,7 @@ module Spy
76
77
  assert_equal pen_methods.sort, @pen_mock.mocked_methods.sort
77
78
  end
78
79
 
79
- buggy_methods = [:tap, :pretty_print_inspect]
80
- methods_to_test = Object.instance_methods - buggy_methods
80
+ methods_to_test = Object.instance_methods - BUGGY_METHODS
81
81
  methods_to_test.each do |method_name|
82
82
  object_method = Object.instance_method(method_name)
83
83
  if object_method.arity == 0 || (RUBY_ENGINE != "jruby" && object_method.parameters == [])
@@ -40,13 +40,13 @@ module Spy
40
40
  end
41
41
 
42
42
  def test_spy_can_hook_and_record_a_meta_method_call_on_a_constant
43
- assert_equal "meta_method", Pen.meta_method
44
- meta_spy = spy_on(Pen, :meta_method)
43
+ assert_equal "meta_class_method", Pen.meta_class_method
44
+ meta_spy = spy_on(Pen, :meta_class_method)
45
45
  refute meta_spy.has_been_called?
46
- assert_nil Pen.meta_method
46
+ assert_nil Pen.meta_class_method
47
47
  assert meta_spy.has_been_called?
48
48
  meta_spy.unhook
49
- assert_equal "meta_method", Pen.meta_method
49
+ assert_equal "meta_class_method", Pen.meta_class_method
50
50
  end
51
51
 
52
52
  def test_spy_can_hook_record_and_unhook_a_meta_method
@@ -199,6 +199,38 @@ module Spy
199
199
  end
200
200
  end
201
201
 
202
+ def test_that_method_spy_keeps_arity_with_optional_keyword_args
203
+ spy_on(@pen, :opt_kwargs)
204
+ @pen.opt_kwargs(:pos1)
205
+ @pen.opt_kwargs(:pos1, opt: 1, opt2: 2)
206
+ assert_raises ArgumentError do
207
+ @pen.opt_kwargs
208
+ end
209
+ assert_raises ArgumentError do
210
+ @pen.opt_kwargs(:pos1, :pos2, opt: 1)
211
+ end
212
+ end
213
+
214
+ def test_that_method_spy_keeps_arity_with_keyword_splat
215
+ spy_on(@pen, :keyrest)
216
+ @pen.keyrest
217
+ @pen.keyrest(a: 1, b: 2)
218
+ assert_raises ArgumentError do
219
+ @pen.keyrest(:pos1, :pos2)
220
+ end
221
+ end
222
+
223
+ def test_that_method_spy_keeps_arity_with_required_keyword_args
224
+ spy_on(@pen, :req_kwargs)
225
+ @pen.req_kwargs(req1: 1, req2: 2)
226
+ assert_raises ArgumentError do
227
+ @pen.req_kwargs
228
+ end
229
+ assert_raises ArgumentError do
230
+ @pen.req_kwargs(:pos1, :pos2)
231
+ end
232
+ end
233
+
202
234
  def test_hook_mimics_public_visibility
203
235
  spy_on(@pen, :public_method)
204
236
  assert @pen.singleton_class.public_method_defined? :public_method
@@ -38,6 +38,18 @@ class Pen
38
38
  "another"
39
39
  end
40
40
 
41
+ def opt_kwargs(required, opt: nil, opt2: nil)
42
+ [required, opt: opt, opt2: opt2]
43
+ end
44
+
45
+ def keyrest(**kwargs)
46
+ kwargs
47
+ end
48
+
49
+ def req_kwargs(req1:, req2:)
50
+ [req1, req2]
51
+ end
52
+
41
53
  protected
42
54
  def protected_method
43
55
  end
@@ -65,13 +77,11 @@ class Pen
65
77
  end
66
78
  end
67
79
 
68
- another = "meta_method"
69
-
70
- Pen.define_singleton_method(:meta_method) do
71
- another
80
+ Pen.define_singleton_method(:meta_class_method) do
81
+ "meta_class_method".freeze
72
82
  end
73
83
 
74
84
  Pen.send(:define_method, :meta_method) do
75
- another
85
+ "meta_method".freeze
76
86
  end
77
87
 
@@ -1,9 +1,11 @@
1
1
  require 'bundler/setup'
2
2
  require 'minitest/autorun'
3
+ require "minitest/reporters"
3
4
  require 'pry'
4
5
  require 'pry-nav'
5
6
  require 'coveralls'
6
7
  Coveralls.wear!
8
+ Minitest::Reporters.use!
7
9
 
8
10
  require 'spy'
9
11
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.5
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Ong
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-26 00:00:00.000000000 Z
11
+ date: 2018-10-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pry
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: pry-stack_explorer
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: minitest
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +66,20 @@ dependencies:
52
66
  - - ">="
53
67
  - !ruby/object:Gem::Version
54
68
  version: 4.5.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest-reporters
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: rspec-core
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -95,7 +123,7 @@ dependencies:
95
123
  - !ruby/object:Gem::Version
96
124
  version: '0'
97
125
  description: Spy is a mocking library that was made for the modern age. It supports
98
- only 1.9.3+. Spy by default will raise an error if you attempt to stub a method
126
+ only 2.1.0+. Spy by default will raise an error if you attempt to stub a method
99
127
  that doesn't exist or call the stubbed method with the wrong arity.
100
128
  email:
101
129
  - ryanong@gmail.com
@@ -162,7 +190,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
162
190
  requirements:
163
191
  - - ">="
164
192
  - !ruby/object:Gem::Version
165
- version: 1.9.3
193
+ version: 2.1.0
166
194
  required_rubygems_version: !ruby/object:Gem::Requirement
167
195
  requirements:
168
196
  - - ">="
@@ -170,7 +198,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
170
198
  version: '0'
171
199
  requirements: []
172
200
  rubyforge_project:
173
- rubygems_version: 2.5.1
201
+ rubygems_version: 2.7.6
174
202
  signing_key:
175
203
  specification_version: 4
176
204
  summary: A simple modern mocking library that uses the spy pattern and checks method's
@@ -201,4 +229,3 @@ test_files:
201
229
  - test/spy/test_subroutine.rb
202
230
  - test/support/pen.rb
203
231
  - test/test_helper.rb
204
- has_rdoc: