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
- #build_order_by_query_part ⇒ Object
- #format_order_clauses(clauses) ⇒ Object
- #format_order_hash(clause) ⇒ Object
- #initial_values ⇒ Object
- #order_by(*clauses) ⇒ Object
- #order_by!(*clauses) ⇒ Object
Instance Method Details
#build_order_by_query_part ⇒ Object
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
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_values ⇒ Object
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 |