Sha256: 1ae466e15bae1135b090c1fac56526c5869a5580947dafbbeb9c1dd48c3ef68d

Contents?: true

Size: 1.38 KB

Versions: 3

Compression:

Stored size: 1.38 KB

Contents

class MLS::Resource

  attr_reader :errors, :persisted

  def self.inherited(subclass)
    subclass.extend(MLS::Model)
  end

  def initialize(attributes = {}, persisted = false)
    @persisted = persisted
    @errors = {}
    
    set_default_values
    update_attributes(attributes)
  end
  
  def new_record?
    !@persisted
  end
  
  def persisted?
    @persisted
  end
  
  def save
    new_record? ? create! : update!
  end
  
  # Properties ===================================================================================================
  
  def properties
    self.class.properties
  end
  
  def set_default_values
    properties.each do |name, property|
      self.send("#{name}=".to_sym, property.default) if property.default
    end
  end

  def update_attributes(attrs)
    attrs.each { |k, v| self.send("#{k}=".to_sym, v) }
  end
  
  # Combo Breaker ================================================================================================

  def to_hash
    hash = {}
    
    properties.each do |name, property|
      serialize = property.options[:serialize] || :always
      case serialize
      when :always
        hash[name] = property.dump(self.send(name))
      when :if_present
        hash[name] = property.dump(self.send(name)) if self.send(name)
      end
    end
    
    hash
  end
  
  #== for rails form stuff
  
  def to_key
    persisted? ? [id] : nil
  end
  
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
mls-0.2.2 lib/mls/resource.rb
mls-0.2.1 lib/mls/resource.rb
mls-0.2.0 lib/mls/resource.rb