module Querifier::Queries::Order

Public Class Methods

included(klass) click to toggle source
# File lib/querifier/queries/order.rb, line 55
def self.included(klass)
  klass.extend(ClassMethods)
end

Public Instance Methods

collection() click to toggle source
Calls superclass method
# File lib/querifier/queries/order.rb, line 4
def collection
  super
  order
  @collection
end
method_missing(message, *args, &block) click to toggle source
Calls superclass method
# File lib/querifier/queries/order.rb, line 45
def method_missing(message, *args, &block)
  return order_by(Regexp.last_match(1).to_sym, *args) if message.to_s =~ /order_by_(.*)/ # rubocop:disable Performance/RegexpMatch, Metrics/LineLength
  super
end
order() click to toggle source
# File lib/querifier/queries/order.rb, line 10
def order
  return self if @ordered
  if valid_sort?
    # TODO: Permit multiple orders
    option = order_params.keys.first
    direction = order_params.fetch(option, nil)
    send("order_by_#{option}", direction)
  else
    order_by_default
  end
  @ordered = true
  self
end
order_by(option, direction) click to toggle source
# File lib/querifier/queries/order.rb, line 28
def order_by(option, direction)
  @collection = @collection.order(option => direction)
end
order_by_default() click to toggle source
# File lib/querifier/queries/order.rb, line 24
def order_by_default
  order_by(*self.class.default_sort.to_a.flatten)
end
order_params() click to toggle source
# File lib/querifier/queries/order.rb, line 50
def order_params
  @order_params ||=
    params.fetch(Config.order_param, {}).select { |(k, _)| valid_option? k.to_sym }
end
valid_option?(option) click to toggle source
# File lib/querifier/queries/order.rb, line 41
def valid_option?(option)
  self.class.order_attributes.include?(option.to_sym)
end
valid_sort?() click to toggle source
# File lib/querifier/queries/order.rb, line 32
def valid_sort?
  option = order_params.keys.first
  direction = order_params.fetch(option, nil)
  option &&
    direction &&
    valid_option?(option) &&
    %w[asc desc].include?(direction.to_s.downcase)
end