Class: Scruffy::Layers::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/scruffy/layers/base.rb

Overview

Scruffy::Layers::Base

Author

Brasten Sager

Extended By

A.J. Ostman

Created

August 5th, 2006

Last Modified

August 27, 2006

Scruffy::Layers::Base contains the basic functionality needed by the various types of graphs. The Base class is responsible holding layer information such as the title and data points.

When the graph is rendered, the graph renderer calls Base#render. Base#render sets up some standard information, and calculates the x,y coordinates of each data point. The draw() method, which should have been overridden by the current instance, is then called. The actual rendering of the graph takes place there.

Create New Graph Types

Assuming the information generated by Scruffy::Layers::Base is sufficient, you can create a new graph type simply by overriding the draw() method. See Base#draw for arguments.

Direct Known Subclasses

AllSmiles, Area, Average, Bar, Line, Pie, PieSlice, Scatter, SparklineBar, Stacked

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Base

Returns a new Base object.

Any options other that those specified below are stored in the @options variable for possible later use. This would be a good place to store options needed for a custom graph.

Options:

title

Name/title of data group

points

Array of data points

preferred_color

Color used to render this graph, overrides theme color.

relevant_data

Rarely used - indicates the data on this graph should not included in any graph data aggregations, such as averaging data points.

style

SVG polyline style. (default: 'fill-opacity: 0; stroke-opacity: 0.35')

stroke_width

numeric value for width of line (0.1 - 10, default: 1)

relativestroke

stroke-width relative to image size? true or false (default)

shadow

Display line shadow? true or false (default)

dots

Display co-ord dots? true or false (default)



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/scruffy/layers/base.rb', line 57

def initialize(options = {})
  @title              = options.delete(:title) || ''
  @preferred_color    = options.delete(:color)
  @relevant_data      = options.delete(:relevant_data) || true
  @points             = options.delete(:points) || []
  @points.extend Scruffy::Helpers::PointContainer unless @points.kind_of? Scruffy::Helpers::PointContainer
  
  options[:stroke_width] ||= 1
  options[:dots] ||= false
  options[:shadow] ||= false
  options[:style] ||= false
  options[:relativestroke] ||= false
  
  @options            = options
end

Instance Attribute Details

#colorObject (readonly)

Returns the value of attribute color



36
37
38
# File 'lib/scruffy/layers/base.rb', line 36

def color
  @color
end

#complexityObject (readonly)

Returns the value of attribute complexity



38
39
40
# File 'lib/scruffy/layers/base.rb', line 38

def complexity
  @complexity
end

#heightObject (readonly)

The following attributes are set during the layer's render process, and act more as a record of what just happened for later processes. height, width, min_value, max_value, color, opacity, complexity



34
35
36
# File 'lib/scruffy/layers/base.rb', line 34

def height
  @height
end

#max_valueObject (readonly)

Returns the value of attribute max_value



35
36
37
# File 'lib/scruffy/layers/base.rb', line 35

def max_value
  @max_value
end

#min_valueObject (readonly)

Returns the value of attribute min_value



35
36
37
# File 'lib/scruffy/layers/base.rb', line 35

def min_value
  @min_value
end

#opacityObject (readonly)

Returns the value of attribute opacity



37
38
39
# File 'lib/scruffy/layers/base.rb', line 37

def opacity
  @opacity
end

#optionsObject

On-the-fly values for easy customization / acts as attributes.



29
30
31
# File 'lib/scruffy/layers/base.rb', line 29

def options
  @options
end

#pointsObject

Returns the value of attribute points



26
27
28
# File 'lib/scruffy/layers/base.rb', line 26

def points
  @points
end

#preferred_colorObject

Returns the value of attribute preferred_color



28
29
30
# File 'lib/scruffy/layers/base.rb', line 28

def preferred_color
  @preferred_color
end

#relevant_dataObject

Returns the value of attribute relevant_data



27
28
29
# File 'lib/scruffy/layers/base.rb', line 27

def relevant_data
  @relevant_data
end

#titleObject

The following attributes are user-definable at any time. title, points, relevant_data, preferred_color, options



25
26
27
# File 'lib/scruffy/layers/base.rb', line 25

def title
  @title
end

#widthObject (readonly)

The following attributes are set during the layer's render process, and act more as a record of what just happened for later processes. height, width, min_value, max_value, color, opacity, complexity



34
35
36
# File 'lib/scruffy/layers/base.rb', line 34

def width
  @width
end

Instance Method Details

#bottom_valueObject

The lowest data point on this layer, or nil if relevant_data == false



123
124
125
# File 'lib/scruffy/layers/base.rb', line 123

def bottom_value
   @relevant_data ? points.minimum_value : nil
end

#draw(svg, coords, options = {}) ⇒ Object

The method called by Base#draw to render the graph.

svg

a Builder object to use for creating SVG code.

coords

An array of coordinates relating to the graph's data points. ie: [[100, 120], [200, 140], [300, 40]]

options

Optional arguments.

Raises:



90
91
92
# File 'lib/scruffy/layers/base.rb', line 90

def draw(svg, coords, options={})
  raise RenderError, "You must override the Base#draw method."
end

#legend_dataObject

Returns a hash with information to be used by the legend.

Alternatively, returns nil if you don't want this layer to be in the legend, or an array of hashes if this layer should have multiple legend entries (stacked?)

By default, #legend_data returns nil automatically if relevant_data is set to false or the @color attribute is nil. @color is set when the layer is rendered, so legends must be rendered AFTER layers.



102
103
104
105
106
107
108
109
110
# File 'lib/scruffy/layers/base.rb', line 102

def legend_data
  if relevant_data? && @color
    {:title => title, 
     :color => @color,
     :priority => :normal}
  else
    nil
  end
end

#relevant_data?Boolean

Returns the value of relevant_data



113
114
115
# File 'lib/scruffy/layers/base.rb', line 113

def relevant_data?
  @relevant_data
end

#render(svg, options = {}) ⇒ Object

Builds SVG code for this graph using the provided Builder object. This method actually generates data needed by this graph, then passes the rendering responsibilities to Base#draw.

svg

a Builder object used to create SVG code.



78
79
80
81
82
83
# File 'lib/scruffy/layers/base.rb', line 78

def render(svg, options = {})
  setup_variables(options)
  coords = generate_coordinates(options)

  draw(svg, coords, options)
end

#sum_valuesObject

The sum of all values



128
129
130
# File 'lib/scruffy/layers/base.rb', line 128

def sum_values
  points.sum
end

#top_valueObject

The highest data point on this layer, or nil if relevant_data == false



118
119
120
# File 'lib/scruffy/layers/base.rb', line 118

def top_value
  @relevant_data ? points.maximum_value : nil
end