class DCA::MongoStorage

Attributes

collection[R]
database[R]

Public Class Methods

establish_connection(config) click to toggle source
# File lib/dca/storage/mongo_storage.rb, line 11
def self.establish_connection(config)
  Mongo::Connection.new config[:host], config[:port]
end
new(connection, context, options = {}) click to toggle source
# File lib/dca/storage/mongo_storage.rb, line 5
def initialize(connection, context, options = {})
  @database = connection.db(options[:database] || DCA.project_name.underscore)
  @connection = connection
  @collection = database.collection(options[:collection] || get_alias(context))
end

Public Instance Methods

context(object) click to toggle source
# File lib/dca/storage/mongo_storage.rb, line 45
def context object
  result = self.clone
  result.instance_variable_set :@collection, result.database.collection(get_alias object)
  result
end
create(item) click to toggle source
# File lib/dca/storage/mongo_storage.rb, line 33
def create(item)
  item.id = collection.insert hash_from item
end
find(position) click to toggle source
# File lib/dca/storage/mongo_storage.rb, line 25
def find position
  collection.find_one base_id: position.base_id unless position.base_id.nil?
end
refresh(item, state) click to toggle source
# File lib/dca/storage/mongo_storage.rb, line 29
def refresh(item, state)
  send state, item
end
remove(item) click to toggle source
# File lib/dca/storage/mongo_storage.rb, line 41
def remove(item)
  collection.remove _id: item.id
end
state(position) click to toggle source
# File lib/dca/storage/mongo_storage.rb, line 15
def state(position)
  item = find position
  return :create if item.nil?

  position.id = item['_id']
  return :unmodified if item['checksum'] == position.checksum

  return :update
end
update(item) click to toggle source
# File lib/dca/storage/mongo_storage.rb, line 37
def update(item)
  collection.update({_id: item.id}, hash_from(item))
end

Private Instance Methods

get_alias(object) click to toggle source
# File lib/dca/storage/mongo_storage.rb, line 59
def get_alias object
  object.respond_to?(:alias) ? object.alias : object.to_s.demodulize.downcase.pluralize
end
hash_from(item) click to toggle source
# File lib/dca/storage/mongo_storage.rb, line 53
def hash_from(item)
  data = item.to_hash
  data.delete(:id)
  data
end