class Hikki::Adapters::MongoCollection

Attributes

connection[R]
db[R]
uuid_generator[R]

Public Class Methods

new(collection, connection, db, uuid_generator) click to toggle source
Calls superclass method
# File lib/hikki/adapters/mongo_collection.rb, line 6
def initialize(collection, connection, db, uuid_generator)
  super(collection)
  @connection = connection
  @db = db
  @uuid_generator = uuid_generator
end

Public Instance Methods

all(options={}) click to toggle source
# File lib/hikki/adapters/mongo_collection.rb, line 29
def all(options={})
  options = normalize_options(options)
  stringify_ids(limit(offset(db[collection].find.sort({ '_id' => 1 }), options[:offset]), options[:limit]).to_a)
end
find(id) click to toggle source
# File lib/hikki/adapters/mongo_collection.rb, line 25
def find(id)
  stringify_ids(db[collection].find('_id' => bson(id)).to_a).first || {}
end
find_by(field, value, options={}) click to toggle source
# File lib/hikki/adapters/mongo_collection.rb, line 34
def find_by(field, value, options={})
  options = normalize_options(options)
  stringify_ids(limit(offset(db[collection].find({ field.to_s => value }).sort({ '_id' => 1 }), options[:offset]), options[:limit]).to_a)
end
id_for(data) click to toggle source
# File lib/hikki/adapters/mongo_collection.rb, line 63
def id_for(data)
  data.fetch('id', data.fetch('_id', uuid_generator.new)).to_s
end
index(field) click to toggle source
# File lib/hikki/adapters/mongo_collection.rb, line 13
def index(field)
  db[collection].create_index(field.to_s)
  true
end
normalize_data(data) click to toggle source
# File lib/hikki/adapters/mongo_collection.rb, line 56
def normalize_data(data)
  deep_copy(data).tap do |d|
    d.merge!('id' => id_for(d))
    d.merge!('_id' => bson(d['id']))
  end
end
remove(id) click to toggle source
# File lib/hikki/adapters/mongo_collection.rb, line 39
def remove(id)
  db[collection].remove({ '_id' => bson(id)})
  true
end
remove_all() click to toggle source
# File lib/hikki/adapters/mongo_collection.rb, line 44
def remove_all
  db[collection].remove
  true
end
save(data) click to toggle source
# File lib/hikki/adapters/mongo_collection.rb, line 18
def save(data)
  data = normalize_data(data)
  db[collection].update({ '_id' => data['_id'] }, data, { upsert: true })
  data['_id'] = data['_id'].to_s
  data
end
stringify_ids(results) click to toggle source
# File lib/hikki/adapters/mongo_collection.rb, line 49
def stringify_ids(results)
  results.each do |result|
    result['_id'] = result['_id'].to_s if result.has_key? '_id'
  end
  results
end

Private Instance Methods

bson(id) click to toggle source
# File lib/hikki/adapters/mongo_collection.rb, line 68
def bson(id)
  uuid_generator.from_string(id.to_s)
rescue
  id.to_s
end
limit(cursor, limit) click to toggle source
# File lib/hikki/adapters/mongo_collection.rb, line 79
def limit(cursor, limit)
  return cursor unless limit > 0
  cursor.limit(limit)
end
offset(cursor, offset) click to toggle source
# File lib/hikki/adapters/mongo_collection.rb, line 74
def offset(cursor, offset)
  return cursor unless offset > 0
  cursor.skip(offset)
end