gimme 0.3.3 → 0.3.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.
@@ -4,7 +4,7 @@ Gimme is a very lightweight test double library for ruby. Written to be an opini
4
4
 
5
5
  You can read the (possibly stale) documentation below or the (fresh) [gimme Cucumber features on Relish](http://relishapp.com/searls/gimme)
6
6
 
7
- And here's a [blog post outlining the case for gimme](http://searls.test-double.com/2011/06/03/whats-wrong-with-rubys-test-doubles/).
7
+ And here's a [blog post outlining the case for gimme](http://searls.testdouble.com/2011/06/03/whats-wrong-with-rubys-test-doubles/).
8
8
 
9
9
  ## Basics (or "What does it Gimme?" ... har.)
10
10
 
@@ -235,4 +235,4 @@ This way we can clearly specify the SUT's interaction with the Marker class whil
235
235
  ## About
236
236
 
237
237
  ### Maintainers
238
- * [Justin Searls](http://about.me/searls), [test double](http://test-double.com)
238
+ * [Justin Searls](http://about.me/searls), [test double](http://testdouble.com)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.3
1
+ 0.3.4
@@ -15,7 +15,7 @@ Feature: basic usage
15
15
  of the Chef's job without actually calling through to a real Apprentice or a real Stove.
16
16
 
17
17
  Scenario:
18
- Given we have this existing code:
18
+ Given we have this production code:
19
19
  """
20
20
  class Apprentice
21
21
  def slice(thing)
@@ -40,27 +40,60 @@ Feature: basic usage
40
40
  @slicer = slicer
41
41
  @stove = stove
42
42
  end
43
- end
44
-
45
- """
46
43
 
47
- When we want to write some tests to help us write this method:
48
- """
49
- class Chef
50
44
  def cook
51
45
  slices = @slicer.slice("tomato")
52
46
  @stove.simmer(slices)
53
47
  end
54
48
  end
49
+
50
+ """
51
+ Then this RSpec will pass:
52
+ """
53
+ describe Chef do
54
+ describe "#cook" do
55
+ Given!(:slicer) { gimme_next(Apprentice) }
56
+ Given!(:stove) { gimme_next(Stove) }
57
+ Given { give(slicer).slice("tomato") { "some slices" } }
58
+ When { subject.cook }
59
+ Then { verify(stove).simmer("some slices") }
60
+ end
61
+ end
55
62
  """
56
63
 
57
- Then we can use gimme to isolate the unit under test:
64
+ Scenario: using rspec
65
+ Given we have this production code:
58
66
  """
59
- slicer = gimme(Apprentice)
60
- stove = gimme(Stove)
61
- give(slicer).slice("tomato") { "some slices" }
67
+ class Spaceship
68
+ def initialize(thruster = Thruster.new)
69
+ @thruster = thruster
70
+ end
62
71
 
63
- Chef.new(slicer, stove).cook
72
+ def take_off
73
+ @thruster.fire
74
+ end
75
+ end
64
76
 
65
- verify(stove).simmer("some slices")
66
- """
77
+ class Thruster
78
+ def fire
79
+ raise "LOLTHRUSTER"
80
+ end
81
+ end
82
+ """
83
+ Then this RSpec will pass:
84
+ """
85
+ describe Spaceship do
86
+ context "an injected double" do
87
+ Given(:thruster) { gimme(Thruster) }
88
+ subject { Spaceship.new(thruster) }
89
+ When { subject.take_off }
90
+ Then { verify(thruster).fire }
91
+ end
92
+
93
+ context "a gimme_next double" do
94
+ Given!(:thruster) { gimme_next(Thruster) }
95
+ When { subject.take_off }
96
+ Then { verify(thruster).fire }
97
+ end
98
+ end
99
+ """
@@ -1,7 +1,7 @@
1
1
  Feature: class methods
2
2
 
3
3
  Scenario: stubbing and verifying behavior
4
- Given we have this existing code:
4
+ Given we have this production code:
5
5
  """
6
6
  class Cat
7
7
  def interact(type)
@@ -18,7 +18,7 @@ Feature: argument matchers
18
18
 
19
19
 
20
20
  Background:
21
- Given we have this existing code:
21
+ Given we have this production code:
22
22
  """
23
23
  class Mail
24
24
  attr_reader :contents
@@ -0,0 +1,47 @@
1
+ Feature: messages from test doubles
2
+
3
+ Test doubles need to output sufficient messages
4
+ (particularly on failure)
5
+
6
+ Scenario: inspect/to_s for arguments
7
+ Given we have this production code:
8
+ """
9
+ class Chair
10
+ end
11
+
12
+ class Person
13
+ def
14
+ sit_on(thing)
15
+ end
16
+ end
17
+ """
18
+ When we write a test we expect to fail:
19
+ """
20
+ chair = gimme(Chair)
21
+ person = gimme(Person)
22
+
23
+ person.sit_on() #<--oops! forgot the chair
24
+
25
+ verify(person).sit_on(chair)
26
+ """
27
+ Then we should see a failure message that includes:
28
+ """
29
+ expected Person#sit_on to have been called with arguments [<#Gimme:1 Chair>]
30
+ """
31
+ Then we should see a failure message that includes:
32
+ """
33
+ was actually called 1 times with arguments []
34
+ """
35
+
36
+ Scenario: naming mocks
37
+ Given we have this production code:
38
+ """
39
+ class Panda
40
+ end
41
+ """
42
+ Then this should work:
43
+ """
44
+ gimme(Panda).to_s.should == "<#Gimme:1 Panda>"
45
+ gimme(Panda).inspect.should == "<#Gimme:2 Panda>"
46
+ gimme("a bear thing").inspect.should == "<#Gimme:3 a bear thing>"
47
+ """
@@ -8,27 +8,33 @@ Feature: basic stubbing
8
8
  Given a new Dog test double
9
9
  When I stub <method> to return <gives>
10
10
  Then invoking <invocation> returns <returns>
11
-
11
+
12
12
  Scenarios: no-arg methods
13
13
  | method | gives | invocation | returns |
14
14
  | to_s | 'something' | to_s | 'something' |
15
+ | inspect | 'a' | inspect | 'a' |
16
+ | hash | 'b' | hash | 'b' |
17
+ | to_s | nil | to_s | nil |
15
18
  | purebred? | true | purebred? | true |
16
-
19
+
20
+
17
21
  Scenarios: one-arg methods
18
22
  | method | gives | invocation | returns |
19
23
  | holler_at(true) | :ruff | holler_at(true) | :ruff |
20
24
  | holler_at(true) | :ruff | holler_at(false) | nil |
21
25
  | holler_at(true) | :ruff | holler_at(:panda) | nil |
22
26
  | holler_at(true) | :ruff | holler_at(nil) | nil |
23
-
27
+ | eql?(:a) | :c | eql?(:a) | :c |
28
+ | ==(:b) | :d | ==(:b) | :d |
29
+
24
30
  Scenarios: two-arg methods
25
31
  | method | gives | invocation | returns |
26
32
  | walk_to(1,2) | :park | walk_to(1,2) | :park |
27
33
  | walk_to(1,2) | :park | walk_to(0.9,2) | nil |
28
34
  | walk_to(1,2) | :park | walk_to(1,2.1) | nil |
29
35
  | walk_to([1,5],[2,7]) | :park | walk_to([1],[5,2,7]) | nil |
30
-
36
+
31
37
  Scenario:
32
38
  Given a new Dog test double
33
39
  When I stub purebred? to raise StandardError
34
- Then invoking purebred? raises a StandardError
40
+ Then invoking purebred? raises a StandardError
@@ -1,5 +1,5 @@
1
1
 
2
- Given /^we have this existing code:$/ do |string|
2
+ Given /^we have this production code:$/ do |string|
3
3
  eval(string)
4
4
  end
5
5
 
@@ -7,6 +7,72 @@ When /^we want to write some tests to help us write this method:$/ do |string|
7
7
  eval(string)
8
8
  end
9
9
 
10
+ When /^we write a test we expect to fail:$/ do |string|
11
+ begin
12
+ eval(string)
13
+ rescue
14
+ @last_error = $!
15
+ end
16
+
17
+ unless @last_error
18
+ fail "\nexpected this step's code to raise error, but it did not.\n\n"
19
+ end
20
+ end
21
+
10
22
  Then /^we can use gimme to isolate the unit under test:$/ do |string|
11
23
  eval(string)
12
24
  end
25
+
26
+ Then /^this should work:$/ do |string|
27
+ eval(string)
28
+ end
29
+
30
+ Then /^we should see a failure message that includes:$/ do |string|
31
+ fail "expected a prior step to have raised error" unless @last_error
32
+ @last_error.message.should include(string)
33
+ end
34
+
35
+ Given /^this RSpec will pass:$/ do |spec_code|
36
+ run_spec_for(create_spec_file_for(spec_code))
37
+ end
38
+
39
+ def create_spec_file_for(spec_code)
40
+ require 'tempfile'
41
+ Tempfile.new('spec').tap do |file|
42
+ file.write <<-RUBY
43
+ require 'rspec'
44
+ require 'rspec/given'
45
+ require 'gimme'
46
+
47
+ #{spec_code}
48
+ RUBY
49
+ file.close
50
+ end
51
+ end
52
+
53
+ class Output
54
+ attr_reader :output
55
+ def initialize
56
+ @output = ""
57
+ end
58
+ def puts(stuff="")
59
+ @output += stuff + "\n"
60
+ end
61
+ def print(stuff="")
62
+ @output += stuff
63
+ end
64
+ end
65
+
66
+ def run_spec_for(file)
67
+ require 'rspec'
68
+ out = Output.new
69
+ unless RSpec::Core::Runner.run([file.path], out, out) == 0
70
+ fail <<-RSPEC
71
+ ***********************************
72
+ RSpec execution failed with output:
73
+ ***********************************
74
+
75
+ #{out.output}
76
+ RSPEC
77
+ end
78
+ end
@@ -0,0 +1,3 @@
1
+ After do
2
+ Gimme.reset
3
+ end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "gimme"
8
- s.version = "0.3.3"
8
+ s.version = "0.3.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Justin Searls"]
12
- s.date = "2012-05-07"
12
+ s.date = "2012-09-29"
13
13
  s.description = "gimme attempts to bring to Ruby a test double workflow akin to Mockito in Java. Major distinctions include preserving arrange-act-assert in tests, fast feedback for methods the double's real counterpart may not know how to respond to, no string/symbolic representations of methods, argument captors, and strong opinions (weakly held). "
14
14
  s.email = "searls@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -31,6 +31,7 @@ Gem::Specification.new do |s|
31
31
  "features/basics.feature",
32
32
  "features/class_methods.feature",
33
33
  "features/matchers.feature",
34
+ "features/messages.feature",
34
35
  "features/old/argument_captors.feature",
35
36
  "features/old/gimme_next.feature",
36
37
  "features/old/stub_basic.feature",
@@ -46,13 +47,16 @@ Gem::Specification.new do |s|
46
47
  "features/step_definitions/gimme_steps.rb",
47
48
  "features/support/animals.rb",
48
49
  "features/support/env.rb",
50
+ "features/support/hooks.rb",
49
51
  "gimme.gemspec",
50
52
  "lib/gimme-double.rb",
51
53
  "lib/gimme.rb",
52
54
  "lib/gimme/captor.rb",
55
+ "lib/gimme/compares_args.rb",
53
56
  "lib/gimme/dsl.rb",
54
57
  "lib/gimme/ensures_class_method_restoration.rb",
55
58
  "lib/gimme/errors.rb",
59
+ "lib/gimme/finds_stubbings.rb",
56
60
  "lib/gimme/gives.rb",
57
61
  "lib/gimme/gives_class_methods.rb",
58
62
  "lib/gimme/invocation_store.rb",
@@ -72,6 +76,7 @@ Gem::Specification.new do |s|
72
76
  "spec/gimme/errors_spec.rb",
73
77
  "spec/gimme/gives_class_methods_spec.rb",
74
78
  "spec/gimme/gives_spec.rb",
79
+ "spec/gimme/invocation_store_spec.rb",
75
80
  "spec/gimme/matchers_spec.rb",
76
81
  "spec/gimme/resolves_methods_spec.rb",
77
82
  "spec/gimme/rspec_adapter_spec.rb",
@@ -1,3 +1,4 @@
1
+ require 'gimme/reset'
1
2
  require 'gimme/test_double'
2
3
  require 'gimme/resolves_methods'
3
4
  require 'gimme/errors'
@@ -10,12 +11,13 @@ require 'gimme/verifies_class_methods'
10
11
  require 'gimme/matchers'
11
12
  require 'gimme/captor'
12
13
  require 'gimme/invokes_satisfied_stubbing'
13
- require 'gimme/reset'
14
14
  require 'gimme/dsl'
15
15
  require 'gimme/store'
16
16
  require 'gimme/stubbing_store'
17
+ require 'gimme/finds_stubbings'
17
18
  require 'gimme/invocation_store'
18
19
  require 'gimme/method_store'
20
+ require 'gimme/compares_args'
19
21
 
20
22
  require 'gimme/rspec_adapter'
21
23
 
@@ -0,0 +1,30 @@
1
+ module Gimme
2
+ class ComparesArgs
3
+
4
+ def initialize(actual, expected)
5
+ @actual = actual
6
+ @expected = expected
7
+ end
8
+
9
+ def match?
10
+ same_size? && same_args?
11
+ end
12
+
13
+ private
14
+
15
+ def same_size?
16
+ @actual.size == @expected.size
17
+ end
18
+
19
+ def same_args?
20
+ @actual.each_index.all? do |i|
21
+ @actual[i] == @expected[i] || matchers?(@expected[i], @actual[i])
22
+ end
23
+ end
24
+
25
+ def matchers?(matcher, arg)
26
+ matcher.respond_to?(:matches?) && matcher.matches?(arg)
27
+ end
28
+
29
+ end
30
+ end
@@ -0,0 +1,21 @@
1
+ module Gimme
2
+ class FindsStubbings
3
+ def initialize(stubbed_thing)
4
+ @stubbings = Gimme.stubbings.get(stubbed_thing) || {}
5
+ end
6
+
7
+ def count(method, args)
8
+ stubbings_for(method, args).size
9
+ end
10
+
11
+ def find(method, args)
12
+ stubbings_for(method, args).last
13
+ end
14
+
15
+ private
16
+ def stubbings_for(method, args)
17
+ return [] unless @stubbings[method]
18
+ @stubbings[method].find { |(stub_args, blk)| ComparesArgs.new(args, stub_args).match? } || []
19
+ end
20
+ end
21
+ end
@@ -18,7 +18,7 @@ module Gimme
18
18
  #TODO this will be redundantly overwritten
19
19
  meta_class.instance_eval do
20
20
  define_method method do |*actual_args|
21
- InvokesSatisfiedStubbing.new(Gimme.stubbings.get(cls)).invoke(method, actual_args)
21
+ InvokesSatisfiedStubbing.new(cls).invoke(method, actual_args)
22
22
  end
23
23
  end
24
24
 
@@ -1,11 +1,11 @@
1
1
  module Gimme
2
2
  class InvokesSatisfiedStubbing
3
- def initialize(stubbings)
4
- @stubbings = stubbings || {}
3
+ def initialize(stubbed_thing)
4
+ @finder = FindsStubbings.new(stubbed_thing)
5
5
  end
6
6
 
7
7
  def invoke(method, args)
8
- if @stubbings[method] && blk = find_matching_stubbing(method, args)
8
+ if blk = @finder.find(method, args)
9
9
  blk.call
10
10
  elsif method.to_s[-1,1] == '?'
11
11
  false
@@ -13,25 +13,5 @@ module Gimme
13
13
  nil
14
14
  end
15
15
  end
16
-
17
- private
18
-
19
- def find_matching_stubbing(method, args)
20
- match = nil
21
-
22
- @stubbings[method].each do |stub_args,stub_block|
23
- matching = args.size == stub_args.size
24
- args.each_index do |i|
25
- unless args[i] == stub_args[i] || (stub_args[i].respond_to?(:matches?) && stub_args[i].matches?(args[i]))
26
- matching = false
27
- break
28
- end
29
- end
30
- match = stub_block if matching
31
- end
32
-
33
- match
34
- end
35
-
36
16
  end
37
- end
17
+ end
@@ -9,26 +9,64 @@ module Gimme
9
9
  class TestDouble < BlankSlate
10
10
  attr_accessor :cls
11
11
 
12
- def initialize(cls=nil)
13
- @cls = cls
12
+ @@gimme_count = 0
13
+ Gimme.on_reset(:every) { @@gimme_count = 0 }
14
+
15
+ def initialize(cls_or_name=nil)
16
+ @name = cls_or_name
17
+ @cls = cls_or_name if cls_or_name.kind_of?(Class)
18
+ @gimme_id = (@@gimme_count += 1)
14
19
  end
15
20
 
16
21
  def method_missing(method, *args, &block)
17
22
  method = ResolvesMethods.new(self.cls, method, args).resolve(false)
18
23
  Gimme.invocations.increment(self, method, args)
19
- InvokesSatisfiedStubbing.new(Gimme.stubbings.get(self)).invoke(method, args)
24
+ InvokesSatisfiedStubbing.new(self).invoke(method, args)
25
+ end
26
+
27
+ def inspect(*args, &blk)
28
+ if stubbed?(:inspect, *args, &blk)
29
+ method_missing(:inspect, *args, &blk)
30
+ else
31
+ "<#Gimme:#{@gimme_id} #{@name}>"
32
+ end
33
+ end
34
+
35
+ def to_s(*args, &blk)
36
+ if stubbed?(:to_s, *args, &blk)
37
+ method_missing(:to_s, *args, &blk)
38
+ else
39
+ inspect
40
+ end
41
+ end
42
+
43
+ def hash(*args, &blk)
44
+ if stubbed?(:hash, *args, &blk)
45
+ method_missing(:hash, *args, &blk)
46
+ else
47
+ __id__
48
+ end
20
49
  end
21
50
 
22
- def hash
23
- __id__
51
+ def eql?(other, *args, &blk)
52
+ if stubbed?(:eql?, other, *args, &blk)
53
+ method_missing(:eql?, other, *args, &blk)
54
+ else
55
+ __id__ == other.__id__
56
+ end
24
57
  end
25
58
 
26
- def eql?(other)
27
- __id__ == other.__id__
59
+ def ==(other, *args, &blk)
60
+ if stubbed?(:==, other, *args, &blk)
61
+ method_missing(:==, other, *args, &blk)
62
+ else
63
+ eql?(other)
64
+ end
28
65
  end
29
66
 
30
- def ==(other)
31
- eql?(other)
67
+ private
68
+ def stubbed?(method, *args, &blk)
69
+ FindsStubbings.new(self).count(method, args) > 0
32
70
  end
33
71
  end
34
72
 
@@ -15,32 +15,29 @@ module Gimme
15
15
  def method_missing(sym, *args, &block)
16
16
  sym = ResolvesMethods.new(__gimme__cls,sym,args).resolve(@raises_no_method_error)
17
17
 
18
- #gosh, this loop sure looks familiar. just like another ugly loop I know. TODO.
19
- invoked = 0
20
- if Gimme.invocations.get(@double, sym)
21
- Gimme.invocations.get(@double, sym).each do |invoke_args,count|
22
- matching = args.size == invoke_args.size
23
- invoke_args.each_index do |i|
24
- unless invoke_args[i] == args[i] || (args[i].respond_to?(:matches?) && args[i].matches?(invoke_args[i]))
25
- matching = false
26
- break
27
- end
28
- end
29
- invoked += count if matching
30
- end
18
+ if @times != invocation_count(sym, args)
19
+ raise Errors::VerificationFailedError.new(message_for(sym, args))
31
20
  end
21
+ end
32
22
 
33
- if invoked != @times
34
- msg = "expected #{__gimme__cls.to_s}##{sym} to have been called with arguments #{args}"
35
- if !Gimme.invocations.get(@double, sym) || Gimme.invocations.get(@double, sym).empty?
36
- msg << "\n but was never called"
37
- else
38
- msg = Gimme.invocations.get(@double, sym).inject msg do |memo, actual|
39
- memo + "\n was actually called #{actual[1]} times with arguments #{actual[0]}"
40
- end
41
- end
23
+ private
24
+
25
+ def invocation_count(sym, args)
26
+ invocations = Gimme.invocations.get(@double, sym)
27
+ return 0 unless invocations
28
+ invocations.inject(0) do |memo, (invoke_args, count)|
29
+ ComparesArgs.new(invoke_args, args).match? ? memo + count : memo
30
+ end
31
+ end
42
32
 
43
- raise Errors::VerificationFailedError.new(msg)
33
+ def message_for(sym, args)
34
+ msg = "expected #{__gimme__cls || @double}##{sym} to have been called with arguments #{args}"
35
+ if !Gimme.invocations.get(@double, sym) || Gimme.invocations.get(@double, sym).empty?
36
+ msg << "\n but was never called"
37
+ else
38
+ msg = Gimme.invocations.get(@double, sym).inject msg do |memo, actual|
39
+ memo + "\n was actually called #{actual[1]} times with arguments #{actual[0]}"
40
+ end
44
41
  end
45
42
  end
46
43
  end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ module Gimme
4
+ describe InvocationStore do
5
+ describe "incrementing calls" do
6
+ When { 3.times { subject.increment(:some_double, :some_method, :some_args) } }
7
+ Then { subject.get(:some_double, :some_method, :some_args).should == 3 }
8
+ end
9
+ end
10
+ end
@@ -2,13 +2,13 @@ require 'spec_helper'
2
2
 
3
3
  module Gimme
4
4
  describe TestDouble do
5
- class MassiveDamage
6
- def boom
7
- :asplode
5
+ describe "#gimme_next" do
6
+ class MassiveDamage
7
+ def boom
8
+ :asplode
9
+ end
8
10
  end
9
- end
10
11
 
11
- describe "#gimme_next" do
12
12
  Given(:test_double) { gimme_next(MassiveDamage) }
13
13
  Given(:subject) { MassiveDamage.new }
14
14
 
@@ -23,5 +23,24 @@ module Gimme
23
23
  end
24
24
  end
25
25
 
26
+ describe "#gimme" do
27
+ context "of a class" do
28
+ subject { gimme(Object) }
29
+ Then { subject.should == subject }
30
+ Then { subject.eql?(subject).should == true }
31
+ Then { subject.to_s.should == "<#Gimme:1 Object>" }
32
+ Then { subject.inspect.should == "<#Gimme:1 Object>" }
33
+ Then { {}.tap {|h| h[subject] = subject }[subject].should == subject }
34
+ end
35
+
36
+ context "with a string name" do
37
+ subject { gimme("pants") }
38
+ Given { give(subject).name { "pants" } }
39
+ Then { subject.to_s.should == "<#Gimme:1 pants>" }
40
+ Then { subject.name.should == "pants" }
41
+ end
42
+
43
+ end
44
+
26
45
  end
27
46
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gimme
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-07 00:00:00.000000000 Z
12
+ date: 2012-09-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: pry
@@ -261,6 +261,7 @@ files:
261
261
  - features/basics.feature
262
262
  - features/class_methods.feature
263
263
  - features/matchers.feature
264
+ - features/messages.feature
264
265
  - features/old/argument_captors.feature
265
266
  - features/old/gimme_next.feature
266
267
  - features/old/stub_basic.feature
@@ -276,13 +277,16 @@ files:
276
277
  - features/step_definitions/gimme_steps.rb
277
278
  - features/support/animals.rb
278
279
  - features/support/env.rb
280
+ - features/support/hooks.rb
279
281
  - gimme.gemspec
280
282
  - lib/gimme-double.rb
281
283
  - lib/gimme.rb
282
284
  - lib/gimme/captor.rb
285
+ - lib/gimme/compares_args.rb
283
286
  - lib/gimme/dsl.rb
284
287
  - lib/gimme/ensures_class_method_restoration.rb
285
288
  - lib/gimme/errors.rb
289
+ - lib/gimme/finds_stubbings.rb
286
290
  - lib/gimme/gives.rb
287
291
  - lib/gimme/gives_class_methods.rb
288
292
  - lib/gimme/invocation_store.rb
@@ -302,6 +306,7 @@ files:
302
306
  - spec/gimme/errors_spec.rb
303
307
  - spec/gimme/gives_class_methods_spec.rb
304
308
  - spec/gimme/gives_spec.rb
309
+ - spec/gimme/invocation_store_spec.rb
305
310
  - spec/gimme/matchers_spec.rb
306
311
  - spec/gimme/resolves_methods_spec.rb
307
312
  - spec/gimme/rspec_adapter_spec.rb
@@ -325,9 +330,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
325
330
  - - ! '>='
326
331
  - !ruby/object:Gem::Version
327
332
  version: '0'
328
- segments:
329
- - 0
330
- hash: 2557097271096030919
331
333
  required_rubygems_version: !ruby/object:Gem::Requirement
332
334
  none: false
333
335
  requirements: