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")



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

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

Instance Method Details

#each(&block) ⇒ Object

Iterate over each key-value pair



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

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



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

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



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

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



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

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



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

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



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

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



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

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



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

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