before_hooks 0.1.1 → 0.1.2

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: b2f2cdd14383db2598bebde8959c30020c33baa86ed26da76d6624d482992c83
4
- data.tar.gz: 2f8e8958ff44ed06b97d73685fb60c49582bf420fd3b87c5eab6c80eabb8f93e
3
+ metadata.gz: 483373632a92b3bff2aa53fc62123df41f515e08f65eb8921b41eb5e5c959a6a
4
+ data.tar.gz: '0065946eef8f7597159d8e115c593c69fc6226c904cb7778d856f58d4eb12659'
5
5
  SHA512:
6
- metadata.gz: 7694e0a74569504aa3e5904aaeae43705bba8cd0409efacfee5fbf4490a4deca74dc4152b1ed488055092e54fde87101b1604e1e64e979fbcf927927c8872ba2
7
- data.tar.gz: f4fda542e6cd7d013116803c0816a310d2ad264e723afc4de6a40a32d1768576cf810e9870d24a77d6a69f5416c459cb55e89f55ac2d10f559b38d9f18aa9bcf
6
+ metadata.gz: b44f291f47253c2986607ca564c250a1f4a205572abbf76e0321eedd024807d1f67c40e1395249b89b104e80511c8538c105afd7e58773a94842f9d714bdaf39
7
+ data.tar.gz: 97357d4c7579f65cf62f3c50e6c9566df92e34d17627ba23bd31016a0c946cf1f9b2c09558c0e169c3dc905a274d56e6ae9593d2afe14a27944dc6dcbfec4cd4
data/README.md CHANGED
@@ -2,10 +2,10 @@
2
2
 
3
3
  [![Build Status](https://travis-ci.org/jrpolidario/before_hooks.svg?branch=master)](https://travis-ci.org/jrpolidario/before_hooks)
4
4
 
5
- Adds `before_extended`, `before_included`, and `before_prepended` methods hooks which would be called before the standard `extended`, `included`, and `prepended` Ruby hooks, respectively.
6
-
7
- Especially useful when you require to "do" something just before the module gets `extended`, `included`, or `prepended` to a module/class.
8
- In particular, in my specific case, I needed to "do" something first if a specific method already exists in the `base` class before being extended, of which then I'd use `before_extended`.
5
+ Raises error if method already defined to designated `include`, `extend`, or `prepend` base Module/Class.
6
+ Prevents "silent-failures" and indirect bugs caused by overriding functionality (inter-gems-wide), of which you have no control of.
7
+ Take note though that this does not let a module/class to be non-overridable.
8
+ It only promotes and delegates responsibility to the developer to ensure that he/she does not unnecessarily cause "hidden" bugs.
9
9
 
10
10
  ## Dependencies
11
11
 
@@ -59,12 +59,12 @@ end
59
59
 
60
60
  =begin
61
61
 
62
- SomeModule#before_included
62
+ "SomeModule#before_included"
63
63
  SomeClass
64
- [SomeClass, BeforeHooks, Object, PP::ObjectMixin, Kernel, BasicObject]
65
- SomeModule#included
64
+ [SomeClass, Object, PP::ObjectMixin, Kernel, BasicObject]
65
+ "SomeModule#included"
66
66
  SomeClass
67
- [SomeClass, SomeModule, BeforeHooks, Object, PP::ObjectMixin, Kernel, BasicObject]
67
+ [SomeClass, SomeModule, Object, PP::ObjectMixin, Kernel, BasicObject]
68
68
 
69
69
  =end
70
70
  ```
@@ -99,29 +99,27 @@ end
99
99
 
100
100
  =begin
101
101
 
102
- SomeModule#before_extended
102
+ "SomeModule#before_extended"
103
103
  SomeClass
104
104
  [#<Class:SomeClass>,
105
- BeforeHooks::ClassMethods,
106
105
  #<Class:Object>,
107
106
  #<Class:BasicObject>,
108
107
  Class,
109
- Module,
110
108
  BeforeHooks,
109
+ Module,
111
110
  Object,
112
111
  PP::ObjectMixin,
113
112
  Kernel,
114
113
  BasicObject]
115
- SomeModule#extended
114
+ "SomeModule#extended"
116
115
  SomeClass
117
116
  [#<Class:SomeClass>,
118
117
  SomeModule,
119
- BeforeHooks::ClassMethods,
120
118
  #<Class:Object>,
121
119
  #<Class:BasicObject>,
122
120
  Class,
123
- Module,
124
121
  BeforeHooks,
122
+ Module,
125
123
  Object,
126
124
  PP::ObjectMixin,
127
125
  Kernel,
@@ -160,18 +158,18 @@ end
160
158
 
161
159
  =begin
162
160
 
163
- SomeModule#before_prepended
161
+ "SomeModule#before_prepended"
164
162
  SomeClass
165
- [SomeClass, BeforeHooks, Object, PP::ObjectMixin, Kernel, BasicObject]
166
- SomeModule#prepended
163
+ [SomeClass, Object, PP::ObjectMixin, Kernel, BasicObject]
164
+ "SomeModule#prepended"
167
165
  SomeClass
168
- [SomeModule, SomeClass, BeforeHooks, Object, PP::ObjectMixin, Kernel, BasicObject]
166
+ [SomeModule, SomeClass, Object, PP::ObjectMixin, Kernel, BasicObject]
169
167
 
170
168
  =end
171
169
  ```
172
170
 
173
171
  ## TODOs
174
- * Need help or further research on how to support `before_inherited` as a "before" hook to `inherited` standard ruby method.
172
+ * Need help or further research on how to support and implement `before_inherited`, `before_method_added`, and `before_method_removed`, because "prepend" trick doesn't readily work with them.
175
173
 
176
174
  ## Development
177
175
 
data/lib/before_hooks.rb CHANGED
@@ -1,42 +1,54 @@
1
1
  require 'before_hooks/version'
2
2
 
3
3
  module BeforeHooks
4
- # `base` is expected to be and should be an `Object`
5
- def self.prepended(base)
6
- base.singleton_class.send(:prepend, ClassMethods)
7
- end
8
-
9
- module ClassMethods
10
- def extend(*modules)
11
- modules.each do |_module|
12
- if _module.singleton_class.instance_methods.include? :before_extended
13
- _module.before_extended(self)
14
- end
4
+ def extend(*modules)
5
+ modules.each do |_module|
6
+ if _module.singleton_class.instance_methods.include? :before_extended
7
+ _module.before_extended(self)
15
8
  end
16
-
17
- super
18
9
  end
19
10
 
20
- def include(*modules)
21
- modules.each do |_module|
22
- if _module.singleton_class.instance_methods.include? :before_included
23
- _module.before_included(self)
24
- end
25
- end
11
+ super
12
+ end
26
13
 
27
- super
14
+ def include(*modules)
15
+ modules.each do |_module|
16
+ if _module.singleton_class.instance_methods.include? :before_included
17
+ _module.before_included(self)
18
+ end
28
19
  end
29
20
 
30
- def prepend(*modules)
31
- modules.each do |_module|
32
- if _module.singleton_class.instance_methods.include? :before_prepended
33
- _module.before_prepended(self)
34
- end
35
- end
21
+ super
22
+ end
36
23
 
37
- super
24
+ def prepend(*modules)
25
+ modules.each do |_module|
26
+ if _module.singleton_class.instance_methods.include? :before_prepended
27
+ _module.before_prepended(self)
28
+ end
38
29
  end
30
+
31
+ super
39
32
  end
33
+
34
+ # # TODO: add a `before_method_added` and `before_method_reoved`; not yet working; couldn't yet think of a solution
35
+ # def method_added(method_name)
36
+ # puts 'METHOD ADDED!'
37
+ # puts singleton_class.instance_methods.include? :before_method_added
38
+ # if singleton_class.instance_methods.include? :before_method_added
39
+ # before_method_added(args)
40
+ # end
41
+ #
42
+ # super
43
+ # end
44
+ #
45
+ # def method_removed(*args)
46
+ # if singleton_class.instance_methods.include? :before_method_removed
47
+ # before_method_removed(args)
48
+ # end
49
+ #
50
+ # super
51
+ # end
40
52
  end
41
53
 
42
- Object.send(:prepend, BeforeHooks)
54
+ Module.send(:prepend, BeforeHooks)
@@ -1,3 +1,3 @@
1
1
  module BeforeHooks
2
- VERSION = '0.1.1'
2
+ VERSION = '0.1.2'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: before_hooks
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jules Roman Polidario