class Spree::UserPoolReport::DistributionColumnChart
def initialize(result)
@chart_data = {
active_users: [],
guest_users: [],
new_sign_ups: []
}
@time_dimension = result.time_dimension
@chart_data[@time_dimension] = []
@result = result
process_chart_data
end
def process_chart_data
chart_keys = @chart_data.keys
@result.observations.each do |observation|
chart_keys.each do |key|
@chart_data[key] << observation.public_send(key)
end
end
end
def to_h
{
id: 'user-pool',
json: {
chart: { type: 'column' },
title: {
useHTML: true,
text: %Q(
User Pool
)
},
xAxis: { categories: @chart_data[@time_dimension] },
yAxis: {
title: { text: 'Count' }
},
legend: {
layout: 'vertical',
align: 'right',
verticalAlign: 'middle',
borderWidth: 0
},
series: [
{
name: Spree.t('user_pool.new_sign_ups'),
data: @chart_data[:new_sign_ups].map(&:to_i)
},
{
name: Spree.t('user_pool.active_users'),
data: @chart_data[:active_users].map(&:to_i)
},
{
name: Spree.t('user_pool.guest_users'),
data: @chart_data[:guest_users].map(&:to_i)
}
]
}
}
end
end