module Scruffy::Helpers::LayerContainer

Scruffy::Helpers::LayerContainer

Author

Brasten Sager

Date

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.

Public Instance Methods

<<(*args, &block) click to toggle source

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
Also aliased as: add
add(*args, &block) click to toggle source
Alias for: <<
bottom_key(padding=nil) click to toggle source
# 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
layers() click to toggle source

Layer Reader

# File lib/scruffy/helpers/layer_container.rb, line 61
def layers
  @layers ||= []
end
layers=(val) click to toggle source

Layer Writer

# File lib/scruffy/helpers/layer_container.rb, line 56
def layers=(val)
  @layers = val
end
top_key(padding=nil) click to toggle source
# 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