class Middleman::Sitemap::Queryable::Query

Public Class Methods

new(model, opts={}) click to toggle source
# File lib/middleman-core/sitemap/queryable.rb, line 67
def initialize(model, opts={})
  @model = model
  @where = opts[:where] || {}
  @order_by = opts[:order_by]
  @offset = opts[:offset]
  @limit = opts[:limit]
end

Public Instance Methods

all() click to toggle source
# File lib/middleman-core/sitemap/queryable.rb, line 113
def all
  result = @model.select(where: @where, order_by: @order_by)
  result = result.last([result.size - @offset, 0].max) if @offset.present?
  result = result.first(@limit) if @limit.present?
  result
end
first() click to toggle source
# File lib/middleman-core/sitemap/queryable.rb, line 105
def first
  all.first
end
last() click to toggle source
# File lib/middleman-core/sitemap/queryable.rb, line 109
def last
  all.last
end
limit(number) click to toggle source
# File lib/middleman-core/sitemap/queryable.rb, line 101
def limit(number)
  Query.new @model, opts(limit: number)
end
offset(number) click to toggle source
# File lib/middleman-core/sitemap/queryable.rb, line 97
def offset(number)
  Query.new @model, opts(offset: number)
end
opts(new_opts) click to toggle source
# File lib/middleman-core/sitemap/queryable.rb, line 85
def opts(new_opts)
  { where: {}.merge(@where),
    order_by: @order_by,
    offset: @offset,
    limit: @limit
  }.merge(new_opts)
end
order_by(field) click to toggle source
# File lib/middleman-core/sitemap/queryable.rb, line 93
def order_by(field)
  Query.new @model, opts(order_by: field.is_a?(Symbol) ? { field => :asc } : field)
end
where(constraints_hash) click to toggle source
# File lib/middleman-core/sitemap/queryable.rb, line 75
def where(constraints_hash)
  selector_hash = constraints_hash.reject { |key, _| !key.is_a? Selector }
  symbol_hash = constraints_hash.reject { |key, _| key.is_a? Selector }
  symbol_hash.each do |attribute, value|
    selector = Selector.new(attribute: attribute, operator: 'equal')
    selector_hash.update(selector => value)
  end
  Query.new @model, opts(where: @where.merge(selector_hash))
end