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