Add a helper for build c3.js chart compatible data
This commit is contained in:
49
app/models/ahoy/data_source.rb
Normal file
49
app/models/ahoy/data_source.rb
Normal 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
|
||||
Reference in New Issue
Block a user