spy 0.3.0 → 0.3.1

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.
data/CHANGELOG.md ADDED
@@ -0,0 +1,65 @@
1
+ ## Spy 0.3.1 (March 13, 2013) ##
2
+
3
+ * Fix Agency recruiting of mock
4
+
5
+ ## Spy 0.3.0 (March 12, 2013) ##
6
+
7
+ * Added Mock
8
+
9
+ Example:
10
+
11
+ book = Spy.mock(Book, author: "John Steinbeck")
12
+
13
+ * Deprecate Double and use Mock instead
14
+ * Fix Exceptions so they can have custom messages
15
+
16
+ ## Spy 0.2.5 (March 9, 2013) ##
17
+
18
+ * Add custom exception classes
19
+
20
+ ## Spy 0.2.4 (February 28, 2013) ##
21
+
22
+ * Fix airty checking of Spy::Subroutine#and_return
23
+
24
+ ## Spy 0.2.3 (February 28, 2013) ##
25
+
26
+ * Fix marshal dumping
27
+ * Add Docs
28
+ * Make error messages clearer
29
+
30
+ ## Spy 0.2.2 (February 26, 2013) ##
31
+
32
+ * Make compatible with ruby 2.0.0
33
+
34
+ ## Spy 0.2.1 (February 25, 2013) ##
35
+
36
+ * fix missing CallLog
37
+
38
+ ## Spy 0.2.0 (February 22, 2013) ##
39
+
40
+ * Add CallLog
41
+ * Fix constant stubbing
42
+ * Ensure spy is logging all calls even if an error is raised
43
+ * add Spy::Subroutine#called_with
44
+
45
+ ## Spy 0.1.0 (February 20, 2013) ##
46
+
47
+ * add Spy#and_raise
48
+ * add Spy#and_throw
49
+ * add Spy#and_yield
50
+ * add Constant stubbing
51
+ * fix private method lookups
52
+
53
+ ## Spy 0.0.1 (February 5, 2013) ##
54
+
55
+ * Stub objects
56
+
57
+ Example:
58
+
59
+ Spy.on(book, :title).and_return("East of Eden")
60
+
61
+ * Create Doubles
62
+
63
+ Example:
64
+
65
+ Spy.double("Double Name", stub: :method)
data/README.md CHANGED
@@ -97,8 +97,8 @@ Book.new(title: "The Big Cheese").title #=> "Cannery Row"
97
97
  ### Test Mocks
98
98
 
99
99
  A test mock is an object that quacks like a given class but will raise an error
100
- when the method is not stubbed. You can spy on the classes and call through to
101
- the original method.
100
+ when the method is not stubbed. Spy will not let you stub a method that wasn't
101
+ on the mocked class. You can spy on the classes and call through to the original method.
102
102
 
103
103
  ```ruby
104
104
  book = Spy.mock(Book)
data/lib/spy/agency.rb CHANGED
@@ -22,11 +22,8 @@ module Spy
22
22
  # @return [spy]
23
23
  def recruit(spy)
24
24
  raise AlreadyStubbedError if @spies[spy.object_id]
25
- if spy.is_a? Base
26
- @spies[spy.object_id] = spy
27
- else
28
- raise ArgumentError, "#{spy}, was not a spy"
29
- end
25
+ check_spy!(spy)
26
+ @spies[spy.object_id] = spy
30
27
  end
31
28
 
32
29
  # remove spy from the records
@@ -34,22 +31,15 @@ module Spy
34
31
  # @return [spy]
35
32
  def retire(spy)
36
33
  raise NoSpyError unless @spies[spy.object_id]
37
- if spy.is_a? Base
38
- @spies.delete(spy.object_id)
39
- else
40
- raise ArgumentError, "#{spy}, was not a spy"
41
- end
34
+ @spies.delete(spy.object_id)
42
35
  end
43
36
 
44
37
  # checks to see if a spy is hooked
45
38
  # @param spy [Subroutine, Constant, Double]
46
39
  # @return [Boolean]
47
40
  def active?(spy)
48
- if spy.is_a? Base
49
- @spies.has_key?(spy.object_id)
50
- else
51
- raise ArgumentError, "#{spy}, was not a spy"
52
- end
41
+ check_spy!(spy)
42
+ @spies.has_key?(spy.object_id)
53
43
  end
54
44
 
55
45
  # unhooks all spies and clears records
@@ -74,5 +64,11 @@ module Spy
74
64
  def spies
75
65
  @spies.values
76
66
  end
67
+
68
+ private
69
+
70
+ def check_spy!(spy)
71
+ raise ArgumentError, "#{spy}, was not a spy" unless spy.is_a?(Base) || spy.respond_to?(:_mock_class, true)
72
+ end
77
73
  end
78
74
  end
data/lib/spy/mock.rb CHANGED
@@ -8,7 +8,8 @@ module Spy
8
8
  CLASSES_NOT_TO_OVERRIDE = [Enumerable, Numeric, Comparable, Class, Module, Object]
9
9
  METHODS_NOT_TO_OVERRIDE = [:initialize, :method]
10
10
 
11
- def initialize
11
+ def initialize(&mock_method)
12
+ Agency.instance.recruit(self)
12
13
  end
13
14
 
14
15
  def is_a?(other)
@@ -24,7 +25,7 @@ module Spy
24
25
  def method(method_name)
25
26
  new_method = super
26
27
  if new_method.parameters.size >= 1 &&
27
- new_method.parameters.last.last == :never_hooked
28
+ new_method.parameters.last.last == :mock_method
28
29
 
29
30
  begin
30
31
  _mock_class.send(:remove_method, method_name)
@@ -52,7 +53,6 @@ module Spy
52
53
 
53
54
  include Mock
54
55
  end
55
- Agency.instance.recruit(mock_klass)
56
56
  mock_klass
57
57
  end
58
58
 
@@ -114,7 +114,7 @@ module Spy
114
114
  "*#{name}"
115
115
  end
116
116
  end.compact
117
- args << "&never_hooked"
117
+ args << "&mock_method"
118
118
  args.join(",")
119
119
  end
120
120
  end
data/lib/spy/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Spy
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
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: 2013-03-12 00:00:00.000000000 Z
12
+ date: 2013-03-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: pry
@@ -118,6 +118,7 @@ files:
118
118
  - .gitignore
119
119
  - .travis.yml
120
120
  - .yardopts
121
+ - CHANGELOG.md
121
122
  - Gemfile
122
123
  - LICENSE.txt
123
124
  - README.md