module SubstAttr::Substitute
Public Instance Methods
build(interface=nil)
click to toggle source
# File lib/subst_attr/substitute.rb, line 5 def build(interface=nil) if interface specialization = specialization(interface) return specialization if specialization end return NullObject.build(interface) end
call(attr_name, receiver)
click to toggle source
# File lib/subst_attr/substitute.rb, line 14 def call(attr_name, receiver) interface = receiver.send(attr_name).class substitute = build(interface) receiver.send :"#{attr_name}=", substitute substitute end
specialization(interface)
click to toggle source
# File lib/subst_attr/substitute.rb, line 21 def specialization(interface) constant_name = :Substitute reflection = Reflect.(interface, constant_name, strict: false, ancestors: true) if reflection.nil? return nil end specialization_module = reflection.constant if specialization_module.equal?(self) return nil end unless specialization_module.respond_to?(:build) return nil end specialization_module.send(:build) end