Class: Mondrian::OLAP::SchemaElement

Inherits:
Object
  • Object
show all
Defined in:
lib/mondrian/olap/schema_element.rb

Direct Known Subclasses

Schema, Mondrian::OLAP::Schema::AggExclude, Mondrian::OLAP::Schema::AggFactCount, Mondrian::OLAP::Schema::AggForeignKey, Mondrian::OLAP::Schema::AggIgnoreColumn, Mondrian::OLAP::Schema::AggLevel, Mondrian::OLAP::Schema::AggMeasure, Mondrian::OLAP::Schema::AggName, Mondrian::OLAP::Schema::AggPattern, Mondrian::OLAP::Schema::Annotation, Mondrian::OLAP::Schema::Annotations, Mondrian::OLAP::Schema::CalculatedMember, Mondrian::OLAP::Schema::CalculatedMemberProperty, Mondrian::OLAP::Schema::CaptionExpression, Mondrian::OLAP::Schema::CellFormatter, Mondrian::OLAP::Schema::Cube, Mondrian::OLAP::Schema::CubeGrant, Mondrian::OLAP::Schema::Dimension, Mondrian::OLAP::Schema::DimensionGrant, Mondrian::OLAP::Schema::DimensionUsage, Mondrian::OLAP::Schema::Formula, Mondrian::OLAP::Schema::Hierarchy, Mondrian::OLAP::Schema::HierarchyGrant, Mondrian::OLAP::Schema::Join, Mondrian::OLAP::Schema::KeyExpression, Mondrian::OLAP::Schema::Level, Mondrian::OLAP::Schema::Measure, Mondrian::OLAP::Schema::MeasureExpression, Mondrian::OLAP::Schema::MemberFormatter, Mondrian::OLAP::Schema::MemberGrant, Mondrian::OLAP::Schema::NameExpression, Mondrian::OLAP::Schema::OrdinalExpression, Mondrian::OLAP::Schema::Parameter, Mondrian::OLAP::Schema::Property, Mondrian::OLAP::Schema::PropertyFormatter, Mondrian::OLAP::Schema::Role, Mondrian::OLAP::Schema::RoleUsage, Mondrian::OLAP::Schema::SchemaGrant, Mondrian::OLAP::Schema::Script, Mondrian::OLAP::Schema::Sql, Mondrian::OLAP::Schema::Table, Mondrian::OLAP::Schema::Union, Mondrian::OLAP::Schema::UserDefinedFunction, Mondrian::OLAP::Schema::View, Mondrian::OLAP::Schema::VirtualCube, Mondrian::OLAP::Schema::VirtualCubeDimension, Mondrian::OLAP::Schema::VirtualCubeMeasure

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name = nil, attributes = {}, parent = nil, &block) ⇒ SchemaElement

Returns a new instance of SchemaElement.



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/mondrian/olap/schema_element.rb', line 4

def initialize(name = nil, attributes = {}, parent = nil, &block)
  # if just attributes hash provided
  if name.is_a?(Hash) && attributes == {}
    attributes = name
    name = nil
  end
  @attributes = {}
  if name
    if self.class.content
      if attributes.is_a?(Hash)
        @content = name
      else
        # used for Annotation element where both name and content is given as arguments
        @attributes[:name] = name
        @content = attributes
        attributes = {}
      end
    else
      @attributes[:name] = name
    end
  end
  @attributes.merge!(attributes)
  self.class.elements.each do |element|
    instance_variable_set("@#{pluralize(element)}", [])
  end
  # extract annotations from options
  if @attributes[:annotations] && self.class.elements.include?(:annotations)
    annotations @attributes.delete(:annotations)
  end
  @xml_fragments = []
  instance_eval(&block) if block
end

Instance Attribute Details

#xml_fragmentsObject (readonly)

Returns the value of attribute xml_fragments.



81
82
83
# File 'lib/mondrian/olap/schema_element.rb', line 81

def xml_fragments
  @xml_fragments
end

Class Method Details

.attributes(*names) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/mondrian/olap/schema_element.rb', line 37

def self.attributes(*names)
  names.each do |name|
    class_eval <<-RUBY, __FILE__, __LINE__ + 1
      def #{name}(*args)
        if args.empty?
          @attributes[:#{name}]
        elsif args.size == 1
          @attributes[:#{name}] = args[0]
        else
          raise ArgumentError, "too many arguments"
        end
      end
    RUBY
  end
end

.content(type = nil) ⇒ Object



76
77
78
79
# File 'lib/mondrian/olap/schema_element.rb', line 76

def self.content(type=nil)
  return @content if type.nil?
  @content = type
end

.data_dictionary_names(*names) ⇒ Object



53
54
55
56
57
# File 'lib/mondrian/olap/schema_element.rb', line 53

def self.data_dictionary_names(*names)
  return @data_dictionary_names || [] if names.empty?
  @data_dictionary_names ||= []
  @data_dictionary_names.concat(names)
end

.elements(*names) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/mondrian/olap/schema_element.rb', line 59

def self.elements(*names)
  return @elements || [] if names.empty?

  @elements ||= []
  @elements.concat(names)

  names.each do |name|
    next if name == :xml
    attr_reader pluralize(name).to_sym
    class_eval <<-RUBY, __FILE__, __LINE__ + 1
      def #{name}(name=nil, attributes = {}, &block)
        @#{pluralize(name)} << Schema::#{camel_case(name)}.new(name, attributes, self, &block)
      end
    RUBY
  end
end

Instance Method Details

#to_xml(options = {}) ⇒ Object



89
90
91
92
93
94
# File 'lib/mondrian/olap/schema_element.rb', line 89

def to_xml(options={})
  options[:upcase_data_dictionary] = @upcase_data_dictionary unless @upcase_data_dictionary.nil?
  Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
    add_to_xml(xml, options)
  end.to_xml
end

#xml(string) ⇒ Object

Raises:

  • (ArgumentError)


82
83
84
85
86
87
# File 'lib/mondrian/olap/schema_element.rb', line 82

def xml(string)
  string = string.strip
  fragment = Nokogiri::XML::DocumentFragment.parse(string)
  raise ArgumentError, "Invalid XML fragment:\n#{string}" if fragment.children.empty?
  @xml_fragments << string
end