insane_hook 0.1.0 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7d836f8c8d960c8448a5740bcfafa8aa218fa55f
4
- data.tar.gz: 5ea05e3facc2a5f6f65cad861949b9dd233e0b01
3
+ metadata.gz: 52087f990c211ae1507916fb8c05de5e34fa3cc4
4
+ data.tar.gz: ff9200db9a99ccf204e6282df0b8b23114267bad
5
5
  SHA512:
6
- metadata.gz: 1df08b1fde7481e3d3f6c6371a939b783371ed215382495663da9148c3f2fc404b71097fe971833a8b652f61324087863f9734df184eae86a5677c90115f4191
7
- data.tar.gz: 179579e9c6ca2acd960dfe57749acc2ca5d18cc01c49572b7681c162fb704efc8ee91e9038aa7a57faa6d62329c3f1a73e30ef7db5c7660279526aae3298d71c
6
+ metadata.gz: be0a31b1693bc8321e422ca159084f2c49ac90da847072ee578b9c499314e5adbceb0d55631a792e7204e27cc9f1e037574b311a4fc43fe1d787d890204a27e9
7
+ data.tar.gz: 4a81df5fa6fd250662cc7241469d0908717e5cef03b903e2df4d393a7ebd2b0b3612c791fd615a49889c77a672abdf8105a7d99211b7be207179197d91c5e75c
data/README.md CHANGED
@@ -27,13 +27,15 @@ class YeOldeTaske
27
27
  allow :some_optional_arg
28
28
 
29
29
  call do
30
- # do some work here
31
- # attr_readers are available for some_required_arg
32
- # and some_optional_arg
30
+ # attr_readers are available for:
31
+ # - some_required_arg
32
+ # - some_optional_arg
33
+ result meaningful_value
33
34
  end
34
35
  end
35
36
 
36
- YeOldeTaske.new(some_required_arg: 7).call
37
+ task = YeOldeTaske.new(some_required_arg: 7).call # => task instance
38
+ task.result # => meaningful_value
37
39
  ```
38
40
 
39
41
  ## Development
data/lib/insane_hook.rb CHANGED
@@ -1,47 +1,67 @@
1
1
  require "insane_hook/version"
2
2
 
3
3
  module InsaneHook
4
- def self.included(mod)
5
- mod.class_variable_set(:@@_command, {required: [], optional: []})
6
- mod.extend(ClassMethods)
7
- mod.define_singleton_method(:need, mod.instance_method(:_need))
8
- mod.define_singleton_method(:allow, mod.instance_method(:_allow))
9
- mod.define_singleton_method(:call, mod.instance_method(:_call))
10
- end
11
-
12
- def _need(key)
13
- fail "#{key} is not a symbol" unless key.is_a? Symbol
14
- args = self.class_variable_get(:@@_command)
15
- args[:required] << key
16
- self.class_variable_set(:@@_command, args)
17
- end
18
-
19
- def _allow(key)
20
- fail "#{key} is not a symbol" unless key.is_a? Symbol
21
- args = self.class_variable_get(:@@_command)
22
- args[:optional] << key
23
- self.class_variable_set(:@@_command, args)
24
- end
25
-
26
- def _call(&block)
27
- define_method(:call, block)
28
- end
29
-
30
- module ClassMethods
31
- def new(**args, &block)
32
- obj = self.allocate
33
- self.class_variable_get(:@@_command)[:required].each do |var|
34
- value = args.fetch(var) { raise "#{var} not provided in #{self.class}" }
35
- obj.instance_variable_set("@#{var}", value)
36
- obj.class.class_eval{attr_reader var}
37
- end
38
- self.class_variable_get(:@@_command)[:optional].each do |var|
39
- value = args.fetch(var, nil)
40
- obj.instance_variable_set("@#{var}", value)
41
- obj.class.class_eval{attr_reader var}
42
- end
43
- obj.send :initialize
44
- obj
45
- end
46
- end
4
+
5
+ class CommandNotRunError < StandardError ; end
6
+
7
+ def self.included(mod)
8
+ mod.class_variable_set(:@@_command, {required: [], optional: []})
9
+ mod.extend(ClassMethods)
10
+ mod.define_singleton_method(:need, mod.instance_method(:_need))
11
+ mod.define_singleton_method(:allow, mod.instance_method(:_allow))
12
+ mod.define_singleton_method(:call, mod.instance_method(:_call))
13
+ #mod.define_method(:result, mod.instance_method(:_result))
14
+ end
15
+
16
+ def result(value=:_no_value)
17
+ if value == :_no_value
18
+ if instance_variable_defined?(:@_result)
19
+ instance_variable_get(:@_result)
20
+ else
21
+ raise CommandNotRunError
22
+ end
23
+ else
24
+ instance_variable_set(:@_result, value)
25
+ end
26
+ end
27
+
28
+ def _need(key)
29
+ fail "#{key} is not a symbol" unless key.is_a? Symbol
30
+ args = self.class_variable_get(:@@_command)
31
+ args[:required] << key
32
+ self.class_variable_set(:@@_command, args)
33
+ end
34
+
35
+ def _allow(key)
36
+ fail "#{key} is not a symbol" unless key.is_a? Symbol
37
+ args = self.class_variable_get(:@@_command)
38
+ args[:optional] << key
39
+ self.class_variable_set(:@@_command, args)
40
+ end
41
+
42
+ def _call(&block)
43
+ define_method(:call) do
44
+ result(nil)
45
+ instance_eval(&block)
46
+ self
47
+ end
48
+ end
49
+
50
+ module ClassMethods
51
+ def new(**args, &block)
52
+ obj = self.allocate
53
+ self.class_variable_get(:@@_command)[:required].each do |var|
54
+ value = args.fetch(var) { raise "#{var} not provided in #{self.class}" }
55
+ obj.instance_variable_set("@#{var}", value)
56
+ obj.class.class_eval{attr_reader var}
57
+ end
58
+ self.class_variable_get(:@@_command)[:optional].each do |var|
59
+ value = args.fetch(var, nil)
60
+ obj.instance_variable_set("@#{var}", value)
61
+ obj.class.class_eval{attr_reader var}
62
+ end
63
+ obj.send :initialize
64
+ obj
65
+ end
66
+ end
47
67
  end
@@ -1,3 +1,3 @@
1
1
  module InsaneHook
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: insane_hook
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aldric Giacomoni, Ahmad Ragab