class ParamsReady::Ordering::Column
Constants
- DIRECTIONS
- NULLS_FIRST
- NULLS_LAST
Attributes
nulls[R]
ordering[R]
pk[R]
required[R]
table[R]
Public Class Methods
new(ordering, arel_table:, expression:, nulls: :default, required: false, pk: false)
click to toggle source
# File lib/params_ready/ordering/column.rb, line 14 def initialize(ordering, arel_table:, expression:, nulls: :default, required: false, pk: false) raise ParamsReadyError, "Invalid ordering value: #{ordering}" unless DIRECTIONS.include? ordering @ordering = ordering @table = arel_table @expression = expression @nulls = nulls @required = required @pk = pk end
Public Instance Methods
attribute(name, default_table, context)
click to toggle source
# File lib/params_ready/ordering/column.rb, line 28 def attribute(name, default_table, context) arel_table = table || default_table arel_builder = Helpers::ArelBuilder.instance(expression(name), arel_table: arel_table) arel_builder.to_arel(arel_table, context, self) end
clauses(attribute, direction, inverted: false)
click to toggle source
# File lib/params_ready/ordering/column.rb, line 34 def clauses(attribute, direction, inverted: false) clause = attribute.send direction if nulls == :default [clause] else values = null_substitution_values(nulls, inverted) nulls_last = Arel::Nodes::Case.new .when(attribute.eq(nil)).then(values[:null]) .else(values[:not_null]) [nulls_last, clause] end end
expression(name)
click to toggle source
# File lib/params_ready/ordering/column.rb, line 24 def expression(name) @expression || name end
null_substitution_values(policy, inverted)
click to toggle source
# File lib/params_ready/ordering/column.rb, line 48 def null_substitution_values(policy, inverted) case [policy, inverted] when [:first, false], [:last, true] NULLS_FIRST when [:last, false], [:first, true] NULLS_LAST else raise ParamsReadyError, "Unimplemented null handling policy: '#{nulls}' (inverted: #{inverted})" end end