Module: Plucky::Query::DSL
- Included in:
- Plucky::Query
- Defined in:
- lib/plucky/query.rb
Overview
finder DSL methods to delegate to your model if you’re building an ODM e.g. MyModel.last needs to be equivalent to MyModel.query.last
Instance Method Summary collapse
- #all(opts = {}) ⇒ Object (also: #to_a)
- #count(opts = {}) ⇒ Object (also: #size)
- #distinct(key, opts = {}) ⇒ Object
- #empty? ⇒ Boolean
- #exists?(query_options = {}) ⇒ Boolean (also: #exist?)
- #find(*ids) ⇒ Object
- #find_each(opts = {}) ⇒ Object (also: #each)
- #find_one(opts = {}) ⇒ Object (also: #first)
- #ignore(*args) ⇒ Object
- #last(opts = {}) ⇒ Object
- #limit(count = nil) ⇒ Object
- #only(*args) ⇒ Object
- #paginate(opts = {}) ⇒ Object
- #per_page(limit = nil) ⇒ Object
- #projection(*args) ⇒ Object (also: #fields)
- #remove(opts = {}, driver_opts = {}) ⇒ Object
- #reverse ⇒ Object
- #skip(count = nil) ⇒ Object (also: #offset)
- #sort(*args) ⇒ Object (also: #order)
- #where(hash = {}) ⇒ Object (also: #filter)
Instance Method Details
#all(opts = {}) ⇒ Object Also known as: to_a
99 100 101 102 103 |
# File 'lib/plucky/query.rb', line 99 def all(opts={}) [].tap do |docs| find_each(opts) {|doc| docs << doc } end end |
#count(opts = {}) ⇒ Object Also known as: size
114 115 116 117 118 |
# File 'lib/plucky/query.rb', line 114 def count(opts={}) query = clone.amend(opts) cursor = query.view cursor.count end |
#distinct(key, opts = {}) ⇒ Object
120 121 122 123 |
# File 'lib/plucky/query.rb', line 120 def distinct(key, opts = {}) query = clone.amend(opts) query.collection.distinct(key, query.criteria_hash) end |
#empty? ⇒ Boolean
164 165 166 |
# File 'lib/plucky/query.rb', line 164 def empty? count == 0 end |
#exists?(query_options = {}) ⇒ Boolean Also known as: exist?
168 169 170 |
# File 'lib/plucky/query.rb', line 168 def exists?(={}) !only(:_id).find_one().nil? end |
#find(*ids) ⇒ Object
87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/plucky/query.rb', line 87 def find(*ids) return nil if ids.empty? single_id_find = ids.size == 1 && !ids[0].is_a?(Array) if single_id_find first(:_id => ids[0]) else all(:_id => ids.flatten) end end |
#find_each(opts = {}) ⇒ Object Also known as: each
68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/plucky/query.rb', line 68 def find_each(opts={}) query = clone.amend(opts) if block_given? enumerator = query.enumerator enumerator.each do |doc| yield doc end enumerator else query.enumerator end end |
#find_one(opts = {}) ⇒ Object Also known as: first
82 83 84 85 |
# File 'lib/plucky/query.rb', line 82 def find_one(opts={}) query = clone.amend(opts.merge(limit: -1)) query.enumerator.first end |
#ignore(*args) ⇒ Object
129 130 131 |
# File 'lib/plucky/query.rb', line 129 def ignore(*args) set_field_inclusion(args, 0) end |
#last(opts = {}) ⇒ Object
105 106 107 |
# File 'lib/plucky/query.rb', line 105 def last(opts={}) clone.amend(opts).reverse.find_one end |
#limit(count = nil) ⇒ Object
137 138 139 |
# File 'lib/plucky/query.rb', line 137 def limit(count=nil) clone.tap { |query| query.[:limit] = count } end |
#only(*args) ⇒ Object
133 134 135 |
# File 'lib/plucky/query.rb', line 133 def only(*args) set_field_inclusion(args, 1) end |
#paginate(opts = {}) ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/plucky/query.rb', line 54 def paginate(opts={}) page = opts.delete(:page) limit = opts.delete(:per_page) || per_page total_entries = opts.delete(:total_entries) query = clone.amend(opts) paginator = Pagination::Paginator.new(total_entries || query.count, page, limit) docs = query.amend({ :limit => paginator.limit, :skip => paginator.skip, }).all Pagination::Collection.new(docs, paginator) end |
#per_page(limit = nil) ⇒ Object
48 49 50 51 52 |
# File 'lib/plucky/query.rb', line 48 def per_page(limit=nil) return @per_page || 25 if limit.nil? @per_page = limit self end |
#projection(*args) ⇒ Object Also known as: fields
125 126 127 |
# File 'lib/plucky/query.rb', line 125 def projection(*args) clone.tap { |query| query.[:projection] = *args } end |
#remove(opts = {}, driver_opts = {}) ⇒ Object
109 110 111 112 |
# File 'lib/plucky/query.rb', line 109 def remove(opts={}, driver_opts={}) query = clone.amend(opts) query.collection.find(query.criteria_hash, driver_opts).delete_many end |
#reverse ⇒ Object
141 142 143 144 145 146 147 148 149 150 |
# File 'lib/plucky/query.rb', line 141 def reverse clone.tap do |query| sort = query[:sort] if sort.nil? query.[:sort] = [[:_id, -1]] else query.[:sort] = sort.map { |s| [s[0], -s[1]] } end end end |
#skip(count = nil) ⇒ Object Also known as: offset
152 153 154 |
# File 'lib/plucky/query.rb', line 152 def skip(count=nil) clone.tap { |query| query.[:skip] = count } end |
#sort(*args) ⇒ Object Also known as: order
156 157 158 |
# File 'lib/plucky/query.rb', line 156 def sort(*args) clone.tap { |query| query.[:sort] = *args } end |
#where(hash = {}) ⇒ Object Also known as: filter
160 161 162 |
# File 'lib/plucky/query.rb', line 160 def where(hash={}) clone.tap { |query| query.criteria.merge!(CriteriaHash.new(hash)) } end |