Chris@0: require 'rexml/document' Chris@0: require 'SVG/Graph/Graph' Chris@0: Chris@0: module SVG Chris@0: module Graph Chris@0: # = Synopsis Chris@0: # Chris@0: # A superclass for bar-style graphs. Do not attempt to instantiate Chris@0: # directly; use one of the subclasses instead. Chris@0: # Chris@0: # = Author Chris@0: # Chris@0: # Sean E. Russell Chris@0: # Chris@0: # Copyright 2004 Sean E. Russell Chris@0: # This software is available under the Ruby license[LICENSE.txt] Chris@0: # Chris@0: class BarBase < SVG::Graph::Graph Chris@0: # Ensures that :fields are provided in the configuration. Chris@0: def initialize config Chris@0: raise "fields was not supplied or is empty" unless config[:fields] && Chris@0: config[:fields].kind_of?(Array) && Chris@0: config[:fields].length > 0 Chris@0: super Chris@0: end Chris@0: Chris@0: # In addition to the defaults set in Graph::initialize, sets Chris@0: # [bar_gap] true Chris@0: # [stack] :overlap Chris@0: def set_defaults Chris@0: init_with( :bar_gap => true, :stack => :overlap ) Chris@0: end Chris@0: Chris@0: # Whether to have a gap between the bars or not, default Chris@0: # is true, set to false if you don't want gaps. Chris@0: attr_accessor :bar_gap Chris@0: # How to stack data sets. :overlap overlaps bars with Chris@0: # transparent colors, :top stacks bars on top of one another, Chris@0: # :side stacks the bars side-by-side. Defaults to :overlap. Chris@0: attr_accessor :stack Chris@0: Chris@0: Chris@0: protected Chris@0: Chris@0: def max_value Chris@0: @data.collect{|x| x[:data].max}.max Chris@0: end Chris@0: Chris@0: def min_value Chris@0: min = 0 Chris@0: if min_scale_value.nil? Chris@0: min = @data.collect{|x| x[:data].min}.min Chris@0: min = min > 0 ? 0 : min Chris@0: else Chris@0: min = min_scale_value Chris@0: end Chris@0: return min Chris@0: end Chris@0: Chris@0: def get_css Chris@0: return <