lib/couchbase-orm/utilities/index.rb in couchbase-orm-0.0.10 vs lib/couchbase-orm/utilities/index.rb in couchbase-orm-0.0.11

- old
+ new

@@ -48,17 +48,22 @@ end # use the bucket key as an index - lookup records by attr values define_singleton_method(find_by_method) do |*values| key = self.send(class_bucket_key_method, *values) - id = self.bucket.get(key, quiet: true) + id = nil + ::ActiveSupport::Dependencies.interlock.permit_concurrent_loads do + id = self.bucket.get(key, quiet: true) + end if id mod = self.find_by_id(id) return mod if mod # Clean up record if the id doesn't exist - self.bucket.delete(key, quiet: true) + ::ActiveSupport::Dependencies.interlock.permit_concurrent_loads do + self.bucket.delete(key, quiet: true) + end end nil end @@ -96,21 +101,27 @@ # after the values are persisted, delete the previous key and store the # new one. the id of the current record is used as the key's value. after_save do |record| original_key = instance_variable_get(original_bucket_key_var) - record.class.bucket.delete(original_key, quiet: true) if original_key + ::ActiveSupport::Dependencies.interlock.permit_concurrent_loads do + record.class.bucket.delete(original_key, quiet: true) if original_key + end unless presence == false && attrs.length == 1 && record[attrs[0]].nil? - record.class.bucket.set(record.send(bucket_key_method), record.id, plain: true) + ::ActiveSupport::Dependencies.interlock.permit_concurrent_loads do + record.class.bucket.set(record.send(bucket_key_method), record.id, plain: true) + end end instance_variable_set(original_bucket_key_var, nil) end # cleanup by removing the bucket key before the record is deleted # TODO: handle unpersisted, modified component values before_destroy do |record| - record.class.bucket.delete(record.send(bucket_key_method), quiet: true) + ::ActiveSupport::Dependencies.interlock.permit_concurrent_loads do + record.class.bucket.delete(record.send(bucket_key_method), quiet: true) + end true end # return the name used to construct the added method names so other # code can call the special index methods easily