lib/mls/resource.rb in mls-0.2.2 vs lib/mls/resource.rb in mls-0.2.3

- old
+ new

@@ -1,8 +1,9 @@ class MLS::Resource - attr_reader :errors, :persisted + attr_reader :persisted + attr_accessor :errors def self.inherited(subclass) subclass.extend(MLS::Model) end @@ -21,36 +22,65 @@ def persisted? @persisted end def save + new_record? ? create : update + end + + def save! new_record? ? create! : update! end - + + def update! + update || raise(MLS::Exception::RecordInvalid) + end + + def create! + create || raise(MLS::Exception::RecordInvalid) + end + + def ==(other) + self.class == other.class && properties_for_comparison == other.properties_for_comparison + end + # Properties =================================================================================================== def properties self.class.properties end + + def properties_for_comparison + compare = {} + properties.reject{ |k, p| properties_excluded_from_comparison.include?(k) }.each do |k, p| + compare[k] = self.send(properties[k].name.to_sym) + end + compare + end + + def properties_excluded_from_comparison + self.class.properties_excluded_from_comparison + 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) } + attrs.each { |k, v| self.send("#{k}=".to_sym, v) } unless attrs.nil? end # Combo Breaker ================================================================================================ def to_hash hash = {} properties.each do |name, property| - serialize = property.options[:serialize] || :always + serialize = property.options[:serialize] + serialize = :always if serialize.nil? 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) @@ -64,6 +94,6 @@ def to_key persisted? ? [id] : nil end -end \ No newline at end of file +end