state_inspector 1.0.0.rc1 → 1.0.0
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 +4 -4
- data/README.md +12 -1
- data/lib/state_inspector/helper.rb +2 -3
- data/lib/state_inspector/state_inspector.rb +30 -8
- data/lib/state_inspector/version.rb +1 -1
- data/state_inspector.gemspec +2 -2
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c7830abc050b3b176596bcbbd359b0170010004e
|
4
|
+
data.tar.gz: 733bee9156bba95c6af439b1051847fca8432406
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 911dac749063d37fb90185a8502f81f00f3ebf273455210c8eb807be2beca505f3b279bc418d57f59df1e2f568f142229b2ebcdc879177a62f2692c8a5089b9f
|
7
|
+
data.tar.gz: 407a7b7582fae7e6ea3a235d5f0a353a3c7ac096417df06de33ac0e08d63b5a4d2bbdf5923354de25444fd865d2ea0d15921322e2aa497439a18a8edf9bd4ef3
|
data/README.md
CHANGED
@@ -156,7 +156,7 @@ And to register this observer to a target class you simply write:
|
|
156
156
|
StateInspector::Reporter[MyTargetClass] = ExampleObserver
|
157
157
|
```
|
158
158
|
|
159
|
-
## Manually Create Informers
|
159
|
+
## Manually Create or Remove Informers
|
160
160
|
|
161
161
|
To manually create informant methods use `state_inspector.snoop_setters :a=, :b=` and
|
162
162
|
`state_inspector.snoop_methods :a, :b`.
|
@@ -196,6 +196,17 @@ StateInspector::Reporter[MyClass].values
|
|
196
196
|
```
|
197
197
|
The nils in the values above represent the previous value the instance variable returned.
|
198
198
|
|
199
|
+
#### Remove Informers
|
200
|
+
|
201
|
+
To remove informers simply use `state_inspector.restore_methods`. This takes out the hook from
|
202
|
+
each method that waits for the `informer?` method to be true.
|
203
|
+
|
204
|
+
```ruby
|
205
|
+
# continuing from the above example
|
206
|
+
|
207
|
+
m.state_inspector.restore_methods :b=, :c=, :x
|
208
|
+
```
|
209
|
+
|
199
210
|
## Reporter Legend
|
200
211
|
|
201
212
|
The format of a report sent will always start with the object that sent it; aka `self`. Next you will
|
@@ -13,9 +13,8 @@ module StateInspector
|
|
13
13
|
yield
|
14
14
|
ensure
|
15
15
|
obj.toggle_informant
|
16
|
-
obj.
|
17
|
-
|
18
|
-
tap {|h| h.is_a?(Hash) ? h.empty? : h}
|
16
|
+
(obj.respond_to?(:class_eval) ? obj : obj.class).
|
17
|
+
remove_instance_variable(:@state_inspector)
|
19
18
|
end
|
20
19
|
end
|
21
20
|
end
|
@@ -7,15 +7,19 @@ module StateInspector
|
|
7
7
|
def snoop_setters *setters
|
8
8
|
base.class_exec do
|
9
9
|
setters.
|
10
|
-
delete_if {|m| (@state_inspector
|
10
|
+
delete_if {|m| (@state_inspector || {}).fetch(m){ nil } }.
|
11
11
|
each do |m|
|
12
|
-
(@state_inspector ||= {})[m] = __method__
|
13
12
|
single = singleton_methods.include? m
|
14
|
-
original_method = (single ? singleton_method(m) : instance_method(m))
|
13
|
+
original_method = (single ? singleton_method(m).unbind : instance_method(m))
|
14
|
+
(@state_inspector ||= {})[m] = {
|
15
|
+
contructor: __method__,
|
16
|
+
class: self,
|
17
|
+
singleton_method: single,
|
18
|
+
original_method: original_method
|
19
|
+
}
|
15
20
|
send((single ? :define_singleton_method : :define_method), m) do |*args, &block|
|
16
21
|
var = "@#{__method__.to_s.chop}"
|
17
22
|
tell_si var, instance_variable_get(var), *args, &block
|
18
|
-
original_method = (single ? original_method.unbind : original_method)
|
19
23
|
original_method.bind(self).call(*args, &block)
|
20
24
|
end
|
21
25
|
end
|
@@ -25,20 +29,38 @@ module StateInspector
|
|
25
29
|
def snoop_methods *meth0ds
|
26
30
|
base.class_exec do
|
27
31
|
meth0ds.
|
28
|
-
delete_if {|m| (@state_inspector
|
32
|
+
delete_if {|m| (@state_inspector || {}).fetch(m){ nil } }.
|
29
33
|
each do |m|
|
30
|
-
(@state_inspector ||= {})[m] = __method__
|
31
34
|
single = singleton_methods.include? m
|
32
|
-
original_method = (single ? singleton_method(m) : instance_method(m))
|
35
|
+
original_method = (single ? singleton_method(m).unbind : instance_method(m))
|
36
|
+
(@state_inspector ||= {})[m] = {
|
37
|
+
contructor: __method__,
|
38
|
+
class: self,
|
39
|
+
singleton_method: single,
|
40
|
+
original_method: original_method
|
41
|
+
}
|
33
42
|
send((single ? :define_singleton_method : :define_method), m) do |*args, &block|
|
34
43
|
tell_si __method__, *args, &block
|
35
|
-
original_method = (single ? original_method.unbind : original_method)
|
36
44
|
original_method.bind(self).call(*args, &block)
|
37
45
|
end
|
38
46
|
end
|
39
47
|
end
|
40
48
|
end
|
41
49
|
|
50
|
+
def restore_methods *meth0ds
|
51
|
+
base.class_eval do
|
52
|
+
meth0ds.
|
53
|
+
select {|m| (@state_inspector || {}).has_key? m }.
|
54
|
+
select {|m| self == @state_inspector[m][:class] }.
|
55
|
+
each do |m|
|
56
|
+
definer = @state_inspector[m][:singleton_method] ? :define_singleton_method : :define_method
|
57
|
+
meth0d = send(definer, m, @state_inspector[m][:original_method])
|
58
|
+
@state_inspector.delete(m)
|
59
|
+
meth0d
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
42
64
|
def skip_setter_snoops
|
43
65
|
base.instance_variable_set(:@state_inspector, Hash.new) unless base.
|
44
66
|
instance_variable_defined? :@state_inspector
|
data/state_inspector.gemspec
CHANGED
@@ -9,8 +9,8 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.authors = ["Daniel P. Clark"]
|
10
10
|
spec.email = ["6ftdan@gmail.com"]
|
11
11
|
|
12
|
-
spec.summary = %q{Introspection tool for reporting state change.}
|
13
|
-
spec.description = %q{Introspection tool for reporting state change. Instance
|
12
|
+
spec.summary = %q{Introspection tool for reporting method calls and state change.}
|
13
|
+
spec.description = %q{Introspection tool for reporting method calls and state change. Instance variables and method call debugging.}
|
14
14
|
spec.homepage = "https://github.com/danielpclark/state_inspector"
|
15
15
|
spec.license = "MIT"
|
16
16
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: state_inspector
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel P. Clark
|
@@ -80,8 +80,8 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0.0'
|
83
|
-
description: Introspection tool for reporting state change. Instance
|
84
|
-
method call debugging.
|
83
|
+
description: Introspection tool for reporting method calls and state change. Instance
|
84
|
+
variables and method call debugging.
|
85
85
|
email:
|
86
86
|
- 6ftdan@gmail.com
|
87
87
|
executables: []
|
@@ -123,13 +123,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
123
123
|
version: '0'
|
124
124
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
125
125
|
requirements:
|
126
|
-
- - "
|
126
|
+
- - ">="
|
127
127
|
- !ruby/object:Gem::Version
|
128
|
-
version:
|
128
|
+
version: '0'
|
129
129
|
requirements: []
|
130
130
|
rubyforge_project:
|
131
131
|
rubygems_version: 2.6.8
|
132
132
|
signing_key:
|
133
133
|
specification_version: 4
|
134
|
-
summary: Introspection tool for reporting state change.
|
134
|
+
summary: Introspection tool for reporting method calls and state change.
|
135
135
|
test_files: []
|