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.0.0"

Instance Method Summary collapse

Instance Method Details

#def_delegator(accessor, method, *args) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/forwardable/extended.rb', line 37

def def_delegator(accessor, method, *args)
  if args.empty? || args.size > 1 || !args.first.is_a?(Hash)
    return DEF_DELEGATOR.bind(self).call(
      accessor, method, *args
    )
  end

  return def_ivar_delegator(accessor, method, *args) if args.first[:type] == :ivar
  return def_hash_delegator(accessor, method, *args) if args.first[:type] == :hash
  prefix = (kwd[:bool] == :reverse ? "!!!" : "!!") if kwd[:bool]
  suffix = (kwd[:bool] ? "?" : "")

  class_eval "    def \#{method}\#{suffix}\n      \#{prefix}\#{accessor}.send(\#{alias_.inspect})\n    end\n  STR\nend\n", __FILE__, __LINE__

#def_hash_delegator(hash, method, key: method, bool: false, type: :ivar) ⇒ Object



11
12
13
14
15
16
17
18
19
20
# File 'lib/forwardable/extended.rb', line 11

def def_hash_delegator(hash, method, key: method, bool: false, type: :ivar)
  prefix = (bool == :reverse ? "!!!" : "!!") if bool
  suffix = (bool ? "?" : "")

  class_eval "    def \#{method}\#{suffix}\n      \#{prefix}\#{hash}[\#{key.inspect}]\n    end\n  STR\nend\n", __FILE__, __LINE__

#def_ivar_delegator(ivar, alias_ = ivar, bool: false, type: :ivar) ⇒ Object



24
25
26
27
28
29
30
31
32
33
# File 'lib/forwardable/extended.rb', line 24

def def_ivar_delegator(ivar, alias_ = ivar, bool: false, type: :ivar)
  prefix = (bool == :reverse ? "!!!" : "!!") if bool
  suffix = (bool ? "?" : "")

  class_eval "    def \#{alias_.to_s.gsub(/\\A@/, \"\")}\#{suffix}\n      \#{prefix}\#{ivar}\n    end\n  STR\nend\n", __FILE__, __LINE__