Brasten Sager
August 16th, 2006
Adds some common functionality to any object which needs to act as a container for graph layers. The best example of this is the Scruffy::Graph object itself, but this module is also used by Scruffy::Layer::Stacked.
Adds a Layer to the Graph/Container. Accepts either a list of arguments used to build a new layer, or a Scruffy::Layers::Base-derived object. When passing a list of arguments, all arguments are optional, but the arguments specified must be provided in a particular order: type (Symbol), title (String), points (Array), options (Hash).
Both add and #<< can be used.
graph.add(:line, [100, 200, 150]) # Create and add an untitled line graph graph << (:line, "John's Sales", [150, 100]) # Create and add a titled line graph graph << Scruffy::Layers::Bar.new({...}) # Adds Bar layer to graph
# File lib/scruffy/helpers/layer_container.rb, line 27 def <<(*args, &block) if args[0].kind_of?(Scruffy::Layers::Base) layers << args[0] else type = args.first.is_a?(Symbol) ? args.shift : @default_type title = args.shift if args.first.is_a?(String) # Layer handles PointContainer mixin, don't do it here points = [Array, Hash].include?(args.first.class) ? args.shift : [] options = args.first.is_a?(Hash) ? args.shift : {} title ||= '' raise ArgumentError, 'You must specify a graph type (:area, :bar, :line, etc) if you do not have a default type specified.' if type.nil? class_name = "Scruffy::Layers::#{to_camelcase(type.to_s)}" layer_class = Kernel::module_eval(class_name) options = {:points => points, :title => title}.merge options layer = layer_class.new(options, &block) layers << layer end layer end
# File lib/scruffy/helpers/layer_container.rb, line 93 def bottom_key(padding=nil) return 0 unless layers.any? min = layers[0].bottom_key layers.each do |layer| min = layer.bottom_key if min.nil? && !layer.bottom_key.nil? (min = ((min > layer.bottom_key) ? layer.bottom_key : min)) unless layer.bottom_key.nil? end min end
Layer Reader
# File lib/scruffy/helpers/layer_container.rb, line 61 def layers @layers ||= [] end
Layer Writer
# File lib/scruffy/helpers/layer_container.rb, line 56 def layers=(val) @layers = val end
# File lib/scruffy/helpers/layer_container.rb, line 103 def top_key(padding=nil) return 1 unless layers.any? max = layers[0].top_key layers.each do |layer| max = layer.top_key if max.nil? && !layer.top_key.nil? (max = ((max < layer.top_key) ? layer.top_key : max)) unless layer.top_key.nil? end max end