module MadCart::Model::Base

Public Class Methods

included(base) click to toggle source
# File lib/mad_cart/model/base.rb, line 10
def self.included(base)
  base.extend ClassMethods
  base.class_eval do
    include AttributeMapper
    include InheritableAttributes
    attr_accessor :additional_attributes
    inheritable_attributes :required_attrs
    attr_accessor(*exposed_attributes)
  end
end
new(args={}) click to toggle source
# File lib/mad_cart/model/base.rb, line 4
def initialize(args={})
  self.additional_attributes = {}
  check_required_attributes(args)
  args.each { |k,v| set_attribute(k, v) }
end

Public Instance Methods

define_attribute_accessors() click to toggle source
# File lib/mad_cart/model/base.rb, line 21
def define_attribute_accessors
  klass.class_eval do
    attr_accessor(*exposed_attributes)
  end
end

Private Instance Methods

check_required_attributes(args) click to toggle source
# File lib/mad_cart/model/base.rb, line 27
def check_required_attributes(args)
  return unless klass.required_attrs

  keys = args.keys.map{|a| a.to_s }
  klass.required_attrs.each do |attr|
    raise(ArgumentError, "missing argument: #{attr}") if !keys.include?(attr)
  end
end
klass() click to toggle source
# File lib/mad_cart/model/base.rb, line 49
def klass
  self.class
end
set_attribute(key, value) click to toggle source
# File lib/mad_cart/model/base.rb, line 37
def set_attribute(key, value)
  attr_name = klass.map_attribute_name(key)

  if klass.exposed_attributes.include? attr_name.to_s
    define_attribute_accessors unless self.respond_to?(attr_name)
    self.send("#{attr_name}=", value) unless value.nil?
  else
    self.additional_attributes[attr_name.to_s] = value unless value.nil?
  end
end