Module: Mumukit::Service::Collection
- Defined in:
- lib/mumukit/service/collection.rb
Instance Method Summary
collapse
-
#all ⇒ Object
-
#any?(criteria) ⇒ Boolean
-
#count ⇒ Object
-
#delete!(id) ⇒ Object
-
#exists?(id) ⇒ Boolean
-
#find(id) ⇒ Object
-
#find!(id) ⇒ Object
-
#find_by(args) ⇒ Object
-
#find_by!(args) ⇒ Object
-
#first_by(args, options, projection = {}) ⇒ Object
-
#id_for_query(query) ⇒ Object
-
#insert!(json) ⇒ Object
-
#method_missing(name, *args, &block) ⇒ Object
-
#migrate!(query = {}) ⇒ Object
-
#order_by(args, options, projection = {}) ⇒ Object
-
#uniq(key, filter, uniq_value) ⇒ Object
-
#update_attributes!(query, attribute) ⇒ Object
-
#upsert_attributes!(query, attribute) ⇒ Object
-
#upsert_by!(field, document) ⇒ Object
-
#where(args, projection = {}) ⇒ Object
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args, &block) ⇒ Object
4
5
6
|
# File 'lib/mumukit/service/collection.rb', line 4
def method_missing(name, *args, &block)
mongo_collection.send(name, *args, &block)
end
|
Instance Method Details
#all ⇒ Object
8
9
10
|
# File 'lib/mumukit/service/collection.rb', line 8
def all
project
end
|
#any?(criteria) ⇒ Boolean
16
17
18
|
# File 'lib/mumukit/service/collection.rb', line 16
def any?(criteria)
mongo_collection.find(criteria).count > 0
end
|
#count ⇒ Object
12
13
14
|
# File 'lib/mumukit/service/collection.rb', line 12
def count
mongo_collection.find.count
end
|
#delete!(id) ⇒ Object
24
25
26
|
# File 'lib/mumukit/service/collection.rb', line 24
def delete!(id)
mongo_collection.delete_one(id: id)
end
|
#exists?(id) ⇒ Boolean
20
21
22
|
# File 'lib/mumukit/service/collection.rb', line 20
def exists?(id)
any?(id: id)
end
|
#find(id) ⇒ Object
28
29
30
|
# File 'lib/mumukit/service/collection.rb', line 28
def find(id)
find_by(id: id)
end
|
#find!(id) ⇒ Object
37
38
39
|
# File 'lib/mumukit/service/collection.rb', line 37
def find!(id)
find_by!(id: id)
end
|
#find_by(args) ⇒ Object
32
33
34
35
|
# File 'lib/mumukit/service/collection.rb', line 32
def find_by(args)
_find_by(args).
try { |it| wrap it }
end
|
#find_by!(args) ⇒ Object
41
42
43
44
45
|
# 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 = {}) ⇒ Object
77
78
79
|
# 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) ⇒ Object
64
65
66
|
# 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) ⇒ Object
47
48
49
50
51
52
53
|
# 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
|
#migrate!(query = {}) ⇒ Object
86
87
88
89
90
91
|
# 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 = {}) ⇒ Object
81
82
83
84
|
# 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) ⇒ Object
68
69
70
|
# 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) ⇒ Object
97
98
99
|
# 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) ⇒ Object
93
94
95
|
# 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) ⇒ Object
55
56
57
58
59
60
61
62
|
# 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 = {}) ⇒ Object
72
73
74
75
|
# 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
|