class Minidoc
Constants
- VERSION
Public Class Methods
atomic_set(query, attributes)
click to toggle source
# File lib/minidoc.rb, line 67 def self.atomic_set(query, attributes) result = collection.update(query, "$set" => attributes) result["ok"] == 1 && result["n"] == 1 end
create(attrs = {})
click to toggle source
# File lib/minidoc.rb, line 35 def self.create(attrs = {}) new(attrs).tap(&:save) end
create!(*args)
click to toggle source
# File lib/minidoc.rb, line 39 def self.create!(*args) new(*args).tap(&:save!) end
delete(id)
click to toggle source
# File lib/minidoc.rb, line 43 def self.delete(id) collection.remove(_id: BSON::ObjectId(id.to_s)) end
delete_all()
click to toggle source
# File lib/minidoc.rb, line 31 def self.delete_all collection.remove({}) end
new(attrs = {})
click to toggle source
Calls superclass method
# File lib/minidoc.rb, line 96 def initialize(attrs = {}) if attrs["_id"].nil? && attrs[:_id].nil? attrs[:_id] = BSON::ObjectId.new end @new_record = true @destroyed = false super(attrs) end
rescue_duplicate_key_errors() { || ... }
click to toggle source
Rescue a duplicate key exception in the given block. Returns the result of the block, or false
if the exception was raised.
# File lib/minidoc.rb, line 84 def self.rescue_duplicate_key_errors yield rescue Minidoc::DuplicateKey false rescue Mongo::OperationFailure => ex if Minidoc::DuplicateKey.duplicate_key_exception(ex) false else raise end end
set(id, attributes)
click to toggle source
# File lib/minidoc.rb, line 47 def self.set(id, attributes) id = BSON::ObjectId(id.to_s) update_one(id, "$set" => attributes) end
unset(id, *keys)
click to toggle source
# File lib/minidoc.rb, line 52 def self.unset(id, *keys) id = BSON::ObjectId(id.to_s) unsets = {} keys.each do |key| unsets[key] = 1 end update_one(id, "$unset" => unsets) end
update_one(id, updates)
click to toggle source
# File lib/minidoc.rb, line 63 def self.update_one(id, updates) collection.update({ "_id" => id }, updates) end
value_class()
click to toggle source
# File lib/minidoc.rb, line 72 def self.value_class @value_class ||= Class.new(self) do attribute_set.each do |attr| private "#{attr.name}=" end private :attributes= end end
Public Instance Methods
==(other)
click to toggle source
# File lib/minidoc.rb, line 107 def ==(other) other.is_a?(self.class) && self.id && self.id == other.id end
as_value()
click to toggle source
# File lib/minidoc.rb, line 178 def as_value self.class.value_class.new(attributes) end
atomic_set(query, attributes)
click to toggle source
# File lib/minidoc.rb, line 166 def atomic_set(query, attributes) query[:_id] = id if self.class.atomic_set(query, attributes) attributes.each do |name, value| self[name] = value end true end end
delete()
click to toggle source
# File lib/minidoc.rb, line 123 def delete self.class.delete(id) end
destroy()
click to toggle source
# File lib/minidoc.rb, line 127 def destroy delete @destroyed = true end
destroyed?()
click to toggle source
# File lib/minidoc.rb, line 115 def destroyed? @destroyed end
new_record?()
click to toggle source
# File lib/minidoc.rb, line 111 def new_record? @new_record end
persisted?()
click to toggle source
# File lib/minidoc.rb, line 119 def persisted? !(new_record? || destroyed?) end
reload()
click to toggle source
# File lib/minidoc.rb, line 132 def reload new_object = self.class.find(self.id) or raise DocumentNotFoundError self.class.attribute_set.each do |attr| self[attr.name] = new_object[attr.name] end self end
save()
click to toggle source
# File lib/minidoc.rb, line 142 def save valid? ? create_or_update : false end
save!()
click to toggle source
# File lib/minidoc.rb, line 146 def save! valid? ? create_or_update : raise(RecordInvalid.new(self)) end
set(attributes)
click to toggle source
# File lib/minidoc.rb, line 150 def set(attributes) self.class.set(id, attributes) attributes.each do |name, value| self[name] = value end end
to_key()
click to toggle source
# File lib/minidoc.rb, line 182 def to_key [id.to_s] end
to_param()
click to toggle source
# File lib/minidoc.rb, line 186 def to_param id.to_s end
unset(*keys)
click to toggle source
# File lib/minidoc.rb, line 158 def unset(*keys) self.class.unset(id, *keys) keys.each do |key| self[key] = nil end end
Private Instance Methods
create()
click to toggle source
# File lib/minidoc.rb, line 204 def create self.class.collection << attributes end
create_or_update()
click to toggle source
# File lib/minidoc.rb, line 192 def create_or_update new_record? ? create : update @new_record = false true rescue Mongo::OperationFailure => exception if (duplicate_key_exception = Minidoc::DuplicateKey.duplicate_key_exception(exception)) raise duplicate_key_exception else raise end end
update()
click to toggle source
# File lib/minidoc.rb, line 208 def update self.class.collection.update({ _id: id }, { "$set" => attributes.except(:_id) }) end