class Rorschart::MultipleSeries
Attributes
raw_series[RW]
rorschart_series[RW]
to_sql[RW]
Public Class Methods
new(raw_series)
click to toggle source
# File lib/rorschart/data/multiple_series.rb, line 6 def initialize(raw_series) @to_sql = raw_series.map { |serie| serie.to_sql rescue nil }.delete_if { |serie| serie.nil? } @raw_series = raw_series @rorschart_series = raw_series.collect { |serie| RorschartData.new(serie) } end
Public Instance Methods
cols()
click to toggle source
# File lib/rorschart/data/multiple_series.rb, line 14 def cols cols_with_dup = @rorschart_series.inject([]) { |cols, series| cols + (series.cols || []) } cols_with_dup.uniq end
rows()
click to toggle source
# File lib/rorschart/data/multiple_series.rb, line 22 def rows # create union of all series first columns, to represent all abscisse values available union_x = union_of_first_columns() # Preparation: store all series rows in a hash indexed by first column series_indexed = [] @rorschart_series.each { |serie| series_indexed << index_series_by_first_col(serie) if !serie.cols.nil? } # The Merge: # For abscisse value, grab for each serie the corresponding row - or nil union_series = [] asc = true union_x.each { |x| row = [x] series_indexed.each { |serie_hash| row << serie_hash[x] asc = asc && ascending?(serie_hash) } union_series << row.flatten } if !asc union_series = union_series.reverse end # Return union of all series union_series end
Private Instance Methods
ascending?(hsh)
click to toggle source
# File lib/rorschart/data/multiple_series.rb, line 73 def ascending? hsh hsh.keys == hsh.keys.sort end
index_series_by_first_col(serie)
click to toggle source
# File lib/rorschart/data/multiple_series.rb, line 63 def index_series_by_first_col(serie) serie_hash = {} serie.rows.each { |row| serie_hash[row[0]] = row.drop(1) } serie_hash end
union_of_first_columns()
click to toggle source
# File lib/rorschart/data/multiple_series.rb, line 55 def union_of_first_columns ( @rorschart_series.inject([]) { |union, serie| union + serie.rows } ).collect{|r| r[0]}.uniq.sort end