Sha256: e19aaaf0845cf7e3a73f0df844d59cfea2fe9dfd68f1afc62d1a5162b41291b3
Contents?: true
Size: 1.43 KB
Versions: 48
Compression:
Stored size: 1.43 KB
Contents
module Graphiti module Stats # Generate the stats payload so we can return it in the response. # # { # data: [...], # meta: { stats: the_generated_payload } # } # # For example: # # { # data: [...], # meta: { stats: { total: { count: 100 } } } # } class Payload def initialize(resource, query, scope, data) @resource = resource @query = query @scope = scope @data = data end # Generate the payload for +{ meta: { stats: { ... } } }+ # Loops over all calculations, computes then, and gives back # a hash of stats and their results. # @return [Hash] the generated payload def generate {}.tap do |stats| @query.stats.each_pair do |name, calculation| stats[name] = {} each_calculation(name, calculation) do |calc, function| stats[name][calc] = calculate_stat(name, function) end end end end def calculate_stat(name, function) args = [@scope, name] args << @resource.context if function.arity >= 3 args << @data if function.arity == 4 function.call(*args) end private def each_calculation(name, calculations) calculations.each do |calc| function = @resource.stat(name, calc) yield calc, function end end end end end
Version data entries
48 entries across 48 versions & 1 rubygems