class MyChartkick::XY

Public Class Methods

new(data, x_key, y_key) click to toggle source
# File lib/my_chartkick/data_set.rb, line 69
def initialize data, x_key, y_key
  all_x = Set.new

  y = data.group_by &y_key

  @data_set =
    y.map do |key, objs|
      x = objs.group_by &x_key
      x.keys.each{|x_k| all_x << x_k}
      [key, x]
    end.map do |key, objs|
      all_x.each do |x|
        objs[x] = [] unless objs[x]
      end
      {name: key, data: count(objs)}
    end.sort_by do |hash|
      hash[:name]
    end
end

Public Instance Methods

limit!(opt) click to toggle source
# File lib/my_chartkick/data_set.rb, line 104
def limit! opt
  data_set.each do |subset|
    opt.each do |limit, n|
      subset[:data] = limit_hash subset[:data], limit, n
    end
  end
end
sort!(opt) click to toggle source
# File lib/my_chartkick/data_set.rb, line 97
def sort! opt
  raise ArgumentError, 'chart with :y can not be sorted by :count' if [opt[:asc], opt[:desc]].include? :count
  data_set.each do |subset|
    subset[:data] = sort subset[:data], opt
  end
end
supply_keys!(keys) click to toggle source
# File lib/my_chartkick/data_set.rb, line 89
def supply_keys! keys
  data_set.each do |subset|
    keys.each do |k|
      subset[:data][k] = 0 unless subset[:data][k]
    end
  end
end