class-callbacks 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: '08b765d03519176b6f4f77425ecf004c3fa85ec2d01f97a85165ff01058999ea'
4
+ data.tar.gz: f98f0a5d596f8a1c7f59aab03dca976483f7f02299fdc4f173b854a3a3d60fc7
5
+ SHA512:
6
+ metadata.gz: 5fdf484936569748eef97f20e7a52957b861889978726dd94417a2f06887b2031db02381098271ca61e29a6b732abb334b087ade4d841366b2eb8c622f4f9e63
7
+ data.tar.gz: ff983700e1c40d732b4dae04e27a55a51d64a5582305c9509244460b0e7b6b81bd6fb4bffe5f1163cc1f2f027f81686e23c88555b0958a11bc069ab6a5e7ff21
data/.version ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1 @@
1
+ require_relative 'class-callbacks/module'
@@ -0,0 +1,42 @@
1
+ module ClassCallbacks
2
+ def self.included base
3
+ def base.define_callback name
4
+ ivar = "@class_callbacks_#{name}"
5
+
6
+ unless is_a?(Class) || is_a?(Module)
7
+ raise ArgumentError, 'define_callback Can only be defined in a class or a module'
8
+ end
9
+
10
+ define_singleton_method(name) do |*args, &block|
11
+ ref = caller[0].split(':in ').first
12
+
13
+ self.instance_variable_set(ivar, {}) unless instance_variable_defined?(ivar)
14
+ self.instance_variable_get(ivar)[ref] = block || args
15
+ end
16
+ end
17
+ end
18
+
19
+ ###
20
+
21
+ def run_callback name, *args
22
+ ivar = "@class_callbacks_#{name}"
23
+
24
+ list = is_a?(Class) || is_a?(Module) ? ancestors : self.class.ancestors
25
+ list = list.slice 0, list.index(Object) if list.index(Object)
26
+
27
+ list.reverse.each do |klass|
28
+ if klass.instance_variable_defined?(ivar)
29
+ mlist = klass.instance_variable_get(ivar).values
30
+ mlist.each do |m|
31
+ if m.is_a?(Array)
32
+ for el in m
33
+ send el, *args
34
+ end
35
+ else
36
+ instance_exec *args, &m
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: class-callbacks
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Dino Reic
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-02-25 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Class ancestors are taken in consideration.
14
+ email: reic.dino@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - "./.version"
20
+ - "./lib/class-callbacks.rb"
21
+ - "./lib/class-callbacks/module.rb"
22
+ homepage: https://github.com/dux/class-callbacks
23
+ licenses:
24
+ - MIT
25
+ metadata: {}
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubygems_version: 3.0.6
42
+ signing_key:
43
+ specification_version: 4
44
+ summary: Class callbacks allow creation of ruby class methods that can capture blocks
45
+ and params
46
+ test_files: []