Module: Forwardable::Extended
- Defined in:
- lib/forwardable/extended.rb,
lib/forwardable/extended/version.rb
Constant Summary collapse
- DEF_DELEGATOR =
Object::Forwardable.instance_method(:def_delegator)
- VERSION =
"2.2.0"
Instance Method Summary collapse
- #def_delegator(accessor, method, alias_ = method, **kwd) ⇒ Object
- #def_hash_delegator(hash, method, key: method, bool: false, wrap: false) ⇒ Object
- #def_ivar_delegator(ivar, alias_ = ivar, bool: false, wrap: false) ⇒ Object
- #def_modern_delegator(accessor, method, alias_ = method, args: [], bool: false, wrap: false) ⇒ Object
Instance Method Details
#def_delegator(accessor, method, alias_ = method, **kwd) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/forwardable/extended.rb', line 41 def def_delegator(accessor, method, alias_ = method, **kwd) kwd, alias_ = alias_, method if alias_.is_a?(Hash) && !kwd.any? if alias_.is_a?(Hash) || !kwd.any? DEF_DELEGATOR.bind(self).call( accessor, method, alias_ ) elsif kwd[:type] raise ArgumentError, "Alias not supported with type; the method is the alias" if alias_ != method send("def_#{kwd[:type]}_delegator", accessor, method, **kwd.tap { |obj| obj.delete(:type) }) else def_modern_delegator( accessor, method, alias_, **kwd ) end end |
#def_hash_delegator(hash, method, key: method, bool: false, wrap: false) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/forwardable/extended.rb', line 11 def def_hash_delegator(hash, method, key: method, bool: false, wrap: false) prefix = (bool == :reverse ? "!!!" : "!!") if bool wrap = "self.class.new" if wrap.is_a?(TrueClass) wrap = wrap ? "#{wrap} " : "" suffix = (bool ? "?" : "") class_eval " def \#{method}\#{suffix}\n \#{wrap}\#{prefix}\#{hash}[\#{key.inspect}]\n end\n STR\nend\n", __FILE__, __LINE__ |
#def_ivar_delegator(ivar, alias_ = ivar, bool: false, wrap: false) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/forwardable/extended.rb', line 26 def def_ivar_delegator(ivar, alias_ = ivar, bool: false, wrap: false) prefix = (bool == :reverse ? "!!!" : "!!") if bool wrap = "self.class.new" if wrap.is_a?(TrueClass) wrap = wrap ? "#{wrap} " : "" suffix = (bool ? "?" : "") class_eval " def \#{alias_.to_s.gsub(/\\A@/, \"\")}\#{suffix}\n \#{wrap}\#{prefix}\#{ivar}\n end\n STR\nend\n", __FILE__, __LINE__ |
#def_modern_delegator(accessor, method, alias_ = method, args: [], bool: false, wrap: false) ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/forwardable/extended.rb', line 64 def def_modern_delegator(accessor, method, alias_ = method, args: [], bool: false, wrap: false) args = [args].flatten.compact.map(&:to_s).unshift("").join(", ") prefix = (bool == :reverse ? "!!!" : "!!") if bool wrap = "self.class.new" if wrap.is_a?(TrueClass) wrap = wrap ? "#{wrap} " : "" suffix = (bool ? "?" : "") class_eval " def \#{alias_}\#{suffix}(*args, &block)\n \#{wrap}\#{prefix}\#{accessor}.send(\#{method.inspect}\#{args + \", *args\"}, &block)\n end\n STR\nend\n", __FILE__, __LINE__ |