We were very inconsistent regarding these rules. Personally I prefer no empty lines around blocks, clases, etc... as recommended by the Ruby style guide [1], and they're the default values in rubocop, so those are the settings I'm applying. The exception is the `private` access modifier, since we were leaving empty lines around it most of the time. That's the default rubocop rule as well. Personally I don't have a strong preference about this one. [1] https://rubystyle.guide/#empty-lines-around-bodies
47 lines
1.1 KiB
Ruby
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
|
|
# 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_key { |key| add_key key }
|
|
end
|
|
|
|
def build
|
|
data = { x: [] }
|
|
shared_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
|
|
|
|
data
|
|
end
|
|
|
|
private
|
|
|
|
def collections
|
|
@collections ||= []
|
|
end
|
|
|
|
def shared_keys
|
|
@shared_keys ||= []
|
|
end
|
|
|
|
def add_key(key)
|
|
shared_keys.push(key) unless shared_keys.include? key
|
|
end
|
|
end
|
|
end
|