module SimpleObjects::Attributes

Public Class Methods

included(base) click to toggle source
# File lib/simple_objects/attributes.rb, line 8
def self.included(base)
  base.extend(ClassMethods)
end

Protected Instance Methods

attributes() click to toggle source
# File lib/simple_objects/attributes.rb, line 47
def attributes
  self.class.attributes
end
mass_assign(inputs) click to toggle source
# File lib/simple_objects/attributes.rb, line 33
def mass_assign(inputs)
  attributes.each do |(name, attr)|
    value = inputs[name]
    if value
      mismatch(attr, value) if (type = attr.type) && !(value.is_a? type)
      set_value(name, value)
      next
    end

    missing(name) if attr.required
    set_value(name, attr.default) if attr.default
  end
end
mismatch(attribute, value) click to toggle source
# File lib/simple_objects/attributes.rb, line 59
def mismatch(attribute, value)
  raise MismatchedTypeError.new("Expected #{attribute.name} to be #{attribute.type} but was #{value.class}")
end
missing(name) click to toggle source
# File lib/simple_objects/attributes.rb, line 55
def missing(name)
  raise RequiredMissingError.new("Missing required value for #{name}")
end
set_value(name, value) click to toggle source
# File lib/simple_objects/attributes.rb, line 51
def set_value(name, value)
  instance_variable_set("@#{name}", value)
end