Module: ActiveHouse::Querying::OrderBy

Extended by:
ActiveSupport::Concern
Included in:
ActiveHouse::QueryBuilder
Defined in:
lib/active_house/querying/order_by.rb

Instance Method Summary collapse

Instance Method Details

#build_order_by_query_partObject



12
13
14
# File 'lib/active_house/querying/order_by.rb', line 12

def build_order_by_query_part
  "ORDER BY #{values[:order_by].join(', ')}" unless values[:order_by].empty?
end

#format_order_clauses(clauses) ⇒ Object

Raises:

  • (ArgumentError)


30
31
32
33
34
35
36
37
38
39
40
# File 'lib/active_house/querying/order_by.rb', line 30

def format_order_clauses(clauses)
  raise ArgumentError, 'wrong number of arguments' if clauses.empty?

  clauses.map do |clause|
    if clause.is_a?(Hash)
      format_order_hash(clause)
    else
      clause.to_s
    end
  end
end

#format_order_hash(clause) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/active_house/querying/order_by.rb', line 42

def format_order_hash(clause)
  if clause.keys.one?
    direction = clause.values.first
    raise ArgumentError, 'direction must be asc or desc' unless [:asc, :desc].include?(direction.try!(:to_sym))
    "#{clause.keys.first} #{direction.to_s.upcase}"
  else
    clause.assert_valid_keys(:field, :direction, :collate)
    [
        clause.fetch(:field),
        clause[:direction].try!(:to_s).try!(:upcase),
        clause.key?(:collate) ? "COLLATE '#{clause[:collate]}'" : nil
    ].reject(&:nil?).join(' ')
  end
end

#initial_valuesObject



16
17
18
# File 'lib/active_house/querying/order_by.rb', line 16

def initial_values
  super.merge order_by: []
end

#order_by(*clauses) ⇒ Object



26
27
28
# File 'lib/active_house/querying/order_by.rb', line 26

def order_by(*clauses)
  dup.order_by!(*clauses)
end

#order_by!(*clauses) ⇒ Object



20
21
22
23
24
# File 'lib/active_house/querying/order_by.rb', line 20

def order_by!(*clauses)
  formatter_clauses = format_order_clauses(clauses)
  values[:order_by] = (values[:order_by] + formatter_clauses).uniq
  self
end