Class: Parse::GroupedResult

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/parse/query.rb

Overview

Wrapper class for grouped results that provides sorting capabilities. Allows sorting grouped results by keys (group names) or values (aggregation results) in ascending or descending order.

Instance Method Summary collapse

Constructor Details

#initialize(results, operation = nil) ⇒ GroupedResult

Returns a new instance of GroupedResult.

Parameters:

  • results (Hash)

    the grouped results hash

  • operation (String, nil) (defaults to: nil)

    the aggregation operation (e.g. "count", "sum", "average", "min", "max", "list")



7093
7094
7095
7096
# File 'lib/parse/query.rb', line 7093

def initialize(results, operation = nil)
  @results = results
  @operation = operation
end

Instance Method Details

#each(&block) ⇒ Object

Iterate over each key-value pair



7105
7106
7107
# File 'lib/parse/query.rb', line 7105

def each(&block)
  @results.each(&block)
end

#sort_by_key_ascArray<Array>

Sort by keys (group names) in ascending order

Returns:

  • (Array<Array>)

    array of [key, value] pairs sorted by key ascending



7111
7112
7113
# File 'lib/parse/query.rb', line 7111

def sort_by_key_asc
  @results.sort_by { |k, v| k }
end

#sort_by_key_descArray<Array>

Sort by keys (group names) in descending order

Returns:

  • (Array<Array>)

    array of [key, value] pairs sorted by key descending



7117
7118
7119
# File 'lib/parse/query.rb', line 7117

def sort_by_key_desc
  @results.sort_by { |k, v| k }.reverse
end

#sort_by_value_ascArray<Array>

Sort by values (aggregation results) in ascending order

Returns:

  • (Array<Array>)

    array of [key, value] pairs sorted by value ascending



7123
7124
7125
# File 'lib/parse/query.rb', line 7123

def sort_by_value_asc
  @results.sort_by { |k, v| v }
end

#sort_by_value_descArray<Array>

Sort by values (aggregation results) in descending order

Returns:

  • (Array<Array>)

    array of [key, value] pairs sorted by value descending



7129
7130
7131
# File 'lib/parse/query.rb', line 7129

def sort_by_value_desc
  @results.sort_by { |k, v| v }.reverse
end

#to_hHash

Return the raw hash results

Returns:

  • (Hash)

    the grouped results



7100
7101
7102
# File 'lib/parse/query.rb', line 7100

def to_h
  @results
end

#to_sorted_hash(sorted_pairs) ⇒ Hash

Convert sorted results back to a hash

Parameters:

  • sorted_pairs (Array<Array>)

    array of [key, value] pairs

Returns:

  • (Hash)

    sorted results as hash



7136
7137
7138
# File 'lib/parse/query.rb', line 7136

def to_sorted_hash(sorted_pairs)
  sorted_pairs.to_h
end

#to_table(format: :ascii, headers: nil) ⇒ String

Convert grouped results to a formatted table.

Examples:

Document.group_by(:category, sortable: true).count.to_table
Document.group_by(:category).sum(:file_size).to_table(headers: ["Category", "Total Size"])

Parameters:

  • format (Symbol) (defaults to: :ascii)

    output format (:ascii, :csv, :json)

  • headers (Array<String>, nil) (defaults to: nil)

    custom headers; if nil, defaults to ["Group", ] where the second header reflects the aggregation operation (e.g. "Average" for avg/average, "Sum" for sum, "Min"/"Max" for min/max, "Items" for list, "Count" otherwise).

Returns:

  • (String)

    formatted table



7149
7150
7151
7152
7153
7154
7155
7156
7157
7158
7159
7160
7161
7162
7163
7164
7165
7166
7167
7168
7169
7170
# File 'lib/parse/query.rb', line 7149

def to_table(format: :ascii, headers: nil)
  headers ||= ["Group", default_value_header]
  pairs = @results.to_a

  # Build table data
  table_data = {
    headers: headers,
    rows: pairs.map { |key, value| [format_group_key(key), format_group_value(value)] },
  }

  # Format based on requested format
  case format
  when :ascii
    format_grouped_ascii_table(table_data)
  when :csv
    format_grouped_csv_table(table_data)
  when :json
    format_grouped_json_table(table_data)
  else
    raise ArgumentError, "Unsupported format: #{format}. Use :ascii, :csv, or :json"
  end
end