insane_hook 0.1.0 → 0.2.0

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
  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