Module: Mumukit::Service::Collection

Defined in:
lib/mumukit/service/collection.rb

Instance Method Summary collapse

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

#allObject



8
9
10
# File 'lib/mumukit/service/collection.rb', line 8

def all
  project
end

#any?(criteria) ⇒ Boolean

Returns:

  • (Boolean)


16
17
18
# File 'lib/mumukit/service/collection.rb', line 16

def any?(criteria)
  mongo_collection.find(criteria).count > 0
end

#countObject



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

Returns:

  • (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