diff --git a/lib/couchrest/model/associations.rb b/lib/couchrest/model/associations.rb index f8e5a124..e98e48e5 100644 --- a/lib/couchrest/model/associations.rb +++ b/lib/couchrest/model/associations.rb @@ -183,19 +183,19 @@ def initialize(array, property, parent) casted_by[casted_by_property.to_s] << obj.id end end - + def << obj check_obj(obj) casted_by[casted_by_property.to_s] << obj.id super(obj) end - + def push(obj) check_obj(obj) casted_by[casted_by_property.to_s].push obj.id super(obj) end - + def unshift(obj) check_obj(obj) casted_by[casted_by_property.to_s].unshift obj.id @@ -212,7 +212,7 @@ def pop casted_by[casted_by_property.to_s].pop super end - + def shift casted_by[casted_by_property.to_s].shift super diff --git a/lib/couchrest/model/properties.rb b/lib/couchrest/model/properties.rb index 93cd447a..94ad48de 100644 --- a/lib/couchrest/model/properties.rb +++ b/lib/couchrest/model/properties.rb @@ -149,15 +149,13 @@ def property(name, *options, &block) # These properties are casted as Time objects, so they should always # be set to UTC. def timestamps! - class_eval <<-EOS, __FILE__, __LINE__ - property(:updated_at, Time, :read_only => true, :protected => true, :auto_validation => false) - property(:created_at, Time, :read_only => true, :protected => true, :auto_validation => false) + property(:updated_at, Time, :read_only => true, :protected => true, :auto_validation => false) + property(:created_at, Time, :read_only => true, :protected => true, :auto_validation => false) - set_callback :save, :before do |object| - write_attribute('updated_at', Time.now) - write_attribute('created_at', Time.now) if object.new? - end - EOS + set_callback :save, :before do |object| + write_attribute('updated_at', Time.now) + write_attribute('created_at', Time.now) if object.new? + end end protected @@ -191,42 +189,32 @@ def define_property(name, options={}, &block) # defines the getter for the property (and optional aliases) def create_property_getter(property) - # meth = property.name - class_eval <<-EOS, __FILE__, __LINE__ + 1 - def #{property.name} - read_attribute('#{property.name}') - end - EOS + define_method(property.name) do + read_attribute(property.name) + end if ['boolean', TrueClass.to_s.downcase].include?(property.type.to_s.downcase) - class_eval <<-EOS, __FILE__, __LINE__ - def #{property.name}? - value = read_attribute('#{property.name}') - !(value.nil? || value == false) - end - EOS + define_method("#{property.name}?") do + value = read_attribute(property.name) + !(value.nil? || value == false) + end end if property.alias - class_eval <<-EOS, __FILE__, __LINE__ + 1 - alias #{property.alias.to_sym} #{property.name.to_sym} - EOS + alias_method(property.alias, property.name.to_sym) end end # defines the setter for the property (and optional aliases) def create_property_setter(property) - property_name = property.name - class_eval <<-EOS - def #{property_name}=(value) - write_attribute('#{property_name}', value) - end - EOS + name = property.name + + define_method("#{name}=") do |value| + write_attribute(name, value) + end if property.alias - class_eval <<-EOS - alias #{property.alias.to_sym}= #{property_name.to_sym}= - EOS + alias_method "#{property.alias}=", "#{name}=" end end diff --git a/spec/fixtures/models/sale_invoice.rb b/spec/fixtures/models/sale_invoice.rb index 290dd9c4..5244ba59 100644 --- a/spec/fixtures/models/sale_invoice.rb +++ b/spec/fixtures/models/sale_invoice.rb @@ -1,7 +1,7 @@ require 'client' require 'sale_entry' -class SaleInvoice < CouchRest::Model::Base +class SaleInvoice < CouchRest::Model::Base use_database DB belongs_to :client