Add a helper for build c3.js chart compatible data

This commit is contained in:
Eloy Gomez
2015-08-17 19:13:56 +02:00
parent 637e428f4c
commit 5d91663016
2 changed files with 85 additions and 0 deletions

View File

@@ -0,0 +1,49 @@
# This class combines multiple collections with shared keys into a
# hash of collections compatible with C3.js charts
#----------------------------------------------------------------------
module Ahoy
class DataSource
# 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
collection.each{ |k,v| add_key k }
end
def build
data = { x: [] }
keys.each do |k|
# Add the key with a valid date format
data[:x].push k.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][k] || 0
data[col[:name]].push count
end
end
return data
end
private
def collections
@collections ||= []
end
def keys
@keys ||= []
end
def add_key(key)
keys.push(key) unless keys.include? key
end
end
end