surrogate 0.5.5 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  # these all need error messages
4
4
  describe 'RSpec matchers', 'have_been_told_to(...).with { |block| }' do
5
5
 
6
- let(:dir) { Surrogate.endow(Class.new) { define(:chdir) { nil }}}
6
+ let(:dir) { Surrogate.endow(Class.new) { define(:chdir) { |dir_path| nil }}}
7
7
  let(:dir_path) { '/some/dir/path' }
8
8
 
9
9
  it 'fails if no submitted_blocks were found' do
@@ -57,7 +57,7 @@ describe 'RSpec matchers', 'have_been_told_to(...).with { |block| }' do
57
57
  end
58
58
 
59
59
 
60
- let(:file) { Surrogate.endow(Class.new) { define(:write) { true }}}
60
+ let(:file) { Surrogate.endow(Class.new) { define(:write) { |name, body| true }}}
61
61
  let(:file_name) { 'some_file_name.ext' }
62
62
  let(:file_body) { 'some file body' }
63
63
 
@@ -1,8 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe 'should/should_not have_been_initialized_with' do
4
- let(:mocked_class) { Surrogate.endow Class.new }
5
- before { mocked_class.module_eval { def initialize(*) end } } # b/c 1.9.3 will have arity issues otherwise
4
+ let(:mocked_class) { Surrogate.endow(Class.new).define(:initialize) { |*| } }
6
5
 
7
6
  it 'is the same as have_been_told_to(:initialize).with(...)' do
8
7
  mocked_class.new.should have_been_initialized_with no_args
@@ -26,11 +25,15 @@ describe 'should/should_not have_been_initialized_with' do
26
25
  failure_message_for { mocked_class.new("1").should_not have_been_initialized_with('1') }.should ==
27
26
  failure_message_for { mocked_class.new("1").should_not have_been_told_to(:initialize).with('1') }
28
27
  end
28
+
29
+ example "informs you when it wasn't defined" do
30
+ expect { Surrogate.endow(Class.new).new.should have_been_initialized_with no_args }
31
+ .to raise_error Surrogate::UnknownMethod
32
+ end
29
33
  end
30
34
 
31
35
  describe 'was/was_not initialized_with' do
32
- let(:mocked_class) { Surrogate.endow Class.new }
33
- before { mocked_class.module_eval { def initialize(*) end } } # b/c 1.9.3 will have arity issues otherwise
36
+ let(:mocked_class) { Surrogate.endow(Class.new).define(:initialize) { |*| } }
34
37
 
35
38
  it 'is the same as have_been_told_to(:initialize).with(...)' do
36
39
  mocked_class.new.was initialized_with no_args
@@ -54,4 +57,9 @@ describe 'was/was_not initialized_with' do
54
57
  failure_message_for { mocked_class.new("1").was_not initialized_with('1') }.should ==
55
58
  failure_message_for { mocked_class.new("1").was_not told_to(:initialize).with('1') }
56
59
  end
60
+
61
+ example "informs you when it wasn't defined" do
62
+ expect { Surrogate.endow(Class.new).new.was initialized_with no_args }
63
+ .to raise_error Surrogate::UnknownMethod
64
+ end
57
65
  end
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe 'integration with rspec-mocks' do
4
4
 
5
- let(:mp3) { Surrogate.endow(Class.new).define(:play) { }.new }
5
+ let(:mp3) { Surrogate.endow(Class.new).define(:play) { |artist| }.new }
6
6
 
7
7
  it 'knows that rspec-mocks is loaded' do
8
8
  Surrogate::RSpec.rspec_mocks_loaded?.should equal true
@@ -102,9 +102,9 @@ describe 'substitute_for' do
102
102
  surrogate = Surrogate.endow(Class.new) { define :surrogate_class_meth }.define :surrogate_instance_meth
103
103
  klass = Class.new { def self.api_class_meth()end; def api_instance_meth() end }
104
104
  expect { surrogate.should substitute_for klass }.to \
105
- raise_error(RSpec::Expectations::ExpectationNotMetError, "Was not substitutable because surrogate has extra instance methods: [:surrogate_instance_meth], "\
106
- "has extra class methods: [:surrogate_class_meth], "\
107
- "is missing instance methods: [:api_instance_meth], "\
105
+ raise_error(RSpec::Expectations::ExpectationNotMetError, "Was not substitutable because surrogate has extra instance methods: [:surrogate_instance_meth]\n"\
106
+ "has extra class methods: [:surrogate_class_meth]\n"\
107
+ "is missing instance methods: [:api_instance_meth]\n"\
108
108
  "is missing class methods: [:api_class_meth]")
109
109
  end
110
110
 
@@ -145,7 +145,93 @@ describe 'substitute_for' do
145
145
  klass = Class.new { def self.extra_method()end; def extra_method()end }
146
146
  expect { Surrogate.endow(Class.new) { define :class_meth }.define(:instance_meth).should substitute_for klass, subset: true }.to \
147
147
  raise_error(RSpec::Expectations::ExpectationNotMetError,
148
- "Was not substitutable because surrogate has extra instance methods: [:instance_meth], has extra class methods: [:class_meth]")
148
+ "Was not substitutable because surrogate has extra instance methods: [:instance_meth]\nhas extra class methods: [:class_meth]")
149
+ end
150
+ end
151
+ end
152
+
153
+
154
+
155
+ context 'type substitutability -- specified with types: true/false option (DEFAULTS TO TRUE)' do
156
+ it 'is turned on by default' do
157
+ klass = Class.new { def instance_meth(a) end }
158
+ surrogate = Surrogate.endow(Class.new).define(:instance_meth) { }
159
+ surrogate.should_not substitute_for klass
160
+ surrogate.should substitute_for klass, types: false
161
+ end
162
+
163
+ it 'disregards when argument names differ' do
164
+ klass = Class.new { def instance_meth(a) end }
165
+ surrogate = Surrogate.endow(Class.new).define(:instance_meth) { |b| }
166
+ surrogate.should substitute_for klass, names: false, types: true
167
+ end
168
+
169
+ it 'disregards when surrogate has no body for an api method' do
170
+ klass = Class.new { def instance_meth(a) end }
171
+ surrogate = Surrogate.endow(Class.new).define :instance_meth
172
+ surrogate.should substitute_for klass, types: true
173
+ end
174
+
175
+ it 'disregards when real object has natively implemented methods that cannot be reflected on' do
176
+ Array.method(:[]).parameters.should == [[:rest]] # make sure Array signatures aren't changing across versions or something
177
+ Array.instance_method(:insert).parameters.should == [[:rest]]
178
+ surrogate = Surrogate.endow(Class.new) { define(:[]) { |a,b,c| } }.define(:insert) { |a,b,c| }
179
+ surrogate.should substitute_for Array, subset: true, types: true
180
+ end
181
+
182
+ context 'returns true if argument types match exactly. Examples:' do
183
+ example 'true when exact match' do
184
+ klass = Class.new { def instance_meth(a, b=1, *c, d, &e) end }
185
+ surrogate = Surrogate.endow(Class.new).define(:instance_meth) { |a, b=1, *c, d, &e| }
186
+ surrogate.should substitute_for klass, types: true
187
+ end
188
+
189
+ example 'false when missing block' do
190
+ klass = Class.new { def instance_meth(a, b=1, *c, d) end }
191
+ surrogate = Surrogate.endow(Class.new).define(:instance_meth) { |a, b=1, *c, d, &e| }
192
+ surrogate.should_not substitute_for klass, types: true
193
+
194
+ klass = Class.new { def instance_meth(a, b=1, *c, d, &e) end }
195
+ surrogate = Surrogate.endow(Class.new).define(:instance_meth) { |a, b=1, *c, d| }
196
+ surrogate.should_not substitute_for klass, types: true
197
+ end
198
+
199
+ example 'false when missing splatted args' do
200
+ klass = Class.new { def instance_meth(a, b=1, d, &e) end }
201
+ surrogate = Surrogate.endow(Class.new).define(:instance_meth) { |a, b=1, *c, d, &e| }
202
+ surrogate.should_not substitute_for klass, types: true
203
+
204
+ klass = Class.new { def instance_meth(a, b=1, *c, d, &e) end }
205
+ surrogate = Surrogate.endow(Class.new).define(:instance_meth) { |a, b=1, d, &e| }
206
+ surrogate.should_not substitute_for klass
207
+ end
208
+
209
+ example 'false when missing optional args' do
210
+ klass = Class.new { def instance_meth(a, *c, d, &e) end }
211
+ surrogate = Surrogate.endow(Class.new).define(:instance_meth) { |a, b=1, *c, d, &e| }
212
+ surrogate.should_not substitute_for klass
213
+
214
+ klass = Class.new { def instance_meth(a, b=1, *c, d, &e) end }
215
+ surrogate = Surrogate.endow(Class.new).define(:instance_meth) { |a, *c, d, &e| }
216
+ surrogate.should_not substitute_for klass, types: true
217
+ end
218
+
219
+ example 'false when missing required args' do
220
+ klass = Class.new { def instance_meth(b=1, *c, d, &e) end }
221
+ surrogate = Surrogate.endow(Class.new).define(:instance_meth) { |a, b=1, *c, d, &e| }
222
+ surrogate.should_not substitute_for klass, types: true
223
+
224
+ klass = Class.new { def instance_meth(a, b=1, *c, d, &e) end }
225
+ surrogate = Surrogate.endow(Class.new).define(:instance_meth) { |b=1, *c, d, &e| }
226
+ surrogate.should_not substitute_for klass, types: true
227
+
228
+ klass = Class.new { def instance_meth(a, b=1, *c, &e) end }
229
+ surrogate = Surrogate.endow(Class.new).define(:instance_meth) { |a, b=1, *c, d, &e| }
230
+ surrogate.should_not substitute_for klass, types: true
231
+
232
+ klass = Class.new { def instance_meth(a, b=1, *c, d, &e) end }
233
+ surrogate = Surrogate.endow(Class.new).define(:instance_meth) { |a, b=1, *c, &e| }
234
+ surrogate.should_not substitute_for klass, types: true
149
235
  end
150
236
  end
151
237
  end
@@ -3,33 +3,47 @@ require 'spec_helper'
3
3
  describe Surrogate::ApiComparer do
4
4
 
5
5
  def set_assertion(set, expectations)
6
- expectations[:include].each { |meth| set.should include meth }
7
- expectations[:exclude].each { |meth| set.should_not include meth }
6
+ Array(expectations[:include]).each { |meth| set.should include meth }
7
+ Array(expectations[:exclude]).each { |meth| set.should_not include meth }
8
8
  end
9
9
 
10
+ context 'when identifying types' do
11
+ it 'uses :req, :opt, :rest, and :block' do
12
+ surrogate = Surrogate.endow(Class.new).define(:to_s) { |a, b, c, d=1, e=2, *f, g, &h| }
13
+ comparer = described_class.new(surrogate, Class.new)
14
+ comparer.compare[:instance][:types][:to_s][:surrogate].should ==
15
+ [:req, :req, :req, :opt, :opt, :rest, :req, :block]
16
+ end
17
+ end
10
18
 
11
19
  describe 'its knowlege about the surrogate' do
12
20
 
13
21
  let :surrogate do
14
22
  parent = Class.new do
15
23
  def inherited_instance_meth()end
24
+ def inherited_instance_meth_with_signature(a1, b1=1, *c1, d1, &e1)end
16
25
  def self.inherited_class_meth()end
26
+ def self.inherited_class_meth_with_signature(a2, b2=1, *c2, d2, &e2)end
17
27
  end
18
28
 
19
29
  Class.new parent do
20
30
  Surrogate.endow self do
21
31
  define :api_class_meth
32
+ define(:api_class_meth_with_signature) { |a3, b3=1, *c3, d3, &e3| }
22
33
  def class_meth()end
34
+ def self.class_meth_with_signature(a4, b4=1, *c4, d4, &e4)end
23
35
  end
24
36
  define :api_instance_meth
37
+ define(:api_instance_meth_with_signature) { |a5, b5=1, *c5, d5, &e5| }
25
38
  def instance_meth()end
39
+ def instance_meth_with_signature(a6, b6=1, *c6, d6, &e6)end
26
40
  end
27
41
  end
28
42
 
29
43
  let(:comparer) { described_class.new surrogate, Class.new }
30
44
 
31
45
  it "knows the surrogate's instance level api methods" do
32
- comparer.surrogate_methods[:instance][:api].should == Set[:api_instance_meth]
46
+ comparer.surrogate_methods[:instance][:api].should == Set[:api_instance_meth, :api_instance_meth_with_signature]
33
47
  end
34
48
 
35
49
  it "knows the surrogate's inherited instance methods" do
@@ -45,7 +59,7 @@ describe Surrogate::ApiComparer do
45
59
  end
46
60
 
47
61
  it "knows the surrogate's class level api methods" do
48
- comparer.surrogate_methods[:class][:api].should == Set[:api_class_meth]
62
+ comparer.surrogate_methods[:class][:api].should == Set[:api_class_meth, :api_class_meth_with_signature]
49
63
  end
50
64
 
51
65
  it "knows the surrogate's inherited class methods" do
@@ -134,5 +148,107 @@ describe Surrogate::ApiComparer do
134
148
  it 'tells me about api class methods on surrogate that are not on actual' do
135
149
  comparer.compare[:class][:not_on_actual].should == Set[:class_not_on_actual]
136
150
  end
151
+
152
+
153
+ context "it tells me the difference when types don't match. Examples:" do
154
+ example 'nothing when arguments are the same' do
155
+ klass = Class.new do
156
+ def self.class_meth1(a1, b1=1, *c1, &d1)end
157
+ def self.class_meth2(a2, b2=1, *c2, &d2)end
158
+ def self.class_meth3(a3, b3=1, *c3, &d3)end
159
+ def instance_meth1(e1, f1=1, *c1, &d1)end
160
+ def instance_meth2(e2, f2=1, *c2, &d2)end
161
+ def instance_meth3(e3, f3=1, *c3, &d3)end
162
+ end
163
+
164
+ parent = Class.new do
165
+ def self.class_meth1(a1, b1=1, *c1, &d1)end
166
+ def instance_meth1(e1, f1=1, *c1, &d1)end
167
+ end
168
+
169
+ surrogate = Class.new parent do
170
+ Surrogate.endow self do
171
+ define(:class_meth2) { |a2, b2=1, *c2, &d2| }
172
+ end
173
+ def self.class_meth3(a3, b3=1, *c3, &d3)end
174
+ define(:instance_meth2) { |e2, f2=1, *c2, &d2| }
175
+ def instance_meth3(e3, f3=1, *c3, &d3)end
176
+ end
177
+
178
+ comparer = described_class.new surrogate, klass
179
+ comparer.compare[:instance][:types].should == {}
180
+ comparer.compare[:class][:types].should == {}
181
+ end
182
+
183
+ it 'ignores methods that are not on both the surrogate and the actual' do
184
+ klass = Class.new do
185
+ def self.class_meth1(a)end
186
+ def instance_meth1(a, b)end
187
+ end
188
+ surrogate = Class.new do
189
+ Surrogate.endow self do
190
+ define(:class_meth2) { |a, b, c| }
191
+ end
192
+ define(:instance_meth2) { |a, b, c, d| }
193
+ end
194
+
195
+ described_class.new(surrogate, klass).compare
196
+ comparer.compare[:class][:types].should == {}
197
+ comparer.compare[:instance][:types].should == {}
198
+ end
199
+
200
+ it 'ignores methods with no default block' do
201
+ klass = Class.new { def instance_meth(a)end }
202
+ surrogate = Surrogate.endow(Class.new).define(:instance_meth)
203
+ described_class.new(surrogate, klass).compare
204
+ comparer.compare[:class][:types].should == {}
205
+ comparer.compare[:instance][:types].should == {}
206
+ end
207
+
208
+ it 'tells me about class methods with different types' do
209
+ klass = Class.new do
210
+ def self.class_meth1(a, b=1, *c, &d)end
211
+ def self.class_meth2(a, b=1, *c, &d)end
212
+ end
213
+ parent = Class.new { def self.class_meth1(b=1, *c, &d)end }
214
+ surrogate = Class.new parent do
215
+ Surrogate.endow self do
216
+ define(:class_meth2) { |a, *c, &d| }
217
+ end
218
+ end
219
+
220
+ comparer = described_class.new surrogate, klass
221
+ comparer.compare[:class][:types].should == {
222
+ class_meth1: { actual: [:req, :opt, :rest, :block],
223
+ surrogate: [ :opt, :rest, :block],
224
+ },
225
+ class_meth2: { actual: [:req, :opt, :rest, :block],
226
+ surrogate: [:req, :rest, :block],
227
+ },
228
+ }
229
+ end
230
+
231
+ it 'tells me about class methods with different types' do
232
+ klass = Class.new do
233
+ def instance_meth1(a, b=1, *c, &d)end
234
+ def instance_meth2(a, b=1, *c, &d)end
235
+ end
236
+ parent = Class.new { def instance_meth1(b=1, *c, &d)end }
237
+ surrogate = Class.new parent do
238
+ Surrogate.endow self
239
+ define(:instance_meth2) { |a, *c, &d| }
240
+ end
241
+
242
+ comparer = described_class.new surrogate, klass
243
+ comparer.compare[:instance][:types].should == {
244
+ instance_meth1: { actual: [:req, :opt, :rest, :block],
245
+ surrogate: [ :opt, :rest, :block],
246
+ },
247
+ instance_meth2: { actual: [:req, :opt, :rest, :block],
248
+ surrogate: [:req, :rest, :block],
249
+ },
250
+ }
251
+ end
252
+ end
137
253
  end
138
254
  end
@@ -0,0 +1,50 @@
1
+ require 'surrogate/argument_errorizer'
2
+
3
+ describe Surrogate::ArgumentErrorizer do
4
+ let(:meth_name) { :some_name }
5
+
6
+ describe 'match!' do
7
+ it 'raises an argument error if the arguments do not match' do
8
+ expect { described_class.new(meth_name, ->(){}).match! 1 }.to raise_error ArgumentError
9
+ end
10
+
11
+ it 'does not raise any errors if the arguments do match' do
12
+ described_class.new(meth_name, ->(){}).match!
13
+ end
14
+
15
+ it 'does not execute the actual lambda' do
16
+ described_class.new(meth_name, ->{ raise }).match!
17
+ end
18
+
19
+ it 'cares about required, optional, and block arguments' do
20
+ errorizer = described_class.new meth_name, ->(a, b=1, c, &d){}
21
+ expect { errorizer.match! }.to raise_error ArgumentError
22
+ expect { errorizer.match! 1 }.to raise_error ArgumentError
23
+ errorizer.match! 1, 2
24
+ errorizer.match! 1, 2, 3
25
+ expect { errorizer.match! 1, 2, 3, 4 }.to raise_error ArgumentError
26
+
27
+ errorizer = described_class.new meth_name, ->(a, b=1, *c, d, &e){}
28
+ errorizer.match! *1..10
29
+ end
30
+
31
+ it 'does not care whether the block was provided' do
32
+ described_class.new(meth_name, ->(&b){}).match!
33
+ end
34
+ end
35
+
36
+ def assert_message(the_lambda, args, message)
37
+ expect { described_class.new(meth_name, the_lambda).match! *args }
38
+ .to raise_error ArgumentError, message
39
+ end
40
+
41
+ it 'has useful error messages' do
42
+ assert_message ->(){}, [1], "wrong number of arguments (1 for 0) in #{meth_name}()"
43
+ assert_message ->(a){}, [], "wrong number of arguments (0 for 1) in #{meth_name}(a)"
44
+ assert_message ->(a){}, [], "wrong number of arguments (0 for 1) in #{meth_name}(a)"
45
+ assert_message ->(a=1){}, [1,2], "wrong number of arguments (2 for 1) in #{meth_name}(a='?')"
46
+ assert_message ->(a, *b){}, [], "wrong number of arguments (0 for 1) in #{meth_name}(a, *b)"
47
+ assert_message ->(a, *b, &c){}, [], "wrong number of arguments (0 for 1) in #{meth_name}(a, *b, &c)"
48
+ assert_message ->(a, b, c=1, d=1, *e, f, &g){}, [], "wrong number of arguments (0 for 3) in #{meth_name}(a, b, c='?', d='?', *e, f, &g)"
49
+ end
50
+ end
@@ -18,8 +18,6 @@ Gem::Specification.new do |s|
18
18
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
19
  s.require_paths = ["lib"]
20
20
 
21
- s.add_runtime_dependency 'bindable_block', '= 0.0.5.1'
22
-
23
21
  s.add_development_dependency "rake"
24
22
  s.add_development_dependency "rspec", "~> 2.4"
25
23
  s.add_development_dependency "mountain_berry_fields", "~> 1.0.3"
data/todo ADDED
@@ -0,0 +1,44 @@
1
+ Urgent (things I want to do immediately, formatted as the git commits I will use)
2
+ ---------------------------------------------------------------------------------
3
+
4
+ * be smart enough to handle method missing
5
+ * still check method args, even when value is overridden
6
+ * tests around the error messages of types
7
+ * Substitutability can check argument names
8
+ * substitute_for should not depend on rspec-expectations
9
+ * Error messages on blocks are actually useful
10
+ * Defined methods params must match arguments (BREAKING CHANGE)
11
+ * Update the readme (new syntax, and move the script into the changelog)
12
+ * error message
13
+ "Doesn't know initialize, only knows " <-- fix that shit
14
+ * blocks assertions can specify raising
15
+
16
+ TODO (next up after urgent, these will happen whenever I get around to it)
17
+ --------------------------------------------------------------------------
18
+
19
+ * Eventually it should be smart enough to not ignore natively implemented code with a [[:req]] argument
20
+ * Remove dependency on all of RSpec and only depend on rspec-core, then have AC tests for the other shit
21
+ * Add a better explanation for motivations
22
+ * Figure out whether I'm supposed to be using clone or dup for the object -.^ (looks like there may also be an `initialize_copy` method I can take advantage of instead of crazy stupid shit I'm doing now)
23
+ * don't blow up when delegating to the Object#initialize with args (do I still want this, or do I want to force arity matching (and maybe even variable name matching)?)
24
+ * config: rspec_mocks loaded, whether unprepared blocks should raise or just return nil
25
+ * extract surrogate/rspec into its own gem
26
+ * support subset-substitutabilty not being able to touch real methods (e.g. #respond_to?)
27
+ * make substitutability matcher go either way
28
+ * make substitutability matcher not care whether either are surrogates
29
+ * Add support for operators
30
+
31
+
32
+ Future Features (Things that probably should eventually happen, but not anytime soon unless I get really inspired to work on this shit)
33
+ ---------------------------------------------------------------------------------------------------------------------------------------
34
+
35
+ * Can endow a class multiple times, results aggregate instead of override
36
+ * figure out how to talk about callbacks like #on_success
37
+ * have some sort of reinitialization that can hook into setup/teardown steps of test suite
38
+ * Support arity checking as part of substitutability
39
+ * Ability to disassociate the method name from the test (e.g. you shouldn't need to change a test just because you change a name)
40
+ * ability to declare normal methods as being part of the API
41
+ * ability to declare a define that uses the overridden method as the body, but can still act like an api method
42
+ * assertions for order of invocations & methods
43
+ * class generator? (supports a top-down style of development for when you write your mocks before you write your implementations)
44
+ * deal with hard dependency on rspec-mocks
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: surrogate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.5
4
+ version: 0.6.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,22 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-20 00:00:00.000000000 Z
12
+ date: 2012-09-23 00:00:00.000000000 Z
13
13
  dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: bindable_block
16
- requirement: &70355417643520 !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - =
20
- - !ruby/object:Gem::Version
21
- version: 0.0.5.1
22
- type: :runtime
23
- prerelease: false
24
- version_requirements: *70355417643520
25
14
  - !ruby/object:Gem::Dependency
26
15
  name: rake
27
- requirement: &70355417643100 !ruby/object:Gem::Requirement
16
+ requirement: &70261539914140 !ruby/object:Gem::Requirement
28
17
  none: false
29
18
  requirements:
30
19
  - - ! '>='
@@ -32,10 +21,10 @@ dependencies:
32
21
  version: '0'
33
22
  type: :development
34
23
  prerelease: false
35
- version_requirements: *70355417643100
24
+ version_requirements: *70261539914140
36
25
  - !ruby/object:Gem::Dependency
37
26
  name: rspec
38
- requirement: &70355417642540 !ruby/object:Gem::Requirement
27
+ requirement: &70261539929980 !ruby/object:Gem::Requirement
39
28
  none: false
40
29
  requirements:
41
30
  - - ~>
@@ -43,10 +32,10 @@ dependencies:
43
32
  version: '2.4'
44
33
  type: :development
45
34
  prerelease: false
46
- version_requirements: *70355417642540
35
+ version_requirements: *70261539929980
47
36
  - !ruby/object:Gem::Dependency
48
37
  name: mountain_berry_fields
49
- requirement: &70355417642020 !ruby/object:Gem::Requirement
38
+ requirement: &70261539929360 !ruby/object:Gem::Requirement
50
39
  none: false
51
40
  requirements:
52
41
  - - ~>
@@ -54,10 +43,10 @@ dependencies:
54
43
  version: 1.0.3
55
44
  type: :development
56
45
  prerelease: false
57
- version_requirements: *70355417642020
46
+ version_requirements: *70261539929360
58
47
  - !ruby/object:Gem::Dependency
59
48
  name: mountain_berry_fields-rspec
60
- requirement: &70355417641540 !ruby/object:Gem::Requirement
49
+ requirement: &70261539928860 !ruby/object:Gem::Requirement
61
50
  none: false
62
51
  requirements:
63
52
  - - ~>
@@ -65,10 +54,10 @@ dependencies:
65
54
  version: 1.0.3
66
55
  type: :development
67
56
  prerelease: false
68
- version_requirements: *70355417641540
57
+ version_requirements: *70261539928860
69
58
  - !ruby/object:Gem::Dependency
70
59
  name: mountain_berry_fields-magic_comments
71
- requirement: &70355417641080 !ruby/object:Gem::Requirement
60
+ requirement: &70261539928300 !ruby/object:Gem::Requirement
72
61
  none: false
73
62
  requirements:
74
63
  - - ~>
@@ -76,7 +65,7 @@ dependencies:
76
65
  version: 1.0.1
77
66
  type: :development
78
67
  prerelease: false
79
- version_requirements: *70355417641080
68
+ version_requirements: *70261539928300
80
69
  description: Framework to aid in handrolling mock/spy objects.
81
70
  email:
82
71
  - josh.cheek@gmail.com
@@ -87,6 +76,7 @@ files:
87
76
  - .gitignore
88
77
  - .rvmrc
89
78
  - .travis.yml
79
+ - Changelog.md
90
80
  - Rakefile
91
81
  - Readme.md
92
82
  - Readme.md.mountain_berry_fields
@@ -95,11 +85,13 @@ files:
95
85
  - gemfiles/rspec_mocks_2.2
96
86
  - lib/surrogate.rb
97
87
  - lib/surrogate/api_comparer.rb
88
+ - lib/surrogate/argument_errorizer.rb
98
89
  - lib/surrogate/endower.rb
99
90
  - lib/surrogate/hatchery.rb
100
91
  - lib/surrogate/hatchling.rb
101
92
  - lib/surrogate/invocation.rb
102
- - lib/surrogate/options.rb
93
+ - lib/surrogate/method_definition.rb
94
+ - lib/surrogate/porc_reflector.rb
103
95
  - lib/surrogate/rspec.rb
104
96
  - lib/surrogate/rspec/abstract_failure_message.rb
105
97
  - lib/surrogate/rspec/initialization_matcher.rb
@@ -110,6 +102,8 @@ files:
110
102
  - lib/surrogate/rspec/times_predicate.rb
111
103
  - lib/surrogate/rspec/verb_matcher.rb
112
104
  - lib/surrogate/rspec/with_filter.rb
105
+ - lib/surrogate/surrogate_class_reflector.rb
106
+ - lib/surrogate/surrogate_instance_reflector.rb
113
107
  - lib/surrogate/values.rb
114
108
  - lib/surrogate/version.rb
115
109
  - spec/acceptance_spec.rb
@@ -125,7 +119,9 @@ files:
125
119
  - spec/rspec/verb_matcher_spec.rb
126
120
  - spec/spec_helper.rb
127
121
  - spec/unit/api_comparer_spec.rb
122
+ - spec/unit/argument_errorizer_spec.rb
128
123
  - surrogate.gemspec
124
+ - todo
129
125
  homepage: https://github.com/JoshCheek/surrogate
130
126
  licenses: []
131
127
  post_install_message:
@@ -164,4 +160,5 @@ test_files:
164
160
  - spec/rspec/verb_matcher_spec.rb
165
161
  - spec/spec_helper.rb
166
162
  - spec/unit/api_comparer_spec.rb
163
+ - spec/unit/argument_errorizer_spec.rb
167
164
  has_rdoc: