cube 1.2.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.2.0
1
+ 1.2.1
data/cube.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "cube"
8
- s.version = "1.2.0"
8
+ s.version = "1.2.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["drKreso"]
12
- s.date = "2012-02-15"
12
+ s.date = "2012-02-17"
13
13
  s.description = "Eases the pain I had to go through to get to the data out of XMLA based OLAP provider"
14
14
  s.email = "kresimir.bojcic@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -36,6 +36,8 @@ Gem::Specification.new do |s|
36
36
  "spec/cassettes/mondrian_broj_intervencija.yml",
37
37
  "spec/cassettes/mondrian_jedan_red_odgovor.yml",
38
38
  "spec/cassettes/mondrian_nula_redaka.yml",
39
+ "spec/cassettes/mondrian_scalar_value.yml",
40
+ "spec/cassettes/mondrian_vrati_samo_jedan_broj.yml",
39
41
  "spec/cassettes/razlog_prijave_i_kvart.yml",
40
42
  "spec/cube_spec.rb",
41
43
  "spec/spec_helper.rb"
data/lib/cube/cube.rb CHANGED
@@ -18,19 +18,24 @@ module XMLA
18
18
  end
19
19
 
20
20
  def as_table
21
+ return [table] if y_size == 0
21
22
  clean_table(table, y_size).reduce([]) { |result, row| result << row.flatten.join('|') }
22
23
  end
23
24
 
24
25
  let(:x_axe) { @x_axe ||= axes[0] }
25
26
  let(:y_axe) { @y_axe ||= axes[1] }
26
- let(:y_size) { y_axe[0].nil? ? 0 : y_axe[0].size }
27
+ let(:y_size) { (y_axe.nil? || y_axe[0].nil?) ? 0 : y_axe[0].size }
27
28
  let(:x_size) { x_axe.size }
28
29
 
29
30
  private
30
31
 
31
32
  #header and rows
32
33
  def table
33
- (0...y_axe.size).reduce(header) { |result, j| result << ( y_axe[j] + (0...x_size).map { |i| "#{cell_data[i + j]}" }) }
34
+ if (header.size == 1 && y_size == 0)
35
+ cell_data[0]
36
+ else
37
+ (0...y_axe.size).reduce(header) { |result, j| result << ( y_axe[j] + (0...x_size).map { |i| "#{cell_data[i + j]}" }) }
38
+ end
34
39
  end
35
40
 
36
41
  def header
@@ -80,6 +85,7 @@ module XMLA
80
85
 
81
86
  def cell_data
82
87
  cell_data = @response.to_hash[:execute_response][:return][:root][:cell_data]
88
+ return [""] if cell_data.nil?
83
89
  @data ||= cell_data.reduce([]) do |data, cell|
84
90
  cell[1].reduce(data) do |data, value|
85
91
  data << (value.class == Hash ? value[:value] : value[1] )
@@ -32,7 +32,7 @@
32
32
  transfer-encoding:
33
33
  - chunked
34
34
  date:
35
- - Wed, 15 Feb 2012 20:37:46 GMT
35
+ - Fri, 17 Feb 2012 22:41:49 GMT
36
36
  body: ! "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"
37
37
  SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" >\n<SOAP-ENV:Header>\n</SOAP-ENV:Header>\n<SOAP-ENV:Body>\n<cxmla:ExecuteResponse
38
38
  xmlns:cxmla=\"urn:schemas-microsoft-com:xml-analysis\">\n <cxmla:return>\n
@@ -0,0 +1,166 @@
1
+ ---
2
+ - !ruby/struct:VCR::HTTPInteraction
3
+ request: !ruby/struct:VCR::Request
4
+ method: :post
5
+ uri: http://localhost:8383/mondrian/xmla
6
+ body: ! "<?xml version=\"1.0\" encoding=\"UTF-8\"?><env:Envelope xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"
7
+ xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:wsdl=\"http://tempuri.org/wsdl/\"
8
+ xmlns:env=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ins0=\"http://tempuri.org/type\"><env:Body><Execute
9
+ xmlns=\"urn:schemas-microsoft-com:xml-analysis\"><Command> <Statement> <![CDATA[
10
+ \ SELECT {Hierarchize({[Measures].[Rok otklona]})} ON COLUMNS\n FROM
11
+ [Kvarovi]\n WHERE [Vrijeme prijave].[2011]\n ]]> </Statement> </Command>
12
+ <Properties> <PropertyList> <Catalog>GOSJAR</Catalog>\n <Format>Multidimensional</Format>
13
+ <AxisFormat>TupleFormat</AxisFormat> </PropertyList> </Properties></Execute></env:Body></env:Envelope>"
14
+ headers:
15
+ soapaction:
16
+ - ! '"urn:schemas-microsoft-com:xml-analysis:Execute"'
17
+ content-type:
18
+ - text/xml;charset=UTF-8
19
+ content-length:
20
+ - '730'
21
+ response: !ruby/struct:VCR::Response
22
+ status: !ruby/struct:VCR::ResponseStatus
23
+ code: 200
24
+ message: OK
25
+ headers:
26
+ server:
27
+ - Apache-Coyote/1.1
28
+ content-type:
29
+ - text/xml;charset=UTF-8
30
+ transfer-encoding:
31
+ - chunked
32
+ date:
33
+ - Fri, 17 Feb 2012 22:40:27 GMT
34
+ body: ! "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"
35
+ SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" >\n<SOAP-ENV:Header>\n</SOAP-ENV:Header>\n<SOAP-ENV:Body>\n<cxmla:ExecuteResponse
36
+ xmlns:cxmla=\"urn:schemas-microsoft-com:xml-analysis\">\n <cxmla:return>\n
37
+ \ <root xmlns=\"urn:schemas-microsoft-com:xml-analysis:mddataset\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
38
+ xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:EX=\"urn:schemas-microsoft-com:xml-analysis:exception\">\n
39
+ \ <xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" targetNamespace=\"urn:schemas-microsoft-com:xml-analysis:mddataset\"
40
+ xmlns=\"urn:schemas-microsoft-com:xml-analysis:mddataset\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
41
+ xmlns:sql=\"urn:schemas-microsoft-com:xml-sql\" elementFormDefault=\"qualified\">\n
42
+ \ <xsd:complexType name=\"MemberType\">\n <xsd:sequence>\n <xsd:element
43
+ name=\"UName\" type=\"xsd:string\"/>\n <xsd:element name=\"Caption\"
44
+ type=\"xsd:string\"/>\n <xsd:element name=\"LName\" type=\"xsd:string\"/>\n
45
+ \ <xsd:element name=\"LNum\" type=\"xsd:unsignedInt\"/>\n <xsd:element
46
+ name=\"DisplayInfo\" type=\"xsd:unsignedInt\"/>\n <xsd:sequence maxOccurs=\"unbounded\"
47
+ minOccurs=\"0\">\n <xsd:any processContents=\"lax\" maxOccurs=\"unbounded\"/>\n
48
+ \ </xsd:sequence>\n </xsd:sequence>\n <xsd:attribute
49
+ name=\"Hierarchy\" type=\"xsd:string\"/>\n </xsd:complexType>\n <xsd:complexType
50
+ name=\"PropType\">\n <xsd:attribute name=\"name\" type=\"xsd:string\"/>\n
51
+ \ </xsd:complexType>\n <xsd:complexType name=\"TupleType\">\n <xsd:sequence
52
+ maxOccurs=\"unbounded\">\n <xsd:element name=\"Member\" type=\"MemberType\"/>\n
53
+ \ </xsd:sequence>\n </xsd:complexType>\n <xsd:complexType
54
+ name=\"MembersType\">\n <xsd:sequence maxOccurs=\"unbounded\">\n <xsd:element
55
+ name=\"Member\" type=\"MemberType\"/>\n </xsd:sequence>\n <xsd:attribute
56
+ name=\"Hierarchy\" type=\"xsd:string\"/>\n </xsd:complexType>\n <xsd:complexType
57
+ name=\"TuplesType\">\n <xsd:sequence maxOccurs=\"unbounded\">\n <xsd:element
58
+ name=\"Tuple\" type=\"TupleType\"/>\n </xsd:sequence>\n </xsd:complexType>\n
59
+ \ <xsd:complexType name=\"CrossProductType\">\n <xsd:sequence>\n
60
+ \ <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n <xsd:element
61
+ name=\"Members\" type=\"MembersType\"/>\n <xsd:element name=\"Tuples\"
62
+ type=\"TuplesType\"/>\n </xsd:choice>\n </xsd:sequence>\n
63
+ \ <xsd:attribute name=\"Size\" type=\"xsd:unsignedInt\"/>\n </xsd:complexType>\n
64
+ \ <xsd:complexType name=\"OlapInfo\">\n <xsd:sequence>\n <xsd:element
65
+ name=\"CubeInfo\">\n <xsd:complexType>\n <xsd:sequence>\n
66
+ \ <xsd:element name=\"Cube\" maxOccurs=\"unbounded\">\n <xsd:complexType>\n
67
+ \ <xsd:sequence>\n <xsd:element name=\"CubeName\"
68
+ type=\"xsd:string\"/>\n </xsd:sequence>\n </xsd:complexType>\n
69
+ \ </xsd:element>\n </xsd:sequence>\n </xsd:complexType>\n
70
+ \ </xsd:element>\n <xsd:element name=\"AxesInfo\">\n <xsd:complexType>\n
71
+ \ <xsd:sequence>\n <xsd:element name=\"AxisInfo\"
72
+ maxOccurs=\"unbounded\">\n <xsd:complexType>\n <xsd:sequence>\n
73
+ \ <xsd:element name=\"HierarchyInfo\" minOccurs=\"0\"
74
+ maxOccurs=\"unbounded\">\n <xsd:complexType>\n <xsd:sequence>\n
75
+ \ <xsd:sequence maxOccurs=\"unbounded\">\n <xsd:element
76
+ name=\"UName\" type=\"PropType\"/>\n <xsd:element
77
+ name=\"Caption\" type=\"PropType\"/>\n <xsd:element
78
+ name=\"LName\" type=\"PropType\"/>\n <xsd:element
79
+ name=\"LNum\" type=\"PropType\"/>\n <xsd:element
80
+ name=\"DisplayInfo\" type=\"PropType\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n
81
+ \ </xsd:sequence>\n <xsd:sequence>\n
82
+ \ <xsd:any processContents=\"lax\" minOccurs=\"0\"
83
+ maxOccurs=\"unbounded\"/>\n </xsd:sequence>\n </xsd:sequence>\n
84
+ \ <xsd:attribute name=\"name\" type=\"xsd:string\"
85
+ use=\"required\"/>\n </xsd:complexType>\n </xsd:element>\n
86
+ \ </xsd:sequence>\n <xsd:attribute
87
+ name=\"name\" type=\"xsd:string\"/>\n </xsd:complexType>\n
88
+ \ </xsd:element>\n </xsd:sequence>\n </xsd:complexType>\n
89
+ \ </xsd:element>\n <xsd:element name=\"CellInfo\">\n <xsd:complexType>\n
90
+ \ <xsd:sequence>\n <xsd:sequence minOccurs=\"0\"
91
+ maxOccurs=\"unbounded\">\n <xsd:choice>\n <xsd:element
92
+ name=\"Value\" type=\"PropType\"/>\n <xsd:element name=\"FmtValue\"
93
+ type=\"PropType\"/>\n <xsd:element name=\"BackColor\" type=\"PropType\"/>\n
94
+ \ <xsd:element name=\"ForeColor\" type=\"PropType\"/>\n
95
+ \ <xsd:element name=\"FontName\" type=\"PropType\"/>\n <xsd:element
96
+ name=\"FontSize\" type=\"PropType\"/>\n <xsd:element name=\"FontFlags\"
97
+ type=\"PropType\"/>\n <xsd:element name=\"FormatString\"
98
+ type=\"PropType\"/>\n <xsd:element name=\"NonEmptyBehavior\"
99
+ type=\"PropType\"/>\n <xsd:element name=\"SolveOrder\"
100
+ type=\"PropType\"/>\n <xsd:element name=\"Updateable\"
101
+ type=\"PropType\"/>\n <xsd:element name=\"Visible\" type=\"PropType\"/>\n
102
+ \ <xsd:element name=\"Expression\" type=\"PropType\"/>\n
103
+ \ </xsd:choice>\n </xsd:sequence>\n <xsd:sequence
104
+ maxOccurs=\"unbounded\" minOccurs=\"0\">\n <xsd:any processContents=\"lax\"
105
+ maxOccurs=\"unbounded\"/>\n </xsd:sequence>\n </xsd:sequence>\n
106
+ \ </xsd:complexType>\n </xsd:element>\n </xsd:sequence>\n
107
+ \ </xsd:complexType>\n <xsd:complexType name=\"Axes\">\n <xsd:sequence
108
+ maxOccurs=\"unbounded\">\n <xsd:element name=\"Axis\">\n <xsd:complexType>\n
109
+ \ <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n <xsd:element
110
+ name=\"CrossProduct\" type=\"CrossProductType\"/>\n <xsd:element
111
+ name=\"Tuples\" type=\"TuplesType\"/>\n <xsd:element name=\"Members\"
112
+ type=\"MembersType\"/>\n </xsd:choice>\n <xsd:attribute
113
+ name=\"name\" type=\"xsd:string\"/>\n </xsd:complexType>\n </xsd:element>\n
114
+ \ </xsd:sequence>\n </xsd:complexType>\n <xsd:complexType
115
+ name=\"CellData\">\n <xsd:sequence>\n <xsd:element name=\"Cell\"
116
+ minOccurs=\"0\" maxOccurs=\"unbounded\">\n <xsd:complexType>\n
117
+ \ <xsd:sequence maxOccurs=\"unbounded\">\n <xsd:choice>\n
118
+ \ <xsd:element name=\"Value\"/>\n <xsd:element
119
+ name=\"FmtValue\" type=\"xsd:string\"/>\n <xsd:element name=\"BackColor\"
120
+ type=\"xsd:unsignedInt\"/>\n <xsd:element name=\"ForeColor\"
121
+ type=\"xsd:unsignedInt\"/>\n <xsd:element name=\"FontName\"
122
+ type=\"xsd:string\"/>\n <xsd:element name=\"FontSize\" type=\"xsd:unsignedShort\"/>\n
123
+ \ <xsd:element name=\"FontFlags\" type=\"xsd:unsignedInt\"/>\n
124
+ \ <xsd:element name=\"FormatString\" type=\"xsd:string\"/>\n
125
+ \ <xsd:element name=\"NonEmptyBehavior\" type=\"xsd:unsignedShort\"/>\n
126
+ \ <xsd:element name=\"SolveOrder\" type=\"xsd:unsignedInt\"/>\n
127
+ \ <xsd:element name=\"Updateable\" type=\"xsd:unsignedInt\"/>\n
128
+ \ <xsd:element name=\"Visible\" type=\"xsd:unsignedInt\"/>\n
129
+ \ <xsd:element name=\"Expression\" type=\"xsd:string\"/>\n
130
+ \ </xsd:choice>\n </xsd:sequence>\n <xsd:attribute
131
+ name=\"CellOrdinal\" type=\"xsd:unsignedInt\" use=\"required\"/>\n </xsd:complexType>\n
132
+ \ </xsd:element>\n </xsd:sequence>\n </xsd:complexType>\n
133
+ \ <xsd:element name=\"root\">\n <xsd:complexType>\n <xsd:sequence
134
+ maxOccurs=\"unbounded\">\n <xsd:element name=\"OlapInfo\" type=\"OlapInfo\"/>\n
135
+ \ <xsd:element name=\"Axes\" type=\"Axes\"/>\n <xsd:element
136
+ name=\"CellData\" type=\"CellData\"/>\n </xsd:sequence>\n </xsd:complexType>\n
137
+ \ </xsd:element>\n </xsd:schema>\n <OlapInfo>\n <CubeInfo>\n
138
+ \ <Cube>\n <CubeName>Kvarovi</CubeName>\n </Cube>\n
139
+ \ </CubeInfo>\n <AxesInfo>\n <AxisInfo name=\"Axis0\">\n
140
+ \ <HierarchyInfo name=\"Measures\">\n <UName name=\"[Measures].[MEMBER_UNIQUE_NAME]\"/>\n
141
+ \ <Caption name=\"[Measures].[MEMBER_CAPTION]\"/>\n <LName
142
+ name=\"[Measures].[LEVEL_UNIQUE_NAME]\"/>\n <LNum name=\"[Measures].[LEVEL_NUMBER]\"/>\n
143
+ \ <DisplayInfo name=\"[Measures].[DISPLAY_INFO]\"/>\n </HierarchyInfo>\n
144
+ \ </AxisInfo>\n <AxisInfo name=\"SlicerAxis\">\n <HierarchyInfo
145
+ name=\"Vrijeme prijave\">\n <UName name=\"[Vrijeme prijave].[MEMBER_UNIQUE_NAME]\"/>\n
146
+ \ <Caption name=\"[Vrijeme prijave].[MEMBER_CAPTION]\"/>\n <LName
147
+ name=\"[Vrijeme prijave].[LEVEL_UNIQUE_NAME]\"/>\n <LNum name=\"[Vrijeme
148
+ prijave].[LEVEL_NUMBER]\"/>\n <DisplayInfo name=\"[Vrijeme prijave].[DISPLAY_INFO]\"/>\n
149
+ \ </HierarchyInfo>\n </AxisInfo>\n </AxesInfo>\n <CellInfo>\n
150
+ \ <Value name=\"VALUE\"/>\n <FmtValue name=\"FORMATTED_VALUE\"/>\n
151
+ \ <FormatString name=\"FORMAT_STRING\"/>\n </CellInfo>\n </OlapInfo>\n
152
+ \ <Axes>\n <Axis name=\"Axis0\">\n <Tuples>\n <Tuple>\n
153
+ \ <Member Hierarchy=\"Measures\">\n <UName>[Measures].[Rok
154
+ otklona]</UName>\n <Caption>Rok otklona</Caption>\n <LName>[Measures].[MeasuresLevel]</LName>\n
155
+ \ <LNum>0</LNum>\n <DisplayInfo>0</DisplayInfo>\n
156
+ \ </Member>\n </Tuple>\n </Tuples>\n </Axis>\n
157
+ \ <Axis name=\"SlicerAxis\">\n <Tuples>\n <Tuple>\n
158
+ \ <Member Hierarchy=\"Vrijeme prijave\">\n <UName>[Time].[2011]</UName>\n
159
+ \ <Caption>2011</Caption>\n <LName>[Time].[Godina]</LName>\n
160
+ \ <LNum>1</LNum>\n <DisplayInfo>12</DisplayInfo>\n
161
+ \ </Member>\n </Tuple>\n </Tuples>\n </Axis>\n
162
+ \ </Axes>\n <CellData>\n <Cell CellOrdinal=\"0\">\n <Value
163
+ xsi:type=\"xsd:double\">7.356</Value>\n <FmtValue>7.356</FmtValue>\n
164
+ \ <FormatString/>\n </Cell>\n </CellData>\n </root>\n
165
+ \ </cxmla:return>\n</cxmla:ExecuteResponse>\n</SOAP-ENV:Body>\n</SOAP-ENV:Envelope>\n"
166
+ http_version: '1.1'
@@ -0,0 +1,166 @@
1
+ ---
2
+ - !ruby/struct:VCR::HTTPInteraction
3
+ request: !ruby/struct:VCR::Request
4
+ method: :post
5
+ uri: http://localhost:8383/mondrian/xmla
6
+ body: ! "<?xml version=\"1.0\" encoding=\"UTF-8\"?><env:Envelope xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"
7
+ xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:wsdl=\"http://tempuri.org/wsdl/\"
8
+ xmlns:env=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ins0=\"http://tempuri.org/type\"><env:Body><Execute
9
+ xmlns=\"urn:schemas-microsoft-com:xml-analysis\"><Command> <Statement> <![CDATA[
10
+ \ SELECT {Hierarchize({[Measures].[Rok otklona]})} ON COLUMNS\n FROM
11
+ [Kvarovi]\n WHERE [Vrijeme prijave].[2011]\n ]]> </Statement> </Command>
12
+ <Properties> <PropertyList> <Catalog>GOSJAR</Catalog>\n <Format>Multidimensional</Format>
13
+ <AxisFormat>TupleFormat</AxisFormat> </PropertyList> </Properties></Execute></env:Body></env:Envelope>"
14
+ headers:
15
+ soapaction:
16
+ - ! '"urn:schemas-microsoft-com:xml-analysis:Execute"'
17
+ content-type:
18
+ - text/xml;charset=UTF-8
19
+ content-length:
20
+ - '730'
21
+ response: !ruby/struct:VCR::Response
22
+ status: !ruby/struct:VCR::ResponseStatus
23
+ code: 200
24
+ message: OK
25
+ headers:
26
+ server:
27
+ - Apache-Coyote/1.1
28
+ content-type:
29
+ - text/xml;charset=UTF-8
30
+ transfer-encoding:
31
+ - chunked
32
+ date:
33
+ - Fri, 17 Feb 2012 22:22:09 GMT
34
+ body: ! "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"
35
+ SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" >\n<SOAP-ENV:Header>\n</SOAP-ENV:Header>\n<SOAP-ENV:Body>\n<cxmla:ExecuteResponse
36
+ xmlns:cxmla=\"urn:schemas-microsoft-com:xml-analysis\">\n <cxmla:return>\n
37
+ \ <root xmlns=\"urn:schemas-microsoft-com:xml-analysis:mddataset\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
38
+ xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:EX=\"urn:schemas-microsoft-com:xml-analysis:exception\">\n
39
+ \ <xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" targetNamespace=\"urn:schemas-microsoft-com:xml-analysis:mddataset\"
40
+ xmlns=\"urn:schemas-microsoft-com:xml-analysis:mddataset\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
41
+ xmlns:sql=\"urn:schemas-microsoft-com:xml-sql\" elementFormDefault=\"qualified\">\n
42
+ \ <xsd:complexType name=\"MemberType\">\n <xsd:sequence>\n <xsd:element
43
+ name=\"UName\" type=\"xsd:string\"/>\n <xsd:element name=\"Caption\"
44
+ type=\"xsd:string\"/>\n <xsd:element name=\"LName\" type=\"xsd:string\"/>\n
45
+ \ <xsd:element name=\"LNum\" type=\"xsd:unsignedInt\"/>\n <xsd:element
46
+ name=\"DisplayInfo\" type=\"xsd:unsignedInt\"/>\n <xsd:sequence maxOccurs=\"unbounded\"
47
+ minOccurs=\"0\">\n <xsd:any processContents=\"lax\" maxOccurs=\"unbounded\"/>\n
48
+ \ </xsd:sequence>\n </xsd:sequence>\n <xsd:attribute
49
+ name=\"Hierarchy\" type=\"xsd:string\"/>\n </xsd:complexType>\n <xsd:complexType
50
+ name=\"PropType\">\n <xsd:attribute name=\"name\" type=\"xsd:string\"/>\n
51
+ \ </xsd:complexType>\n <xsd:complexType name=\"TupleType\">\n <xsd:sequence
52
+ maxOccurs=\"unbounded\">\n <xsd:element name=\"Member\" type=\"MemberType\"/>\n
53
+ \ </xsd:sequence>\n </xsd:complexType>\n <xsd:complexType
54
+ name=\"MembersType\">\n <xsd:sequence maxOccurs=\"unbounded\">\n <xsd:element
55
+ name=\"Member\" type=\"MemberType\"/>\n </xsd:sequence>\n <xsd:attribute
56
+ name=\"Hierarchy\" type=\"xsd:string\"/>\n </xsd:complexType>\n <xsd:complexType
57
+ name=\"TuplesType\">\n <xsd:sequence maxOccurs=\"unbounded\">\n <xsd:element
58
+ name=\"Tuple\" type=\"TupleType\"/>\n </xsd:sequence>\n </xsd:complexType>\n
59
+ \ <xsd:complexType name=\"CrossProductType\">\n <xsd:sequence>\n
60
+ \ <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n <xsd:element
61
+ name=\"Members\" type=\"MembersType\"/>\n <xsd:element name=\"Tuples\"
62
+ type=\"TuplesType\"/>\n </xsd:choice>\n </xsd:sequence>\n
63
+ \ <xsd:attribute name=\"Size\" type=\"xsd:unsignedInt\"/>\n </xsd:complexType>\n
64
+ \ <xsd:complexType name=\"OlapInfo\">\n <xsd:sequence>\n <xsd:element
65
+ name=\"CubeInfo\">\n <xsd:complexType>\n <xsd:sequence>\n
66
+ \ <xsd:element name=\"Cube\" maxOccurs=\"unbounded\">\n <xsd:complexType>\n
67
+ \ <xsd:sequence>\n <xsd:element name=\"CubeName\"
68
+ type=\"xsd:string\"/>\n </xsd:sequence>\n </xsd:complexType>\n
69
+ \ </xsd:element>\n </xsd:sequence>\n </xsd:complexType>\n
70
+ \ </xsd:element>\n <xsd:element name=\"AxesInfo\">\n <xsd:complexType>\n
71
+ \ <xsd:sequence>\n <xsd:element name=\"AxisInfo\"
72
+ maxOccurs=\"unbounded\">\n <xsd:complexType>\n <xsd:sequence>\n
73
+ \ <xsd:element name=\"HierarchyInfo\" minOccurs=\"0\"
74
+ maxOccurs=\"unbounded\">\n <xsd:complexType>\n <xsd:sequence>\n
75
+ \ <xsd:sequence maxOccurs=\"unbounded\">\n <xsd:element
76
+ name=\"UName\" type=\"PropType\"/>\n <xsd:element
77
+ name=\"Caption\" type=\"PropType\"/>\n <xsd:element
78
+ name=\"LName\" type=\"PropType\"/>\n <xsd:element
79
+ name=\"LNum\" type=\"PropType\"/>\n <xsd:element
80
+ name=\"DisplayInfo\" type=\"PropType\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n
81
+ \ </xsd:sequence>\n <xsd:sequence>\n
82
+ \ <xsd:any processContents=\"lax\" minOccurs=\"0\"
83
+ maxOccurs=\"unbounded\"/>\n </xsd:sequence>\n </xsd:sequence>\n
84
+ \ <xsd:attribute name=\"name\" type=\"xsd:string\"
85
+ use=\"required\"/>\n </xsd:complexType>\n </xsd:element>\n
86
+ \ </xsd:sequence>\n <xsd:attribute
87
+ name=\"name\" type=\"xsd:string\"/>\n </xsd:complexType>\n
88
+ \ </xsd:element>\n </xsd:sequence>\n </xsd:complexType>\n
89
+ \ </xsd:element>\n <xsd:element name=\"CellInfo\">\n <xsd:complexType>\n
90
+ \ <xsd:sequence>\n <xsd:sequence minOccurs=\"0\"
91
+ maxOccurs=\"unbounded\">\n <xsd:choice>\n <xsd:element
92
+ name=\"Value\" type=\"PropType\"/>\n <xsd:element name=\"FmtValue\"
93
+ type=\"PropType\"/>\n <xsd:element name=\"BackColor\" type=\"PropType\"/>\n
94
+ \ <xsd:element name=\"ForeColor\" type=\"PropType\"/>\n
95
+ \ <xsd:element name=\"FontName\" type=\"PropType\"/>\n <xsd:element
96
+ name=\"FontSize\" type=\"PropType\"/>\n <xsd:element name=\"FontFlags\"
97
+ type=\"PropType\"/>\n <xsd:element name=\"FormatString\"
98
+ type=\"PropType\"/>\n <xsd:element name=\"NonEmptyBehavior\"
99
+ type=\"PropType\"/>\n <xsd:element name=\"SolveOrder\"
100
+ type=\"PropType\"/>\n <xsd:element name=\"Updateable\"
101
+ type=\"PropType\"/>\n <xsd:element name=\"Visible\" type=\"PropType\"/>\n
102
+ \ <xsd:element name=\"Expression\" type=\"PropType\"/>\n
103
+ \ </xsd:choice>\n </xsd:sequence>\n <xsd:sequence
104
+ maxOccurs=\"unbounded\" minOccurs=\"0\">\n <xsd:any processContents=\"lax\"
105
+ maxOccurs=\"unbounded\"/>\n </xsd:sequence>\n </xsd:sequence>\n
106
+ \ </xsd:complexType>\n </xsd:element>\n </xsd:sequence>\n
107
+ \ </xsd:complexType>\n <xsd:complexType name=\"Axes\">\n <xsd:sequence
108
+ maxOccurs=\"unbounded\">\n <xsd:element name=\"Axis\">\n <xsd:complexType>\n
109
+ \ <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n <xsd:element
110
+ name=\"CrossProduct\" type=\"CrossProductType\"/>\n <xsd:element
111
+ name=\"Tuples\" type=\"TuplesType\"/>\n <xsd:element name=\"Members\"
112
+ type=\"MembersType\"/>\n </xsd:choice>\n <xsd:attribute
113
+ name=\"name\" type=\"xsd:string\"/>\n </xsd:complexType>\n </xsd:element>\n
114
+ \ </xsd:sequence>\n </xsd:complexType>\n <xsd:complexType
115
+ name=\"CellData\">\n <xsd:sequence>\n <xsd:element name=\"Cell\"
116
+ minOccurs=\"0\" maxOccurs=\"unbounded\">\n <xsd:complexType>\n
117
+ \ <xsd:sequence maxOccurs=\"unbounded\">\n <xsd:choice>\n
118
+ \ <xsd:element name=\"Value\"/>\n <xsd:element
119
+ name=\"FmtValue\" type=\"xsd:string\"/>\n <xsd:element name=\"BackColor\"
120
+ type=\"xsd:unsignedInt\"/>\n <xsd:element name=\"ForeColor\"
121
+ type=\"xsd:unsignedInt\"/>\n <xsd:element name=\"FontName\"
122
+ type=\"xsd:string\"/>\n <xsd:element name=\"FontSize\" type=\"xsd:unsignedShort\"/>\n
123
+ \ <xsd:element name=\"FontFlags\" type=\"xsd:unsignedInt\"/>\n
124
+ \ <xsd:element name=\"FormatString\" type=\"xsd:string\"/>\n
125
+ \ <xsd:element name=\"NonEmptyBehavior\" type=\"xsd:unsignedShort\"/>\n
126
+ \ <xsd:element name=\"SolveOrder\" type=\"xsd:unsignedInt\"/>\n
127
+ \ <xsd:element name=\"Updateable\" type=\"xsd:unsignedInt\"/>\n
128
+ \ <xsd:element name=\"Visible\" type=\"xsd:unsignedInt\"/>\n
129
+ \ <xsd:element name=\"Expression\" type=\"xsd:string\"/>\n
130
+ \ </xsd:choice>\n </xsd:sequence>\n <xsd:attribute
131
+ name=\"CellOrdinal\" type=\"xsd:unsignedInt\" use=\"required\"/>\n </xsd:complexType>\n
132
+ \ </xsd:element>\n </xsd:sequence>\n </xsd:complexType>\n
133
+ \ <xsd:element name=\"root\">\n <xsd:complexType>\n <xsd:sequence
134
+ maxOccurs=\"unbounded\">\n <xsd:element name=\"OlapInfo\" type=\"OlapInfo\"/>\n
135
+ \ <xsd:element name=\"Axes\" type=\"Axes\"/>\n <xsd:element
136
+ name=\"CellData\" type=\"CellData\"/>\n </xsd:sequence>\n </xsd:complexType>\n
137
+ \ </xsd:element>\n </xsd:schema>\n <OlapInfo>\n <CubeInfo>\n
138
+ \ <Cube>\n <CubeName>Kvarovi</CubeName>\n </Cube>\n
139
+ \ </CubeInfo>\n <AxesInfo>\n <AxisInfo name=\"Axis0\">\n
140
+ \ <HierarchyInfo name=\"Measures\">\n <UName name=\"[Measures].[MEMBER_UNIQUE_NAME]\"/>\n
141
+ \ <Caption name=\"[Measures].[MEMBER_CAPTION]\"/>\n <LName
142
+ name=\"[Measures].[LEVEL_UNIQUE_NAME]\"/>\n <LNum name=\"[Measures].[LEVEL_NUMBER]\"/>\n
143
+ \ <DisplayInfo name=\"[Measures].[DISPLAY_INFO]\"/>\n </HierarchyInfo>\n
144
+ \ </AxisInfo>\n <AxisInfo name=\"SlicerAxis\">\n <HierarchyInfo
145
+ name=\"Vrijeme prijave\">\n <UName name=\"[Vrijeme prijave].[MEMBER_UNIQUE_NAME]\"/>\n
146
+ \ <Caption name=\"[Vrijeme prijave].[MEMBER_CAPTION]\"/>\n <LName
147
+ name=\"[Vrijeme prijave].[LEVEL_UNIQUE_NAME]\"/>\n <LNum name=\"[Vrijeme
148
+ prijave].[LEVEL_NUMBER]\"/>\n <DisplayInfo name=\"[Vrijeme prijave].[DISPLAY_INFO]\"/>\n
149
+ \ </HierarchyInfo>\n </AxisInfo>\n </AxesInfo>\n <CellInfo>\n
150
+ \ <Value name=\"VALUE\"/>\n <FmtValue name=\"FORMATTED_VALUE\"/>\n
151
+ \ <FormatString name=\"FORMAT_STRING\"/>\n </CellInfo>\n </OlapInfo>\n
152
+ \ <Axes>\n <Axis name=\"Axis0\">\n <Tuples>\n <Tuple>\n
153
+ \ <Member Hierarchy=\"Measures\">\n <UName>[Measures].[Rok
154
+ otklona]</UName>\n <Caption>Rok otklona</Caption>\n <LName>[Measures].[MeasuresLevel]</LName>\n
155
+ \ <LNum>0</LNum>\n <DisplayInfo>0</DisplayInfo>\n
156
+ \ </Member>\n </Tuple>\n </Tuples>\n </Axis>\n
157
+ \ <Axis name=\"SlicerAxis\">\n <Tuples>\n <Tuple>\n
158
+ \ <Member Hierarchy=\"Vrijeme prijave\">\n <UName>[Time].[2011]</UName>\n
159
+ \ <Caption>2011</Caption>\n <LName>[Time].[Godina]</LName>\n
160
+ \ <LNum>1</LNum>\n <DisplayInfo>12</DisplayInfo>\n
161
+ \ </Member>\n </Tuple>\n </Tuples>\n </Axis>\n
162
+ \ </Axes>\n <CellData>\n <Cell CellOrdinal=\"0\">\n <Value
163
+ xsi:type=\"xsd:double\">7.356</Value>\n <FmtValue>7.356</FmtValue>\n
164
+ \ <FormatString/>\n </Cell>\n </CellData>\n </root>\n
165
+ \ </cxmla:return>\n</cxmla:ExecuteResponse>\n</SOAP-ENV:Body>\n</SOAP-ENV:Envelope>\n"
166
+ http_version: '1.1'
data/spec/cube_spec.rb CHANGED
@@ -58,7 +58,7 @@ describe XMLA::Cube do
58
58
  end
59
59
  end
60
60
 
61
- it'should connect to mondrian' do
61
+ it 'should connect to mondrian' do
62
62
  configure_mondrian
63
63
 
64
64
  VCR.use_cassette('mondrian_broj_intervencija') do
@@ -69,7 +69,7 @@ describe XMLA::Cube do
69
69
  end
70
70
  end
71
71
 
72
- it'should handle the case with only one row in result' do
72
+ it 'should handle the case with only one row in result' do
73
73
  configure_mondrian
74
74
 
75
75
  VCR.use_cassette('mondrian_jedan_red_odgovor') do
@@ -85,7 +85,7 @@ describe XMLA::Cube do
85
85
  end
86
86
 
87
87
 
88
- it'should handle the case with zero rows in result' do
88
+ it 'should handle the case with zero rows in result' do
89
89
  configure_mondrian
90
90
 
91
91
  VCR.use_cassette('mondrian_nula_redaka') do
@@ -99,5 +99,19 @@ describe XMLA::Cube do
99
99
  end
100
100
  end
101
101
 
102
+ it 'should handle when scalar value is returned' do
103
+ configure_mondrian
104
+
105
+ VCR.use_cassette('mondrian_scalar_value') do
106
+ result = XMLA::Cube.execute <<-MDX
107
+ SELECT {Hierarchize({[Measures].[Rok otklona]})} ON COLUMNS
108
+ FROM [Kvarovi]
109
+ WHERE [Vrijeme prijave].[2011]
110
+ MDX
111
+ result.size.should == 1
112
+ result[0].should == "7.356"
113
+ end
114
+
115
+ end
102
116
 
103
117
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cube
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.2.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-15 00:00:00.000000000Z
12
+ date: 2012-02-17 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: savon
16
- requirement: &70098177763320 !ruby/object:Gem::Requirement
16
+ requirement: &70127395026240 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70098177763320
24
+ version_requirements: *70127395026240
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: webmock
27
- requirement: &70098177762780 !ruby/object:Gem::Requirement
27
+ requirement: &70127395025680 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70098177762780
35
+ version_requirements: *70127395025680
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: guerrilla_patch
38
- requirement: &70098177762260 !ruby/object:Gem::Requirement
38
+ requirement: &70127395024960 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70098177762260
46
+ version_requirements: *70127395024960
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: vcr
49
- requirement: &70098177761620 !ruby/object:Gem::Requirement
49
+ requirement: &70127395024440 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70098177761620
57
+ version_requirements: *70127395024440
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rspec
60
- requirement: &70098177761100 !ruby/object:Gem::Requirement
60
+ requirement: &70127395023920 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 2.3.0
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70098177761100
68
+ version_requirements: *70127395023920
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: bundler
71
- requirement: &70098177760540 !ruby/object:Gem::Requirement
71
+ requirement: &70127395023320 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 1.0.0
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70098177760540
79
+ version_requirements: *70127395023320
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: jeweler
82
- requirement: &70098177759980 !ruby/object:Gem::Requirement
82
+ requirement: &70127395022740 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ~>
@@ -87,7 +87,7 @@ dependencies:
87
87
  version: 1.6.4
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70098177759980
90
+ version_requirements: *70127395022740
91
91
  description: Eases the pain I had to go through to get to the data out of XMLA based
92
92
  OLAP provider
93
93
  email: kresimir.bojcic@gmail.com
@@ -116,6 +116,8 @@ files:
116
116
  - spec/cassettes/mondrian_broj_intervencija.yml
117
117
  - spec/cassettes/mondrian_jedan_red_odgovor.yml
118
118
  - spec/cassettes/mondrian_nula_redaka.yml
119
+ - spec/cassettes/mondrian_scalar_value.yml
120
+ - spec/cassettes/mondrian_vrati_samo_jedan_broj.yml
119
121
  - spec/cassettes/razlog_prijave_i_kvart.yml
120
122
  - spec/cube_spec.rb
121
123
  - spec/spec_helper.rb
@@ -134,7 +136,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
134
136
  version: '0'
135
137
  segments:
136
138
  - 0
137
- hash: 1940280110315131232
139
+ hash: 1611623706615328168
138
140
  required_rubygems_version: !ruby/object:Gem::Requirement
139
141
  none: false
140
142
  requirements: