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