Files
grecia/app/models/ahoy/data_source.rb
Javi Martín 3fcac3a9d8 Sort data by date when building graphs
This doesn't affect the end result because all collections used the same
order, but it makes debugging easier.
2024-05-09 14:28:33 +02:00

47 lines
1.1 KiB
Ruby

# This class combines multiple collections with shared keys into a
# hash of collections compatible with C3.js charts
#----------------------------------------------------------------------
module Ahoy
class DataSource
def self.build(&block)
new.tap { |data_source| block.call(data_source) }.build
end
# Adds a collection with the datasource
# Name is the name of the collection and will be showed in the
# chart
def add(name, collection)
collections.push data: collection, name: name
dates.merge(collection.keys)
end
def build
data = { x: [] }
dates.sort.each do |date|
# Add the key with a valid date format
data[:x].push date.strftime("%Y-%m-%d")
# Add the value for each column, or 0 if not present
collections.each do |col|
data[col[:name]] ||= []
count = col[:data][date] || 0
data[col[:name]].push count
end
end
data
end
private
def collections
@collections ||= []
end
def dates
@dates ||= Set.new
end
end
end