Module: Eco::Language::Delegation::DelegatingBlank::ClassMethods

Includes:
Strings::Underscore
Defined in:
lib/eco/language/delegation/delegating_blank.rb

Instance Method Summary collapse

Instance Method Details

#delegating_blank(*these, to:, safe: false) ⇒ Object

Raises:

  • (ArgumentError)


23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/eco/language/delegation/delegating_blank.rb', line 23

def delegating_blank(*these, to:, safe: false)
  msg = "Delegating to: should be String or Symbol. Given: #{to.class}"
  raise ArgumentError, msg unless sym_or_string?(to)

  these.map do |this|
    msg = "Expecting String or Symbol. Given: #{this}."
    raise ArgumentError, msg unless sym_or_string?(this)

    this.to_sym
  end.each do |this|
    delegating_missing(this, to: to) unless delegating_missing?(this)
    install_blank_delegator(at: this, safe: safe)

    _delegating_blank[this]      = to
    _safe_blank_delegation[this] = safe
  end

  self
end

#delegating_blank?(sym) ⇒ Boolean

Returns:

  • (Boolean)


43
44
45
46
47
48
# File 'lib/eco/language/delegation/delegating_blank.rb', line 43

def delegating_blank?(sym)
  return false unless sym_or_string?(sym)
  return true  if _delegating_blank.key?(sym.to_sym)

  false
end

#delegating_blank_target(instance, at: nil) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/eco/language/delegation/delegating_blank.rb', line 57

def delegating_blank_target(instance, at: nil)
  return unless delegating_blank?(at)
  return unless (subject_ref = _delegating_blank[at])

  instance_has_method =
    instance.methods.include?(subject_ref) ||
    instance.private_methods.include?(subject_ref)

  return instance.method(subject_ref).call if instance_has_method
  return                                   unless at.to_s.start_with?('@')
  return                                   unless instance.instance_variable_defined?(at)

  instance.instance_variable_get(at)
end

#safe_blank_delegation?(sym) ⇒ Boolean

Returns:

  • (Boolean)


50
51
52
53
54
55
# File 'lib/eco/language/delegation/delegating_blank.rb', line 50

def safe_blank_delegation?(sym)
  return false unless sym_or_string?(sym)
  return false unless _safe_blank_delegation.key?(sym.to_sym)

  _safe_blank_delegation[sym.to_sym]
end