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



6335
6336
6337
6338
# File 'lib/parse/query.rb', line 6335

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

Instance Method Details

#each(&block) ⇒ Object

Iterate over each key-value pair



6347
6348
6349
# File 'lib/parse/query.rb', line 6347

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



6353
6354
6355
# File 'lib/parse/query.rb', line 6353

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



6359
6360
6361
# File 'lib/parse/query.rb', line 6359

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



6365
6366
6367
# File 'lib/parse/query.rb', line 6365

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



6371
6372
6373
# File 'lib/parse/query.rb', line 6371

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



6342
6343
6344
# File 'lib/parse/query.rb', line 6342

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



6378
6379
6380
# File 'lib/parse/query.rb', line 6378

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



6391
6392
6393
6394
6395
6396
6397
6398
6399
6400
6401
6402
6403
6404
6405
6406
6407
6408
6409
6410
6411
6412
# File 'lib/parse/query.rb', line 6391

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