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