class-callbacks 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []