some optimisations
This commit is contained in:
parent
4e8e5ee0d1
commit
ce2e2fc9a6
18
Gemfile.lock
18
Gemfile.lock
|
@ -12,9 +12,9 @@ GEM
|
||||||
remote: http://rubygems.org/
|
remote: http://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
abstract (1.0.0)
|
abstract (1.0.0)
|
||||||
actionpack (3.0.4)
|
actionpack (3.0.5)
|
||||||
activemodel (= 3.0.4)
|
activemodel (= 3.0.5)
|
||||||
activesupport (= 3.0.4)
|
activesupport (= 3.0.5)
|
||||||
builder (~> 2.1.2)
|
builder (~> 2.1.2)
|
||||||
erubis (~> 2.6.6)
|
erubis (~> 2.6.6)
|
||||||
i18n (~> 0.4)
|
i18n (~> 0.4)
|
||||||
|
@ -22,11 +22,11 @@ GEM
|
||||||
rack-mount (~> 0.6.13)
|
rack-mount (~> 0.6.13)
|
||||||
rack-test (~> 0.5.7)
|
rack-test (~> 0.5.7)
|
||||||
tzinfo (~> 0.3.23)
|
tzinfo (~> 0.3.23)
|
||||||
activemodel (3.0.4)
|
activemodel (3.0.5)
|
||||||
activesupport (= 3.0.4)
|
activesupport (= 3.0.5)
|
||||||
builder (~> 2.1.2)
|
builder (~> 2.1.2)
|
||||||
i18n (~> 0.4)
|
i18n (~> 0.4)
|
||||||
activesupport (3.0.4)
|
activesupport (3.0.5)
|
||||||
builder (2.1.2)
|
builder (2.1.2)
|
||||||
couchrest (1.0.1)
|
couchrest (1.0.1)
|
||||||
json (>= 1.4.6)
|
json (>= 1.4.6)
|
||||||
|
@ -43,9 +43,9 @@ GEM
|
||||||
rack (>= 1.0.0)
|
rack (>= 1.0.0)
|
||||||
rack-test (0.5.7)
|
rack-test (0.5.7)
|
||||||
rack (>= 1.0)
|
rack (>= 1.0)
|
||||||
railties (3.0.4)
|
railties (3.0.5)
|
||||||
actionpack (= 3.0.4)
|
actionpack (= 3.0.5)
|
||||||
activesupport (= 3.0.4)
|
activesupport (= 3.0.5)
|
||||||
rake (>= 0.8.7)
|
rake (>= 0.8.7)
|
||||||
thor (~> 0.14.4)
|
thor (~> 0.14.4)
|
||||||
rake (0.8.7)
|
rake (0.8.7)
|
||||||
|
|
|
@ -12,6 +12,8 @@ class BenchmarkCasted < Hash
|
||||||
end
|
end
|
||||||
|
|
||||||
class BenchmarkModel < CouchRest::Model::Base
|
class BenchmarkModel < CouchRest::Model::Base
|
||||||
|
use_database CouchRest.database!(ENV['BENCHMARK_DB'] || "http://localhost:5984/test")
|
||||||
|
|
||||||
property :string, String
|
property :string, String
|
||||||
property :number, Integer
|
property :number, Integer
|
||||||
property :casted, BenchmarkCasted
|
property :casted, BenchmarkCasted
|
||||||
|
@ -60,5 +62,13 @@ begin
|
||||||
n.times { b.casted_list }
|
n.times { b.casted_list }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# db writing
|
||||||
|
if ENV['BENCHMARK_DB']
|
||||||
|
x.report("write record") do
|
||||||
|
# need to make change before it will save
|
||||||
|
n.times { b.string = "test#{n}"; b.save }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -18,9 +18,7 @@ module CouchRest
|
||||||
def couchrest_attribute_will_change!(attr)
|
def couchrest_attribute_will_change!(attr)
|
||||||
return if attr.nil?
|
return if attr.nil?
|
||||||
self.send("#{attr}_will_change!")
|
self.send("#{attr}_will_change!")
|
||||||
if pkey = casted_by_attribute
|
couchrest_parent_will_change!
|
||||||
@casted_by.couchrest_attribute_will_change!(pkey)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def couchrest_parent_will_change!
|
def couchrest_parent_will_change!
|
||||||
|
@ -31,9 +29,9 @@ module CouchRest
|
||||||
|
|
||||||
# return the attribute name this object is referenced by in the parent
|
# return the attribute name this object is referenced by in the parent
|
||||||
def casted_by_attribute
|
def casted_by_attribute
|
||||||
return nil unless @casted_by
|
return @casted_by_attribute if @casted_by_attribute_set
|
||||||
attr = @casted_by.attributes
|
attr = @casted_by.attributes
|
||||||
attr.keys.detect { |k| attr[k] == self }
|
@casted_by_attribute = attr.keys.detect { |k| attr[k] == self }
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -53,16 +53,22 @@ module CouchRest
|
||||||
end
|
end
|
||||||
|
|
||||||
def []=(key,value)
|
def []=(key,value)
|
||||||
old_id = get_unique_id if self.respond_to?(:get_unique_id)
|
has_changes = self.changed?
|
||||||
|
if !has_changes && self.respond_to?(:get_unique_id)
|
||||||
|
check_id_change = true
|
||||||
|
old_id = get_unique_id
|
||||||
|
end
|
||||||
|
|
||||||
super(key, value)
|
ret = super(key, value)
|
||||||
|
|
||||||
if self.respond_to?(:get_unique_id)
|
if check_id_change
|
||||||
# if we have set an attribute that results in the _id changing (unique_id),
|
# if we have set an attribute that results in the _id changing (unique_id),
|
||||||
# force changed? to return true so that the record can be saved
|
# force changed? to return true so that the record can be saved
|
||||||
new_id = get_unique_id
|
new_id = get_unique_id
|
||||||
changed_attributes["_id"] = new_id if old_id != new_id
|
changed_attributes["_id"] = new_id if old_id != new_id
|
||||||
end
|
end
|
||||||
|
|
||||||
|
ret
|
||||||
end
|
end
|
||||||
|
|
||||||
# Takes a hash as argument, and applies the values by using writer methods
|
# Takes a hash as argument, and applies the values by using writer methods
|
||||||
|
@ -181,8 +187,8 @@ module CouchRest
|
||||||
property(:created_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|
|
set_callback :save, :before do |object|
|
||||||
write_attribute_dirty('updated_at', Time.now)
|
write_attribute('updated_at', Time.now)
|
||||||
write_attribute_dirty('created_at', Time.now) if object.new?
|
write_attribute('created_at', Time.now) if object.new?
|
||||||
end
|
end
|
||||||
EOS
|
EOS
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue