module Assignbot

our Assignbot gem

Constants

VERSION

Public Class Methods

included(base) click to toggle source
# File lib/assignbot.rb, line 14
def self.included(base)
  base.extend(Assignbot::ClassDsl)
end

Public Instance Methods

assign(hash) click to toggle source
# File lib/assignbot.rb, line 38
def assign(hash)
  assignbot_assign(:default, hash)
end
method_missing(name, *args, &block) click to toggle source
Calls superclass method
# File lib/assignbot.rb, line 42
def method_missing(name, *args, &block)
  if name =~ /assign_/i
    assigner_name = name.to_s.gsub(/^assign_/i, '')
    assignbot_assign(assigner_name, args[0])
  else
    super(name, *args, &block)
  end
end

Private Instance Methods

assignbot_assign(assigner_name, hash) click to toggle source
# File lib/assignbot.rb, line 18
def assignbot_assign(assigner_name, hash)
  assignable = Assignbot::Core.get_assignable(self.class)
  assigner = assignable.get_assigner(assigner_name)
  fail AssigningError, "Undefined assigner scope: #{assigner_name}" unless assigner_name.to_sym == :default

  if assigner && assigner.variables.any?
    # use explicitly from defined variables
    assigner.variables.each do |_, variable_ic|
      source_variable = variable_ic.source_variable
      value = hash[source_variable.to_s] || hash[source_variable.to_sym]
      send(variable_ic.receptor, value)
    end
  else
    hash.each do |target_variable, value|
      send(:"#{target_variable}=", value)
    end
  end
end