module Conglomerate::Particle

Public Class Methods

included(object) click to toggle source
# File lib/conglomerate/particle.rb, line 3
def self.included(object)
  object.send(:extend, ClassMethods)
end
new(attributes = {}) click to toggle source
# File lib/conglomerate/particle.rb, line 7
def initialize(attributes = {})
  self.class.attributes.each do |attr, attr_metadata|
    if attr_metadata[:required]
      raise "MissingAttribute" unless attributes[attr] || attributes[attr.to_s]
    end

    if attr_metadata[:type] == :array
      self.instance_variable_set("@#{attr}", Conglomerate::Array.new(attr_metadata[:contains]))
    end
  end

  attributes.each do |key, value|
    attrs = self.class.attributes
    if attrs[key.to_sym] && attrs[key.to_sym][:type] == :array
      array = value
      value = Conglomerate::Array.new(attrs[key.to_sym][:contains])
      array.each { |item| value << item }
      self.instance_variable_set("@#{key}", value)
    end

    self.send("#{key}=", value) if self.respond_to?("#{key}=")
  end
end