spy 0.4.5 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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: