finalist 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e1236d1165f3b66a96e58dc3cd1a6f99ae1c15886b01f4e18804f956b04a9b4a
4
- data.tar.gz: 1d2040be22e0ed1583983666af88983b4fd9d5a133f6d3ade05fe3c3af7b00a6
3
+ metadata.gz: c16358bc0a05975770702b6234cbb3c03f457fb4a1fd5ec707e0c87106247b50
4
+ data.tar.gz: 8da986b8a9c507c4dfb5bf200d3b92e59ac2cc7a1925f8202e49d8968cab87b3
5
5
  SHA512:
6
- metadata.gz: 8432ac5cd98ec972e93651107ee468dbfb96e6304a637650d48694c4484f6c421c575774d4c4f2def446c5eb8425aa3e73785dd93962b3aa5fd649df13f91b30
7
- data.tar.gz: d10d99046717352b9d09983c3b1ec487a95fd7b67491336f7c2e8f27041318af8465cd56b1dede419ca0f13e101d7212de2b372d7c95d118b41055cf0a06a0bb
6
+ metadata.gz: 2884650dd911c2667fa754e6fe6a35834b6704ea7081803ba5a34d7e0585899572fe351da5854cf57fac1d7fecbbc87227ff8b80586d74a51c5fc3214c31ed02
7
+ data.tar.gz: 01bd8655ba387ef3a885adfa44e9b345f49d8b5af7fed03a7369652114284fc295d18dcdadc01d11f04423f6c234c2fddbd3ebfcce4ceaeb71a794b3be6dfd8c
data/README.md CHANGED
@@ -47,6 +47,10 @@ A class or module extends `Finalist` module
47
47
  And add `final` modifier to target method.
48
48
  (`final` can accept symbol as method name.)
49
49
 
50
+ ### for Production
51
+ If you want to disable Finalist, write `Finalist.disable = true` at first line.
52
+ If Finalist is disabled, TracePoint never runs, and so there is no overhead of VM instruction.
53
+
50
54
  ### Examples
51
55
 
52
56
  #### include module
@@ -181,6 +185,32 @@ class L2
181
185
  end
182
186
  ```
183
187
 
188
+ #### overrided by module prepend
189
+
190
+ This case is a intended loophole.
191
+
192
+ ```ruby
193
+ module M1
194
+ extend Finalist
195
+
196
+ final def foo
197
+ end
198
+ end
199
+
200
+ module M3
201
+ def foo
202
+ "foo"
203
+ end
204
+ end
205
+
206
+ class M2
207
+ include M1
208
+ prepend M3
209
+ end
210
+
211
+ M2.new.foo # => "foo"
212
+ ```
213
+
184
214
  ## How is this implemented?
185
215
 
186
216
  Use so many ruby hooks. `method_added` and `singleton_method_added` and `included` and `extended`.
@@ -14,11 +14,27 @@ module Finalist
14
14
  end
15
15
  end
16
16
 
17
+ @disable = false
18
+
19
+ def self.disable=(v)
20
+ @disable = v
21
+ end
22
+
23
+ def self.disabled?
24
+ @disable
25
+ end
26
+
27
+ def self.enabled?
28
+ !disabled?
29
+ end
30
+
17
31
  def self.extended(base)
18
32
  super
19
33
  base.extend(SyntaxMethods)
20
34
  base.singleton_class.extend(SyntaxMethods)
21
- base.extend(ModuleMethods) if base.instance_of?(Module)
35
+ if enabled?
36
+ base.extend(ModuleMethods) if base.is_a?(Module)
37
+ end
22
38
  end
23
39
 
24
40
  def self.finalized_methods
@@ -29,15 +45,9 @@ module Finalist
29
45
  def included(base)
30
46
  super
31
47
 
32
- base.extend(Finalist)
48
+ return if Finalist.disabled?
33
49
 
34
- caller_info = caller_locations(1, 2).last
35
- event_type =
36
- if caller_info.label.match?(/block/)
37
- :b_return
38
- else
39
- :end
40
- end
50
+ base.extend(Finalist)
41
51
 
42
52
  base.ancestors.drop(1).each do |mod|
43
53
  Finalist.finalized_methods[mod]&.each do |fmeth_name|
@@ -59,6 +69,8 @@ module Finalist
59
69
  def base.singleton_method_added(symbol)
60
70
  super
61
71
 
72
+ return if Finalist.disabled?
73
+
62
74
  meth = singleton_class.instance_method(symbol)
63
75
  super_method = meth.super_method
64
76
  while super_method
@@ -95,6 +107,8 @@ module Finalist
95
107
  def method_added(symbol)
96
108
  super
97
109
 
110
+ return if Finalist.disabled?
111
+
98
112
  meth = instance_method(symbol)
99
113
  super_method = meth.super_method
100
114
  while super_method
@@ -108,6 +122,8 @@ module Finalist
108
122
  def singleton_method_added(symbol)
109
123
  super
110
124
 
125
+ return if Finalist.disabled?
126
+
111
127
  meth = singleton_class.instance_method(symbol)
112
128
  super_method = meth.super_method
113
129
  while super_method
@@ -1,3 +1,3 @@
1
1
  module Finalist
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: finalist
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - joker1007