Sha256: 2998a16110e59a1fe2652c8fcf122992f95a9e37e788b980dcfe04a220f40b48

Contents?: true

Size: 1.89 KB

Versions: 17

Compression:

Stored size: 1.89 KB

Contents

module Axlsx
  
  # The Axes class creates and manages axis information and
  # serialization for charts.
  class Axes

    # @param [Hash] options options used to generate axis each key
    # should be an axis name like :val_axis and its value should be the
    # class of the axis type to construct. The :cat_axis, if there is one,
    # must come first (we assume a Ruby 1.9+ Hash or an OrderedHash).
    def initialize(options={})
      raise(ArgumentError, "CatAxis must come first") if options.keys.include?(:cat_axis) && options.keys.first != :cat_axis
      options.each do |name, axis_class|
        add_axis(name, axis_class)
      end
    end

    # [] provides assiciative access to a specic axis store in an axes
    # instance. 
    # @return [Axis]
    def [](name)
      axes.assoc(name)[1]
    end

    # Serializes the object
    # @param [String] str
    # @param [Hash] options
    # @option options ids
    # If the ids option is specified only the axis identifier is
    # serialized. Otherwise, each axis is serialized in full. 
    def to_xml_string(str = '', options = {})
      if options[:ids]
        # CatAxis must come first in the XML (for Microsoft Excel at least)
        sorted = axes.sort_by { |name, axis| axis.kind_of?(CatAxis) ? 0 : 1 }
        sorted.each { |axis| str << ('<c:axId val="' << axis[1].id.to_s << '"/>') }        
      else
        axes.each { |axis| axis[1].to_xml_string(str) }
      end
    end

    # Adds an axis to the collection
    # @param [Symbol] name The name of the axis
    # @param [Axis] axis_class The axis class to generate
    def add_axis(name, axis_class)
      axis = axis_class.new
      set_cross_axis(axis)
      axes << [name, axis]
    end

    private

    def axes
      @axes ||= []
    end

    def set_cross_axis(axis)
      axes.first[1].cross_axis = axis if axes.size == 1
      axis.cross_axis = axes.first[1] unless axes.empty?
    end
  end
end

Version data entries

17 entries across 17 versions & 6 rubygems

Version Path
caxlsx-3.3.0 lib/axlsx/drawing/axes.rb
caxlsx-3.1.1 lib/axlsx/drawing/axes.rb
caxlsx-3.1.0 lib/axlsx/drawing/axes.rb
bonio-axlsx-2.2.3 lib/axlsx/drawing/axes.rb
caxlsx-3.0.4 lib/axlsx/drawing/axes.rb
caxlsx-3.0.3 lib/axlsx/drawing/axes.rb
caxlsx-3.0.2 lib/axlsx/drawing/axes.rb
caxlsx-3.0.1 lib/axlsx/drawing/axes.rb
caxlsx-3.0.0 lib/axlsx/drawing/axes.rb
axlsx-alt-3.0.1 lib/axlsx/drawing/axes.rb
axlsx-alt-3.0.0 lib/axlsx/drawing/axes.rb
axlsx-3.0.0.pre lib/axlsx/drawing/axes.rb
bonio-axlsx-2.2.2 lib/axlsx/drawing/axes.rb
bonio-axlsx-2.2.1 lib/axlsx/drawing/axes.rb
dg-axlsx-2.1.0 lib/axlsx/drawing/axes.rb
axlsx-2.1.0.pre lib/axlsx/drawing/axes.rb
l_axlsx-2.0.1 lib/axlsx/drawing/axes.rb