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