module Mumukit::Service::Collection
Public Instance Methods
all()
click to toggle source
# File lib/mumukit/service/collection.rb, line 8 def all project end
any?(criteria)
click to toggle source
# File lib/mumukit/service/collection.rb, line 16 def any?(criteria) mongo_collection.find(criteria).count > 0 end
count()
click to toggle source
# File lib/mumukit/service/collection.rb, line 12 def count mongo_collection.find.count end
delete!(id)
click to toggle source
# File lib/mumukit/service/collection.rb, line 24 def delete!(id) mongo_collection.delete_one(id: id) end
exists?(id)
click to toggle source
# File lib/mumukit/service/collection.rb, line 20 def exists?(id) any?(id: id) end
find(id)
click to toggle source
# File lib/mumukit/service/collection.rb, line 28 def find(id) find_by(id: id) end
find!(id)
click to toggle source
# File lib/mumukit/service/collection.rb, line 37 def find!(id) find_by!(id: id) end
find_by(args)
click to toggle source
# File lib/mumukit/service/collection.rb, line 32 def find_by(args) _find_by(args). try { |it| wrap it } end
find_by!(args)
click to toggle source
# File lib/mumukit/service/collection.rb, line 41 def find_by!(args) _find_by(args). tap { |first| validate_presence(args, first) }. try { |it| wrap it } end
first_by(args, options, projection={})
click to toggle source
# File lib/mumukit/service/collection.rb, line 77 def first_by(args, options, projection={}) find_projection(args, projection).sort(options).first.try { |it| wrap(it) } end
id_for_query(query)
click to toggle source
# File lib/mumukit/service/collection.rb, line 64 def id_for_query(query) mongo_collection.find(query).projection(id: 1).first.try { |it| it[:id] } end
insert!(json)
click to toggle source
# File lib/mumukit/service/collection.rb, line 47 def insert!(json) json.validate! with_id new_id do |id| mongo_collection.insert_one json.raw.merge(id) end end
method_missing(name, *args, &block)
click to toggle source
# File lib/mumukit/service/collection.rb, line 4 def method_missing(name, *args, &block) mongo_collection.send(name, *args, &block) end
migrate!(query={}) { |document| ... }
click to toggle source
# File lib/mumukit/service/collection.rb, line 86 def migrate!(query={}) where(query).each do |document| yield document upsert_by! :id, document end end
order_by(args, options, projection={})
click to toggle source
# File lib/mumukit/service/collection.rb, line 81 def order_by(args, options, projection={}) raw = find_projection(args, projection).sort(options).map { |it| wrap(it) } wrap_array raw end
uniq(key, filter, uniq_value)
click to toggle source
# File lib/mumukit/service/collection.rb, line 68 def uniq(key, filter, uniq_value) distinct(key, filter).uniq { |result| result[uniq_value] } end
update_attributes!(query, attribute)
click to toggle source
# File lib/mumukit/service/collection.rb, line 97 def update_attributes!(query, attribute) mongo_collection.update_one query, '$set': attribute end
upsert_attributes!(query, attribute)
click to toggle source
# File lib/mumukit/service/collection.rb, line 93 def upsert_attributes!(query, attribute) mongo_collection.update_one query, {'$set': attribute}, {upsert: true} end
upsert_by!(field, document)
click to toggle source
# File lib/mumukit/service/collection.rb, line 55 def upsert_by!(field, document) query = {field => document[field]} document.validate! with_id(id_for_query(query) || new_id) do |id| upsert_attributes!(query, document.raw.merge(id)) end end
where(args, projection={})
click to toggle source
# File lib/mumukit/service/collection.rb, line 72 def where(args, projection={}) raw = find_projection(args, projection).map { |it| wrap it } wrap_array raw end
Private Instance Methods
_find_by(args)
click to toggle source
# File lib/mumukit/service/collection.rb, line 107 def _find_by(args) mongo_collection.find(args).projection(_id: 0).first end
find_projection(args={}, projection={})
click to toggle source
# File lib/mumukit/service/collection.rb, line 115 def find_projection(args={}, projection={}) mongo_collection.find(args).projection(projection.merge(_id: 0)) end
mongo_collection()
click to toggle source
# File lib/mumukit/service/collection.rb, line 111 def mongo_collection mongo_database.client[mongo_collection_name] end
new_id()
click to toggle source
# File lib/mumukit/service/collection.rb, line 135 def new_id Mumukit::Service::IdGenerator.next end
project(&block)
click to toggle source
# File lib/mumukit/service/collection.rb, line 119 def project(&block) raw = find_projection.map { |it| wrap it } raw = raw.select(&block) if block_given? wrap_array raw end
validate_presence(args, first)
click to toggle source
# File lib/mumukit/service/collection.rb, line 103 def validate_presence(args, first) raise Mumukit::Service::DocumentNotFoundError, "document #{args.to_json} not found" unless first end
with_id(id) { |id_object| ... }
click to toggle source
# File lib/mumukit/service/collection.rb, line 139 def with_id(id) id_object = {id: id} yield id_object id_object end
wrap(mongo_document)
click to toggle source
# File lib/mumukit/service/collection.rb, line 127 def wrap(mongo_document) Mumukit::Service::Document.new mongo_document end
wrap_array(array)
click to toggle source
# File lib/mumukit/service/collection.rb, line 131 def wrap_array(array) Mumukit::Service::DocumentArray.new array, default_key: mongo_collection_name end