cube 1.2.0 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
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: