class Middleman::Sitemap::Queryable::Query
def all
def all result = @model.select(:where => @where, :order_by => @order_by) if @offset.present? result = result.last([result.size - @offset, 0].max) end if @limit.present? result = result.first(@limit) end result end
def first
def first self.all.first end
def initialize(model, opts={})
def initialize(model, opts={}) @model = model @where = opts[:where] || {} @order_by = opts[:order_by] @offset = opts[:offset] @limit = opts[:limit] end
def last
def last self.all.last end
def limit(number)
def limit(number) Query.new @model, opts(:limit => number) end
def offset(number)
def offset(number) Query.new @model, opts(:offset => number) end
def opts new_opts
def opts new_opts { :where => {}.merge(@where), :order_by => @order_by, :offset => @offset, :limit => @limit }.merge(new_opts) end
def order_by(field)
def order_by(field) Query.new @model, opts(:order_by => field.is_a?(Symbol) ? {field => :asc} : field) end
def where(constraints_hash)
def where(constraints_hash) selector_hash = constraints_hash.reject { |key, value| !key.is_a? Selector } symbol_hash = constraints_hash.reject { |key, value| 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