module StoresInMongo::DocumentMethods

Public Instance Methods

changed?() click to toggle source
Calls superclass method
# File lib/stores_in_mongo/document_methods.rb, line 42
def changed?
  @mongo_dirty || super
end
deep_dup(*args) click to toggle source
Calls superclass method
# File lib/stores_in_mongo/document_methods.rb, line 36
def deep_dup(*args)
  copy = super
  copy.mongo_document = mongo_document.deep_dup
  return copy
end
mongo_class() click to toggle source
# File lib/stores_in_mongo/document_methods.rb, line 11
def mongo_class
  if self.stores_in_mongo_options[:use_sessions]
    mongo_class_name.constantize.with(session: mongo_session)
  else
    mongo_class_name.constantize
  end
end
mongo_class_column() click to toggle source
# File lib/stores_in_mongo/document_methods.rb, line 23
def mongo_class_column
  self.stores_in_mongo_options[:polymorphic] && self.stores_in_mongo_options[:class_name]
end
mongo_class_name() click to toggle source
# File lib/stores_in_mongo/document_methods.rb, line 3
def mongo_class_name
  if self.stores_in_mongo_options[:polymorphic]
    self.public_send(mongo_class_column) or raise RuntimeError, "No mongo type specified in #{mongo_class_column} for #{self}! Initialize your model with a value or use a column default."
  else
    self.stores_in_mongo_options[:class_name]
  end
end
mongo_key() click to toggle source
# File lib/stores_in_mongo/document_methods.rb, line 19
def mongo_key
  self.public_send(mongo_key_column)
end
mongo_key_column() click to toggle source
# File lib/stores_in_mongo/document_methods.rb, line 27
def mongo_key_column
  stores_in_mongo_options[:foreign_key]
end
reload(*args) click to toggle source
Calls superclass method
# File lib/stores_in_mongo/document_methods.rb, line 31
def reload(*args)
  clear_mongo_cache
  super
end

Protected Instance Methods

mongo_document=(mongo_document) click to toggle source
# File lib/stores_in_mongo/document_methods.rb, line 48
def mongo_document=(mongo_document)
  # We can't easily determine in-place data modification, so always mark as dirty if data has been loaded
  # TODO: only mark as dirty if data has actually changed. Clear dirty on a fresh load.
  mark_mongo_owner_as_dirty
  @mongo_document = mongo_document
  set_mongo_document_id
  return mongo_document
end

Private Instance Methods

clear_mongo_cache() click to toggle source
# File lib/stores_in_mongo/document_methods.rb, line 73
def clear_mongo_cache
  @mongo_document = nil
end
clear_mongo_owner_dirty() click to toggle source
# File lib/stores_in_mongo/document_methods.rb, line 64
def clear_mongo_owner_dirty
  @mongo_dirty = false
  return true
end
destroy_mongo_document() click to toggle source
# File lib/stores_in_mongo/document_methods.rb, line 103
def destroy_mongo_document
  return true if !mongo_document_loaded?
  mongo_document.destroy
end
fetch_mongo_document() click to toggle source
# File lib/stores_in_mongo/document_methods.rb, line 88
def fetch_mongo_document
  mongo_class.where(id: mongo_key).first
end
initialize_mongo_document() click to toggle source
# File lib/stores_in_mongo/document_methods.rb, line 92
def initialize_mongo_document
  mongo_class.new
end
mark_mongo_owner_as_dirty() click to toggle source
# File lib/stores_in_mongo/document_methods.rb, line 59
def mark_mongo_owner_as_dirty
  @mongo_dirty = true
  return true
end
mongo_document(reload = false) click to toggle source
# File lib/stores_in_mongo/document_methods.rb, line 83
def mongo_document(reload = false)
  return @mongo_document if !reload && mongo_document_loaded?
  self.mongo_document = fetch_mongo_document || initialize_mongo_document
end
mongo_document_loaded?() click to toggle source
# File lib/stores_in_mongo/document_methods.rb, line 69
def mongo_document_loaded?
  @mongo_document.present?
end
save_mongo_document() click to toggle source
# File lib/stores_in_mongo/document_methods.rb, line 96
def save_mongo_document
  return true if !mongo_document_loaded?
  mongo_document.save!
  set_mongo_document_id
  return true
end
set_mongo_document_id() click to toggle source
# File lib/stores_in_mongo/document_methods.rb, line 77
def set_mongo_document_id
  assign_attributes(stores_in_mongo_options[:class_name] => mongo_document.class.name) if self.stores_in_mongo_options[:polymorphic]
  assign_attributes(stores_in_mongo_options[:foreign_key] => mongo_document.id)
  return mongo_key
end