much-stub 0.1.8 → 0.1.9

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
2
  SHA256:
3
- metadata.gz: c37bcf3b2a355483515be9eabd74c93bd93ccf5f503180409f86d18a183f6f8a
4
- data.tar.gz: 20cab69d294b44212ccd23eb068ae17e2458576153e817c30dac08206c294c47
3
+ metadata.gz: bc032b1684e0734a374eb6b4a5df50d2980cc9a7cbf7e1149af37e1a4937a5f9
4
+ data.tar.gz: 35b88afbbc8c997dacc497e71b5469a4a5062e59259385533b63387a2865180e
5
5
  SHA512:
6
- metadata.gz: 929d09b4df2e8b85496b4a47fe67a23dde700ee751b7fa3d1b074a09db185f01ad3ff54e16a7935cd1db75fc4af58fdb9ff3482fe81d40fcfcca421ae515e265
7
- data.tar.gz: dfbfd75bc0edc084c45eee9c62926c7c2baaec32cb28f40d670a6296e1b21c7348ee4f1d6926d02b03a63223e1369b2d0907735c2b8849805862404afffd256f
6
+ metadata.gz: 615eaeb52480305c353204c4a1a27653a84d4f855f323356bcd09f55baf421998ccd35ad8b9c80ef1d431dd700db754be51ed05f7734644e452b2ebe16d3e828
7
+ data.tar.gz: 4f7f4fc3666baca6bed52dec567fccca5fa6248946182c84d1a3325f2e7a8eaab88ffad4287b7c7a8f242e6b523c63f0ac60605c42ed16ae6ea8a331a19be09d
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MuchStub
4
- VERSION = "0.1.8"
4
+ VERSION = "0.1.9"
5
5
  end
data/lib/much-stub.rb CHANGED
@@ -50,34 +50,34 @@ module MuchStub
50
50
  stubs.keys.each{ |key| stubs.delete(key).teardown }
51
51
  end
52
52
 
53
- def self.stub_send(obj, meth, *args, &block)
53
+ def self.stub_send(obj, meth, *pargs, **kargs, &block)
54
54
  orig_caller = caller_locations
55
55
  stub =
56
56
  stubs.fetch(MuchStub::Stub.key(obj, meth)) do
57
57
  raise NotStubbedError, "`#{meth}` not stubbed.", orig_caller.map(&:to_s)
58
58
  end
59
- stub.call_method(args, &block)
59
+ stub.call_method(*pargs, **kargs, &block)
60
60
  end
61
61
 
62
62
  def self.tap(obj, meth, &tap_block)
63
- stub(obj, meth) do |*args, &block|
64
- stub_send(obj, meth, *args, &block).tap do |value|
65
- tap_block&.call(value, *args, &block)
63
+ stub(obj, meth) do |*pargs, **kargs, &block|
64
+ stub_send(obj, meth, *pargs, **kargs, &block).tap do |value|
65
+ tap_block&.call(value, *pargs, **kargs, &block)
66
66
  end
67
67
  end
68
68
  end
69
69
 
70
70
  def self.tap_on_call(obj, meth, &on_call_block)
71
- tap(obj, meth) do |value, *args, &block|
72
- on_call_block&.call(value, MuchStub::Call.new(*args, &block))
71
+ tap(obj, meth) do |value, *pargs, **kargs, &block|
72
+ on_call_block&.call(value, MuchStub::Call.new(*pargs, **kargs, &block))
73
73
  end
74
74
  end
75
75
 
76
76
  def self.spy(obj, *meths, **return_values)
77
77
  MuchStub::CallSpy.new(**return_values).call_spy_tap do |spy|
78
78
  meths.each do |meth|
79
- stub(obj, meth) do |*args, &block|
80
- spy.__send__(meth, *args, &block)
79
+ stub(obj, meth) do |*pargs, **kargs, &block|
80
+ spy.__send__(meth, *pargs, **kargs, &block)
81
81
  end
82
82
  end
83
83
  end
@@ -108,12 +108,13 @@ module MuchStub
108
108
  @do = block || @do
109
109
  end
110
110
 
111
- def call_method(args, &block)
112
- @method.call(*args, &block)
111
+ def call_method(*pargs, **kargs, &block)
112
+ @method.call(*pargs, **kargs, &block)
113
113
  end
114
114
 
115
- def call(args, orig_caller = nil, &block)
115
+ def call(*pargs, orig_caller: nil, **kargs, &block)
116
116
  orig_caller ||= caller_locations
117
+ args = combined_args(pargs, kargs)
117
118
  unless MuchStub.arity_matches?(@method, args)
118
119
  raise(
119
120
  StubArityError.new(
@@ -124,14 +125,15 @@ module MuchStub
124
125
  ),
125
126
  )
126
127
  end
127
- lookup(args, orig_caller).call(*args, &block)
128
+ lookup(pargs, kargs, orig_caller).call(*pargs, **kargs, &block)
128
129
  rescue NotStubbedError
129
130
  @lookup.rehash
130
- lookup(args, orig_caller).call(*args, &block)
131
+ lookup(pargs, kargs, orig_caller).call(*pargs, **kargs, &block)
131
132
  end
132
133
 
133
- def with(*args, &block)
134
+ def with(*pargs, **kargs, &block)
134
135
  orig_caller = caller_locations
136
+ args = combined_args(pargs, kargs)
135
137
  unless MuchStub.arity_matches?(@method, args)
136
138
  raise(
137
139
  StubArityError.new(
@@ -148,8 +150,8 @@ module MuchStub
148
150
 
149
151
  def on_call(&on_call_block)
150
152
  stub_block =
151
- ->(*args, &block){
152
- on_call_block&.call(MuchStub::Call.new(*args, &block))
153
+ ->(*pargs, **kargs, &block){
154
+ on_call_block&.call(MuchStub::Call.new(*pargs, **kargs, &block))
153
155
  }
154
156
  if @lookup.empty?
155
157
  @do = stub_block
@@ -198,13 +200,16 @@ module MuchStub
198
200
 
199
201
  MuchStub.instance_variable_set(@ivar_name, self)
200
202
  @metaclass.class_eval <<-stub_method
201
- def #{@method_name}(*args, &block)
202
- MuchStub.instance_variable_get("#{@ivar_name}").call(args, caller_locations, &block)
203
+ def #{@method_name}(*pargs, **kargs, &block)
204
+ MuchStub
205
+ .instance_variable_get("#{@ivar_name}")
206
+ .call(*pargs, orig_caller: caller_locations, **kargs, &block)
203
207
  end
204
208
  stub_method
205
209
  end
206
210
 
207
- def lookup(args, orig_caller)
211
+ def lookup(pargs, kargs, orig_caller)
212
+ args = combined_args(pargs, kargs)
208
213
  @lookup.fetch(args) do
209
214
  self.do ||
210
215
  begin
@@ -229,6 +234,10 @@ module MuchStub
229
234
  def inspect_call(args)
230
235
  "`#{@method_name}(#{args.map(&:inspect).join(",")})`"
231
236
  end
237
+
238
+ def combined_args(pargs, kargs)
239
+ [*pargs, (kargs.empty? ? nil : kargs)].compact
240
+ end
232
241
  end
233
242
 
234
243
  StubError = Class.new(ArgumentError)
@@ -268,7 +277,7 @@ module MuchStub
268
277
  def self.new(object, method_name)
269
278
  arity = get_arity(object, method_name)
270
279
  params = build_params_from_arity(arity)
271
- params << "*args" if arity < 0
280
+ params << "*pargs, **kargs" if arity < 0
272
281
  params << "&block"
273
282
  params.join(", ")
274
283
  end
@@ -200,6 +200,10 @@ module MuchStub
200
200
  [val1, val2, args]
201
201
  end
202
202
 
203
+ def mykargs(val1:, **kargs)
204
+ [val1, kargs]
205
+ end
206
+
203
207
  def myblk(&block)
204
208
  block.call
205
209
  end
@@ -422,46 +426,54 @@ module MuchStub
422
426
 
423
427
  # no args
424
428
  stub = MuchStub::Stub.new(@myobj, :mymeth){ "mymeth" }
425
- assert_equal "mymeth", stub.call([])
426
- assert_equal "meth", stub.call_method([])
429
+ assert_equal "mymeth", stub.call
430
+ assert_equal "meth", stub.call_method
427
431
 
428
432
  # static args
429
433
  stub = MuchStub::Stub.new(@myobj, :myval, &:to_s)
430
- assert_equal "1", stub.call([1])
431
- assert_equal 1, stub.call_method([1])
432
- assert_equal "2", stub.call([2])
433
- assert_equal 2, stub.call_method([2])
434
+ assert_equal "1", stub.call(1)
435
+ assert_equal 1, stub.call_method(1)
436
+ assert_equal "2", stub.call(2)
437
+ assert_equal 2, stub.call_method(2)
434
438
  stub.with(2){ "two" }
435
- assert_equal "two", stub.call([2])
436
- assert_equal 2, stub.call_method([2])
439
+ assert_equal "two", stub.call(2)
440
+ assert_equal 2, stub.call_method(2)
437
441
 
438
442
  # dynamic args
439
443
  stub = MuchStub::Stub.new(@myobj, :myargs){ |*args| args.join(",") }
440
- assert_equal "1,2", stub.call([1, 2])
441
- assert_equal [1, 2], stub.call_method([1, 2])
442
- assert_equal "3,4,5", stub.call([3, 4, 5])
443
- assert_equal [3, 4, 5], stub.call_method([3, 4, 5])
444
+ assert_equal "1,2", stub.call(1, 2)
445
+ assert_equal [1, 2], stub.call_method(1, 2)
446
+ assert_equal "3,4,5", stub.call(3, 4, 5)
447
+ assert_equal [3, 4, 5], stub.call_method(3, 4, 5)
444
448
  stub.with(3, 4, 5){ "three-four-five" }
445
- assert_equal "three-four-five", stub.call([3, 4, 5])
446
- assert_equal [3, 4, 5], stub.call_method([3, 4, 5])
449
+ assert_equal "three-four-five", stub.call(3, 4, 5)
450
+ assert_equal [3, 4, 5], stub.call_method(3, 4, 5)
447
451
 
448
452
  # mixed static/dynamic args
449
453
  stub = MuchStub::Stub.new(@myobj, :myvalargs){ |*args| args.join(",") }
450
- assert_equal "1,2,3", stub.call([1, 2, 3])
451
- assert_equal [1, 2, [3]], stub.call_method([1, 2, 3])
452
- assert_equal "3,4,5", stub.call([3, 4, 5])
453
- assert_equal [3, 4, [5]], stub.call_method([3, 4, 5])
454
+ assert_equal "1,2,3", stub.call(1, 2, 3)
455
+ assert_equal [1, 2, [3]], stub.call_method(1, 2, 3)
456
+ assert_equal "3,4,5", stub.call(3, 4, 5)
457
+ assert_equal [3, 4, [5]], stub.call_method(3, 4, 5)
454
458
  stub.with(3, 4, 5){ "three-four-five" }
455
- assert_equal "three-four-five", stub.call([3, 4, 5])
456
- assert_equal [3, 4, [5]], stub.call_method([3, 4, 5])
459
+ assert_equal "three-four-five", stub.call(3, 4, 5)
460
+ assert_equal [3, 4, [5]], stub.call_method(3, 4, 5)
461
+
462
+ # keyword args
463
+ stub = MuchStub::Stub.new(@myobj, :mykargs){ |**kargs| kargs.inspect }
464
+ assert_equal "{:val1=>1, :val2=>2}", stub.call(val1: 1, val2: 2)
465
+ assert_equal [1, { val2: 2 }], stub.call_method(val1: 1, val2: 2)
466
+ stub.with(val1: 3, val2: 4){ "three-four" }
467
+ assert_equal "three-four", stub.call(val1: 3, val2: 4)
468
+ assert_equal [3, { val2: 4 }], stub.call_method(val1: 3, val2: 4)
457
469
 
458
470
  # blocks
459
471
  blkcalled = false
460
472
  blk = proc{ blkcalled = true }
461
473
  stub = MuchStub::Stub.new(@myobj, :myblk){ blkcalled = "true" }
462
- stub.call([], &blk)
474
+ stub.call(&blk)
463
475
  assert_equal "true", blkcalled
464
- stub.call_method([], &blk)
476
+ stub.call_method(&blk)
465
477
  assert_equal true, blkcalled
466
478
  end
467
479
 
@@ -500,7 +512,7 @@ module MuchStub
500
512
  subject{ @stub }
501
513
 
502
514
  should "not raise a stub error when called" do
503
- assert_nothing_raised{ @stub.call([@arg]) }
515
+ assert_nothing_raised{ @stub.call(@arg) }
504
516
  end
505
517
  end
506
518
 
@@ -564,7 +576,7 @@ module MuchStub
564
576
  end
565
577
 
566
578
  should "build a parameter list for a method that takes any args" do
567
- assert_equal "*args, &block", subject.new(@object, "anyargs")
579
+ assert_equal "*pargs, **kargs, &block", subject.new(@object, "anyargs")
568
580
  end
569
581
 
570
582
  should "build a parameter list for a method that takes many args" do
@@ -574,7 +586,8 @@ module MuchStub
574
586
 
575
587
  should "build a parameter list for a method that takes a minimum number "\
576
588
  "of args" do
577
- expected = "#{ParameterList::LETTERS.join(", ")}, aa, *args, &block"
589
+ expected =
590
+ "#{ParameterList::LETTERS.join(", ")}, aa, *pargs, **kargs, &block"
578
591
  assert_equal expected, subject.new(@object, "minargs")
579
592
  end
580
593
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: much-stub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.1.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kelly Redding