Sha256: a22ed4797c4ba8e4bbfd4e1462a4ad32d8f736319deceb6908333f59b9bcd6f7

Contents?: true

Size: 1.25 KB

Versions: 9

Compression:

Stored size: 1.25 KB

Contents

module ::Rubiks

  class Dimension < NamedObject
    def degenerate(new_value=nil)
      @degenerate = new_value.to_s if new_value.present?
      @degenerate ||= @options[:degenerate]
    end

    def type(new_value=nil)
      @type = new_value.to_s if new_value.present?
      @type ||= @options[:type]
    end

    def hierarchies
      @hierarchies ||= []
    end

    def hierarchy(hierarchy_name, options={}, &block)
      options.merge!(:table => degenerate ? 'degenerate' : self.table)
      hierarchies.push ::Rubiks::Hierarchy.find_or_create(hierarchy_name, options, &block)
    end

    def json_hash
      hash = default_json_attributes.merge(
        :hierarchies => hierarchies.map{ |hier| hier.json_hash }
      )
      hash[:type] = type.to_s if type.present?
      hash.delete_if { |key,value| value.nil? }
      hash.stringify_keys!
    end

    def to_xml(builder = nil)
      builder = builder || new_builder

      xml_attrs = default_xml_attributes
      if self.degenerate
        xml_attrs.delete(:table)
      else
        xml_attrs[:foreignKey] = "#{name}_id"
      end
      xml_attrs[:type] = type if type.present?
      builder.dimension(xml_attrs) do
        hierarchies.each{ |hierarchy| hierarchy.to_xml(builder) }
      end
    end
  end

end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
rubiks-0.1.8 lib/rubiks/dimension.rb
rubiks-0.1.7 lib/rubiks/dimension.rb
rubiks-0.1.6 lib/rubiks/dimension.rb
rubiks-0.1.5 lib/rubiks/dimension.rb
rubiks-0.1.4 lib/rubiks/dimension.rb
rubiks-0.1.3 lib/rubiks/dimension.rb
rubiks-0.1.2 lib/rubiks/dimension.rb
rubiks-0.1.1 lib/rubiks/dimension.rb
rubiks-0.1.0 lib/rubiks/dimension.rb