module MiniObject::Injectable
Constants
- NULL
Public Class Methods
getsetter_definition_for(name, default_block)
click to toggle source
# File lib/mini_object/injectable.rb, line 14 def self.getsetter_definition_for name, default_block lambda do |value = NULL, &block| if value == NULL && block == nil get_attribute name, default_block else set_attribute name, value, block end end end
included(klass)
click to toggle source
# File lib/mini_object/injectable.rb, line 10 def self.included klass klass.extend self end
new(&block)
click to toggle source
Calls superclass method
# File lib/mini_object/injectable.rb, line 5 def initialize &block super block.call self if block end
setter_definition_for(name)
click to toggle source
# File lib/mini_object/injectable.rb, line 24 def self.setter_definition_for name lambda do |value| set_attribute name, value end end
Public Instance Methods
attr_injectable(name, &block)
click to toggle source
# File lib/mini_object/injectable.rb, line 37 def attr_injectable name, &block define_method name, &Injectable.getsetter_definition_for(name, block) define_method "#{name}=", &Injectable.setter_definition_for(name) instance_variable_set("@#{name}_default_proc", block) if block end
attributes=(attrs)
click to toggle source
# File lib/mini_object/injectable.rb, line 43 def attributes= attrs attrs.each do |k,v| public_send "#{k}=", v end end
cattr_injectable(name, &block)
click to toggle source
# File lib/mini_object/injectable.rb, line 30 def cattr_injectable name, &block define_singleton_method name, &Injectable.getsetter_definition_for(name, block) define_singleton_method "#{name}=", &Injectable.setter_definition_for(name) define_method name, -> { self.class.public_send name } send(name, &block) if block end
Private Instance Methods
get_attribute(name, default_block)
click to toggle source
# File lib/mini_object/injectable.rb, line 51 def get_attribute name, default_block if eval "defined? @#{name}" # Get via variable instance_variable_get :"@#{name}" elsif eval "defined? @#{name}_proc" # Get via proc instance_variable_get(:"@#{name}_proc").call elsif default_block default_block.call else raise "Dependency #{name} not defined yet" end end
set_attribute(name, value = NULL, block = nil)
click to toggle source
# File lib/mini_object/injectable.rb, line 65 def set_attribute name, value = NULL, block = nil if value == NULL # Set via proc instance_variable_set :"@#{name}_proc", block remove_instance_variable :"@#{name}" if eval "defined? @#{name}" elsif value == nil && block # Set via proc instance_variable_set :"@#{name}_proc", block remove_instance_variable :"@#{name}" if eval "defined? @#{name}" else # Set via variable instance_variable_set :"@#{name}", value remove_instance_variable :"@#{name}_proc" if eval "defined? @#{name}_proc" end block || value end