Module: Dec
- Defined in:
- lib/dec.rb
Constant Summary collapse
- HASH_ARRAY =
-> (h, k) { h[k] = [] }
- NS =
"_dec_".freeze
Instance Method Summary collapse
- #_executor ⇒ Object
- #dec(*args, &block) ⇒ Object
- #dec_calls ⇒ Object
- #dec_stack ⇒ Object
- #method_added(method_sym) ⇒ Object
Instance Method Details
#_executor ⇒ Object
7 8 9 |
# File 'lib/dec.rb', line 7 def _executor @_dec_executor ||= Hash.new(&HASH_ARRAY) end |
#dec(*args, &block) ⇒ Object
43 44 45 |
# File 'lib/dec.rb', line 43 def dec(*args, &block) @_dec_stack = dec_stack + args << block end |
#dec_calls ⇒ Object
15 16 17 |
# File 'lib/dec.rb', line 15 def dec_calls @_dec_calls ||= [] end |
#dec_stack ⇒ Object
11 12 13 |
# File 'lib/dec.rb', line 11 def dec_stack @_dec_stack ||= [] end |
#method_added(method_sym) ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/dec.rb', line 19 def method_added(method_sym) return if method_sym.to_s.start_with?(NS) || dec_calls.include?(method_sym) || dec_stack.empty? dec_calls << method_sym alias_method :"#{NS}#{method_sym}", method_sym _executor[method_sym] = dec_stack .select { |fn| fn.respond_to?(:call) } .reverse dec_stack.clear class_eval " def \#{method_sym}(*args, **kwargs, &block)\n result = send(:\#{NS}\#{method_sym}, *args, *kwargs, &block)\n stack = self.class._executor[:\#{method_sym}]\n\n stack.each { |action| result = action.call(result) }\n result\n end\n RB\nend\n", __FILE__, __LINE__ + 1 |