Class: Lutaml::UmlRepository::QueryDSL::Order

Inherits:
Object
  • Object
show all
Defined in:
lib/lutaml/uml_repository/query_dsl/order.rb

Overview

Order specification for sorting query results

Sorts results based on a specified field and direction. Handles nil values by treating them as empty strings for comparison.

Examples:

Ascending order

order = Order.new(:name, :asc)
sorted = order.apply(classes)

Descending order

order = Order.new(:name, :desc)
sorted = order.apply(classes)

Constant Summary collapse

VALID_DIRECTIONS =
%i[asc desc].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(field, direction = :asc) ⇒ Order

Initialize with field and direction

Parameters:

  • field (Symbol, String)

    The field to sort by

  • direction (Symbol) (defaults to: :asc)

    The sort direction (:asc or :desc)

Raises:

  • (ArgumentError)

    if direction is invalid



28
29
30
31
# File 'lib/lutaml/uml_repository/query_dsl/order.rb', line 28

def initialize(field, direction = :asc)
  @field = field.to_sym
  @direction = validate_direction(direction)
end

Instance Attribute Details

#directionObject (readonly)

Returns the value of attribute direction.



21
22
23
# File 'lib/lutaml/uml_repository/query_dsl/order.rb', line 21

def direction
  @direction
end

#fieldObject (readonly)

Returns the value of attribute field.



21
22
23
# File 'lib/lutaml/uml_repository/query_dsl/order.rb', line 21

def field
  @field
end

Instance Method Details

#apply(results) ⇒ Array

Apply ordering to results

Parameters:

  • results (Array)

    The collection to sort

Returns:

  • (Array)

    The sorted collection



37
38
39
40
41
42
43
# File 'lib/lutaml/uml_repository/query_dsl/order.rb', line 37

def apply(results)
  sorted = results.sort_by do |obj|
    extract_sort_value(obj)
  end

  @direction == :desc ? sorted.reverse : sorted
end