module Ordy::Orm::ActiveRecord::Orderable::Order::ClassMethods
Public Instance Methods
default_order(name = nil)
click to toggle source
# File lib/ordy/orm/active_record/orderable.rb, line 160 def default_order(name = nil) default_scope.instance_exec(&@_orderables.default(name)) end
order_by(order_query = nil)
click to toggle source
Model.order_by(name: :desc)
Model.order_by('name-desc')
Default direction :asc Model.order_by(name)
Call default do method or order(nil) Model.order_by(nil) Model.order_by('')
@param [Hash] order_query
# File lib/ordy/orm/active_record/orderable.rb, line 126 def order_by(order_query = nil) return default_order if order_query.nil? || order_query.blank? return default_order(order_query) if order_query.is_a?(Symbol) specs = case order_query when String then parse_order_query(order_query) when Hash then parse_order_hash(order_query) else [] end return default_order if specs.blank? scope = default_scope specs.each do |spec| orderable = @_orderables[spec[:orderable]] orderable[:args][:direction] = spec[:direction] scope = orderable[:orderable].call(scope, orderable[:args]) end scope end
order_by_specified(name)
click to toggle source
Model.order_by_specified(:name)
@param [Symbol] name
# File lib/ordy/orm/active_record/orderable.rb, line 155 def order_by_specified(name) orderable = @_orderables["specified_#{name}".to_sym] orderable[:orderable].call(default_scope, orderable[:args]) end
orderable_by(&block)
click to toggle source
orderable_by
do
column :name association :comments specified(state: %w(new pending_migration migrating failed)) query(:topics) do |scope, args| ... end
end
@param [Proc] block
# File lib/ordy/orm/active_record/orderable.rb, line 108 def orderable_by(&block) @_orderables ||= Order.new(self) @_orderables.instance_eval(&block) @_orderables end
Private Instance Methods
default_scope()
click to toggle source
# File lib/ordy/orm/active_record/orderable.rb, line 180 def default_scope current_scope || where(nil) end
parse_order_hash(order_query)
click to toggle source
@param [Hash] order_query # @return [Array]
# File lib/ordy/orm/active_record/orderable.rb, line 168 def parse_order_hash(order_query) order_query.symbolize_keys.map { |(orderable, direction)| { orderable: orderable, direction: direction } } end
parse_order_query(order_query)
click to toggle source
@param [String] order_query @return [Array]
# File lib/ordy/orm/active_record/orderable.rb, line 174 def parse_order_query(order_query) orderable, direction = order_query.to_s.split(DELIMITER).map(&:to_s).map(&:strip) direction = 'asc' unless %w(desc asc).include?(direction) [{ orderable: orderable.to_sym, direction: direction.to_sym }] end