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