Module: Ordy::Orm::ActiveRecord::Orderable::Order::ClassMethods

Defined in:
lib/ordy/orm/active_record/orderable.rb

Instance Method Summary collapse

Instance Method Details

#default_order(name = nil) ⇒ Object



160
161
162
# 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) ⇒ Object

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(”)

Parameters:

  • order_query (Hash) (defaults to: nil)


126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
# 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) ⇒ Object

Model.order_by_specified(:name)

Parameters:

  • name (Symbol)


155
156
157
158
# 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) ⇒ Object

orderable_by do

column :name
association :comments
specified(state: %w(new pending_migration migrating failed))

query(:topics) do |scope, args|
  ...
end

end

Parameters:

  • block (Proc)


108
109
110
111
112
# File 'lib/ordy/orm/active_record/orderable.rb', line 108

def orderable_by(&block)
  @_orderables ||= Order.new(self)
  @_orderables.instance_eval(&block)
  @_orderables
end