grift 1.0.1 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/Gemfile.lock +1 -1
- data/README.md +8 -0
- data/lib/grift/mock_method.rb +18 -7
- data/lib/grift/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 98c5113978ecfca383496652f50e2fee8b820bdf0f9dfd94e01649b567c44ee8
|
4
|
+
data.tar.gz: 16d205bacdddd4018ef18654b09c7f9b7d283956a382875f6f4dbae58f1244dd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 75ca213c47eabb2e1cf4ee8790949e041ff383193a844f34f1ab794486cd3afdf633e0206f367e7b74d358276bb43f48b7b0dcf8ae8fbb124977d42c34df1bb7
|
7
|
+
data.tar.gz: 91e88879f44d036403d94808ab853007a66f10e60dad5569e38ace29f1969abc2abc24fdb87b6f9f5db61c98a8efdd34c6d4cfcb4f063fc147e9a1bc80ece52c
|
data/CHANGELOG.md
CHANGED
@@ -8,6 +8,14 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
|
8
8
|
|
9
9
|
N/A
|
10
10
|
|
11
|
+
## [1.0.2](https://github.com/clarkedb/grift/releases/tag/v1.0.2) - 2021-11-11
|
12
|
+
|
13
|
+
This version fixes a bug that prevented the mocking of methods defined by a class's super class.
|
14
|
+
|
15
|
+
### Fixed
|
16
|
+
|
17
|
+
* Allow mocks of inherited methods
|
18
|
+
|
11
19
|
## [1.0.1](https://github.com/clarkedb/grift/releases/tag/v1.0.1) - 2021-11-10
|
12
20
|
|
13
21
|
This version fixes a bug that prevented most mocking features in Grift from functioning as expected.
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -36,6 +36,14 @@ class Minitest::Test
|
|
36
36
|
end
|
37
37
|
```
|
38
38
|
|
39
|
+
Or for Ruby on Rails:
|
40
|
+
|
41
|
+
```ruby
|
42
|
+
class ActiveSupport::TestCase
|
43
|
+
include Grift::MinitestPlugin
|
44
|
+
end
|
45
|
+
```
|
46
|
+
|
39
47
|
## Usage
|
40
48
|
|
41
49
|
For complete usage guide, see the [docs](https://clarkedb.github.io/grift/).
|
data/lib/grift/mock_method.rb
CHANGED
@@ -29,7 +29,7 @@ module Grift
|
|
29
29
|
#
|
30
30
|
def initialize(klass, method_name, watch: true)
|
31
31
|
if Grift.restricted_method?(klass, method_name)
|
32
|
-
raise(Grift::Error, "
|
32
|
+
raise(Grift::Error, "Cannot mock restricted method #{method_name} for class #{klass}")
|
33
33
|
end
|
34
34
|
|
35
35
|
@klass = klass
|
@@ -41,8 +41,8 @@ module Grift
|
|
41
41
|
# class methods are really instance methods of the singleton class
|
42
42
|
@class_method = klass.singleton_class.instance_methods(true).include?(method_name)
|
43
43
|
|
44
|
-
unless class_instance.instance_methods(true).include?(method_name)
|
45
|
-
raise(Grift::Error, "
|
44
|
+
unless @class_method || class_instance.instance_methods(true).include?(method_name)
|
45
|
+
raise(Grift::Error, "Cannot mock unknown method #{method_name} for class #{klass}")
|
46
46
|
end
|
47
47
|
|
48
48
|
if class_instance.instance_methods.include?(@cache_method_name)
|
@@ -137,7 +137,7 @@ module Grift
|
|
137
137
|
premock_setup
|
138
138
|
mock_executions = @mock_executions # required to access inside class instance block
|
139
139
|
|
140
|
-
class_instance.remove_method(@method_name)
|
140
|
+
class_instance.remove_method(@method_name) if class_instance.instance_methods(false).include?(@method_name)
|
141
141
|
class_instance.define_method @method_name do |*args|
|
142
142
|
return_value = block.call(*args)
|
143
143
|
|
@@ -168,7 +168,7 @@ module Grift
|
|
168
168
|
premock_setup
|
169
169
|
mock_executions = @mock_executions # required to access inside class instance block
|
170
170
|
|
171
|
-
class_instance.remove_method(@method_name)
|
171
|
+
class_instance.remove_method(@method_name) if method_defined?
|
172
172
|
class_instance.define_method @method_name do |*args|
|
173
173
|
# record the args passed in the call to the method and the result
|
174
174
|
mock_executions.store(args, return_value)
|
@@ -217,7 +217,7 @@ module Grift
|
|
217
217
|
mock_executions = @mock_executions # required to access inside class instance block
|
218
218
|
cache_method_name = @cache_method_name
|
219
219
|
|
220
|
-
class_instance.remove_method(@method_name)
|
220
|
+
class_instance.remove_method(@method_name) if method_defined?
|
221
221
|
class_instance.define_method @method_name do |*args|
|
222
222
|
return_value = send(cache_method_name, *args)
|
223
223
|
|
@@ -237,7 +237,7 @@ module Grift
|
|
237
237
|
def unmock_method
|
238
238
|
raise(Grift::Error, 'Method is not cached') unless @true_method_cached
|
239
239
|
|
240
|
-
class_instance.remove_method(@method_name)
|
240
|
+
class_instance.remove_method(@method_name) if method_defined?
|
241
241
|
class_instance.alias_method(@method_name, @cache_method_name)
|
242
242
|
class_instance.remove_method(@cache_method_name)
|
243
243
|
|
@@ -280,5 +280,16 @@ module Grift
|
|
280
280
|
def class_instance
|
281
281
|
@class_method ? @klass.singleton_class : @klass
|
282
282
|
end
|
283
|
+
|
284
|
+
##
|
285
|
+
# Checks if the method is defined on the class instance. If the method is
|
286
|
+
# inherited from the super class and has not been mocked yet, this will
|
287
|
+
# return false because the super class defined the method.
|
288
|
+
#
|
289
|
+
# @return [Boolean]
|
290
|
+
#
|
291
|
+
def method_defined?
|
292
|
+
class_instance.instance_methods(false).include?(@method_name)
|
293
|
+
end
|
283
294
|
end
|
284
295
|
end
|
data/lib/grift/version.rb
CHANGED