Module: XeroKiwi::Query::Order

Defined in:
lib/xero_kiwi/query/order.rb

Overview

Compiles a Ruby-native order spec into Xero’s ‘order` query param.

XeroKiwi::Query::Order.compile(
  { date: :desc, invoice_number: :asc },
  fields: Invoice.query_fields
)
# => "Date DESC,InvoiceNumber ASC"

String input is passed through unchanged (raw escape hatch).

Class Method Summary collapse

Class Method Details

.clause(name, direction, fields) ⇒ Object



26
27
28
29
30
31
32
# File 'lib/xero_kiwi/query/order.rb', line 26

def clause(name, direction, fields)
  spec = fields.fetch(name) do
    raise ArgumentError, "unknown order field: #{name.inspect}"
  end

  "#{spec[:path]} #{direction.to_s.upcase}"
end

.compile(order, fields:) ⇒ Object

Raises:

  • (ArgumentError)


17
18
19
20
21
22
23
24
# File 'lib/xero_kiwi/query/order.rb', line 17

def compile(order, fields:)
  return nil if order.nil?
  return order if order.is_a?(String)

  raise ArgumentError, "order must be a Hash or String, got #{order.class}" unless order.is_a?(Hash)

  order.map { |name, direction| clause(name, direction, fields) }.join(",")
end