class Inject::Target
Public Class Methods
new(klass, attribute, opts={})
click to toggle source
# File lib/attr_inject/target.rb, line 4 def initialize(klass, attribute, opts={}) @klass = klass @attribute = attribute apply_options opts add_accessor(attribute, klass) end
Public Instance Methods
apply(params, target)
click to toggle source
# File lib/attr_inject/target.rb, line 12 def apply(params, target) validate! params set_value(target, default) if !default.nil? set_value(target, attribute_value(params)) if params.include?(attribute) end
attribute()
click to toggle source
# File lib/attr_inject/target.rb, line 27 def attribute @attribute end
default()
click to toggle source
# File lib/attr_inject/target.rb, line 23 def default options[:default] end
klass()
click to toggle source
# File lib/attr_inject/target.rb, line 31 def klass @klass end
options()
click to toggle source
# File lib/attr_inject/target.rb, line 35 def options @options end
required?()
click to toggle source
# File lib/attr_inject/target.rb, line 19 def required? options[:required] && default.nil? end
Private Instance Methods
add_accessor(attribute, klass)
click to toggle source
# File lib/attr_inject/target.rb, line 40 def add_accessor(attribute, klass) accessor_method = Proc.new{ instance_variable_get "@#{attribute}" } klass.send(:define_method, attribute, &accessor_method) end
apply_options(opts)
click to toggle source
# File lib/attr_inject/target.rb, line 66 def apply_options(opts) @options = { :required => true }.merge!(opts) end
attribute_value(params)
click to toggle source
# File lib/attr_inject/target.rb, line 48 def attribute_value(params) val = params[attribute] val = val.call(klass) if val.respond_to?(:call) val end
raise_required_error!()
click to toggle source
# File lib/attr_inject/target.rb, line 62 def raise_required_error! raise Inject::InjectionError, ":#{attribute} is required for dependency injection." end
set_value(target, val)
click to toggle source
# File lib/attr_inject/target.rb, line 54 def set_value(target, val) target.instance_variable_set "@#{attribute}", val end
validate!(params)
click to toggle source
# File lib/attr_inject/target.rb, line 58 def validate!(params) raise_required_error! if !params.include?(attribute) && required? end