Module: Eco::Language::Delegation::DelegatingMissing::ClassMethods
- Defined in:
- lib/eco/language/delegation/delegating_missing.rb
Instance Method Summary collapse
- #delegating_missing(*these, to:) ⇒ Object
- #delegating_missing?(sym) ⇒ Boolean
- #delegating_missing_target(instance, at: nil) ⇒ Object
- #delegating_missing_to(to = nil) ⇒ Object
Instance Method Details
#delegating_missing(*these, to:) ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/eco/language/delegation/delegating_missing.rb', line 16 def delegating_missing(*these, to:) 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 end self end |
#delegating_missing?(sym) ⇒ Boolean
42 43 44 45 46 47 48 49 |
# File 'lib/eco/language/delegation/delegating_missing.rb', line 42 def delegating_missing?(sym) return true if sym.nil? && delegating_missing_to return false unless sym_or_string?(sym) return true if _delegating_missing.key?(sym.to_sym) return true if delegating_missing_to false end |
#delegating_missing_target(instance, at: nil) ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/eco/language/delegation/delegating_missing.rb', line 51 def delegating_missing_target(instance, at: nil) return unless delegating_missing?(at) return unless (subject_ref = _delegating_missing[at] || delegating_missing_to) 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 |
#delegating_missing_to(to = nil) ⇒ Object
32 33 34 35 36 37 38 39 40 |
# File 'lib/eco/language/delegation/delegating_missing.rb', line 32 def delegating_missing_to(to = nil) return @delegating_missing_to if to.nil? msg = "Expecting String or Symbol. Given: #{to}." raise ArgumentError, msg unless sym_or_string?(to) @delegating_missing_to = to.to_sym end |