cube 1.1.0 → 1.2.0
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/README.md +6 -4
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/cube.gemspec +5 -3
- data/lib/cube/cube.rb +9 -3
- data/spec/cassettes/mondrian_jedan_red_odgovor.yml +171 -0
- data/spec/cassettes/mondrian_nula_redaka.yml +159 -0
- data/spec/cube_spec.rb +40 -5
- metadata +21 -19
data/README.md
CHANGED
@@ -18,17 +18,19 @@ Set up your catalog and endpoint
|
|
18
18
|
|
19
19
|
```
|
20
20
|
XMLA.configure do |c|
|
21
|
-
c.endpoint = "http://localhost:8282/icCube/xmla"
|
22
21
|
c.catalog = "GOSJAR"
|
22
|
+
c.endpoint = "http://localhost:8282/icCube/xmla"
|
23
23
|
end
|
24
24
|
```
|
25
25
|
|
26
26
|
Usage
|
27
27
|
-------
|
28
28
|
```
|
29
|
-
table = XMLA::Cube.execute
|
30
|
-
|
31
|
-
|
29
|
+
table = XMLA::Cube.execute <<-MDX
|
30
|
+
SELECT [Location].[City].children on COLUMNS,
|
31
|
+
[Measures].[Count] on ROWS
|
32
|
+
FROM [GOSJAR]"
|
33
|
+
MDX
|
32
34
|
```
|
33
35
|
|
34
36
|
Limitations
|
data/Rakefile
CHANGED
@@ -18,7 +18,7 @@ Jeweler::Tasks.new do |gem|
|
|
18
18
|
gem.homepage = "http://github.com/drkreso/cube"
|
19
19
|
gem.license = "MIT"
|
20
20
|
gem.summary = %Q{Get's the data from OLAP cube via XMLA}
|
21
|
-
gem.description = %Q{Eases the pain I had to go through to get to the data of
|
21
|
+
gem.description = %Q{Eases the pain I had to go through to get to the data out of XMLA based OLAP provider}
|
22
22
|
gem.email = "kresimir.bojcic@gmail.com"
|
23
23
|
gem.authors = ["drKreso"]
|
24
24
|
# dependencies defined in Gemfile
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.2.0
|
data/cube.gemspec
CHANGED
@@ -5,12 +5,12 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "cube"
|
8
|
-
s.version = "1.
|
8
|
+
s.version = "1.2.0"
|
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-
|
13
|
-
s.description = "Eases the pain I had to go through to get to the data of
|
12
|
+
s.date = "2012-02-15"
|
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 = [
|
16
16
|
"LICENSE.txt",
|
@@ -34,6 +34,8 @@ Gem::Specification.new do |s|
|
|
34
34
|
"spec/cassettes/kvartovi_u_recima.yml",
|
35
35
|
"spec/cassettes/kvatovi_u_koloni.yml",
|
36
36
|
"spec/cassettes/mondrian_broj_intervencija.yml",
|
37
|
+
"spec/cassettes/mondrian_jedan_red_odgovor.yml",
|
38
|
+
"spec/cassettes/mondrian_nula_redaka.yml",
|
37
39
|
"spec/cassettes/razlog_prijave_i_kvart.yml",
|
38
40
|
"spec/cube_spec.rb",
|
39
41
|
"spec/spec_helper.rb"
|
data/lib/cube/cube.rb
CHANGED
@@ -23,7 +23,7 @@ module XMLA
|
|
23
23
|
|
24
24
|
let(:x_axe) { @x_axe ||= axes[0] }
|
25
25
|
let(:y_axe) { @y_axe ||= axes[1] }
|
26
|
-
let(:y_size) { y_axe[0].size }
|
26
|
+
let(:y_size) { y_axe[0].nil? ? 0 : y_axe[0].size }
|
27
27
|
let(:x_size) { x_axe.size }
|
28
28
|
|
29
29
|
private
|
@@ -80,10 +80,16 @@ module XMLA
|
|
80
80
|
|
81
81
|
def cell_data
|
82
82
|
cell_data = @response.to_hash[:execute_response][:return][:root][:cell_data]
|
83
|
-
@data ||= cell_data.reduce([])
|
83
|
+
@data ||= cell_data.reduce([]) do |data, cell|
|
84
|
+
cell[1].reduce(data) do |data, value|
|
85
|
+
data << (value.class == Hash ? value[:value] : value[1] )
|
86
|
+
end
|
87
|
+
end
|
84
88
|
end
|
85
89
|
|
86
|
-
|
90
|
+
def tuple(axe)
|
91
|
+
axe[:tuples].nil? ? [] : axe[:tuples][:tuple]
|
92
|
+
end
|
87
93
|
|
88
94
|
def Cube.request_body(query, catalog)
|
89
95
|
"<Command> <Statement> <![CDATA[ #{query} ]]> </Statement> </Command> <Properties> <PropertyList> <Catalog>#{catalog}</Catalog>
|
@@ -0,0 +1,171 @@
|
|
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 NON EMPTY {Hierarchize({[Measures].[Broj intervencija]})} ON
|
11
|
+
COLUMNS,\n non empty ( { Filter (Hierarchize({[Razlog prijave].children}),
|
12
|
+
[Measures].[Broj intervencija] >= 7000 )}) ON ROWS\n FROM [Kvarovi]\n
|
13
|
+
]]> </Statement> </Command> <Properties> <PropertyList> <Catalog>GOSJAR</Catalog>\n
|
14
|
+
\ <Format>Multidimensional</Format> <AxisFormat>TupleFormat</AxisFormat>
|
15
|
+
</PropertyList> </Properties></Execute></env:Body></env:Envelope>"
|
16
|
+
headers:
|
17
|
+
soapaction:
|
18
|
+
- ! '"urn:schemas-microsoft-com:xml-analysis:Execute"'
|
19
|
+
content-type:
|
20
|
+
- text/xml;charset=UTF-8
|
21
|
+
content-length:
|
22
|
+
- '839'
|
23
|
+
response: !ruby/struct:VCR::Response
|
24
|
+
status: !ruby/struct:VCR::ResponseStatus
|
25
|
+
code: 200
|
26
|
+
message: OK
|
27
|
+
headers:
|
28
|
+
server:
|
29
|
+
- Apache-Coyote/1.1
|
30
|
+
content-type:
|
31
|
+
- text/xml;charset=UTF-8
|
32
|
+
transfer-encoding:
|
33
|
+
- chunked
|
34
|
+
date:
|
35
|
+
- Wed, 15 Feb 2012 20:37:46 GMT
|
36
|
+
body: ! "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"
|
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
|
+
xmlns:cxmla=\"urn:schemas-microsoft-com:xml-analysis\">\n <cxmla:return>\n
|
39
|
+
\ <root xmlns=\"urn:schemas-microsoft-com:xml-analysis:mddataset\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
|
40
|
+
xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:EX=\"urn:schemas-microsoft-com:xml-analysis:exception\">\n
|
41
|
+
\ <xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" targetNamespace=\"urn:schemas-microsoft-com:xml-analysis:mddataset\"
|
42
|
+
xmlns=\"urn:schemas-microsoft-com:xml-analysis:mddataset\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
|
43
|
+
xmlns:sql=\"urn:schemas-microsoft-com:xml-sql\" elementFormDefault=\"qualified\">\n
|
44
|
+
\ <xsd:complexType name=\"MemberType\">\n <xsd:sequence>\n <xsd:element
|
45
|
+
name=\"UName\" type=\"xsd:string\"/>\n <xsd:element name=\"Caption\"
|
46
|
+
type=\"xsd:string\"/>\n <xsd:element name=\"LName\" type=\"xsd:string\"/>\n
|
47
|
+
\ <xsd:element name=\"LNum\" type=\"xsd:unsignedInt\"/>\n <xsd:element
|
48
|
+
name=\"DisplayInfo\" type=\"xsd:unsignedInt\"/>\n <xsd:sequence maxOccurs=\"unbounded\"
|
49
|
+
minOccurs=\"0\">\n <xsd:any processContents=\"lax\" maxOccurs=\"unbounded\"/>\n
|
50
|
+
\ </xsd:sequence>\n </xsd:sequence>\n <xsd:attribute
|
51
|
+
name=\"Hierarchy\" type=\"xsd:string\"/>\n </xsd:complexType>\n <xsd:complexType
|
52
|
+
name=\"PropType\">\n <xsd:attribute name=\"name\" type=\"xsd:string\"/>\n
|
53
|
+
\ </xsd:complexType>\n <xsd:complexType name=\"TupleType\">\n <xsd:sequence
|
54
|
+
maxOccurs=\"unbounded\">\n <xsd:element name=\"Member\" type=\"MemberType\"/>\n
|
55
|
+
\ </xsd:sequence>\n </xsd:complexType>\n <xsd:complexType
|
56
|
+
name=\"MembersType\">\n <xsd:sequence maxOccurs=\"unbounded\">\n <xsd:element
|
57
|
+
name=\"Member\" type=\"MemberType\"/>\n </xsd:sequence>\n <xsd:attribute
|
58
|
+
name=\"Hierarchy\" type=\"xsd:string\"/>\n </xsd:complexType>\n <xsd:complexType
|
59
|
+
name=\"TuplesType\">\n <xsd:sequence maxOccurs=\"unbounded\">\n <xsd:element
|
60
|
+
name=\"Tuple\" type=\"TupleType\"/>\n </xsd:sequence>\n </xsd:complexType>\n
|
61
|
+
\ <xsd:complexType name=\"CrossProductType\">\n <xsd:sequence>\n
|
62
|
+
\ <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n <xsd:element
|
63
|
+
name=\"Members\" type=\"MembersType\"/>\n <xsd:element name=\"Tuples\"
|
64
|
+
type=\"TuplesType\"/>\n </xsd:choice>\n </xsd:sequence>\n
|
65
|
+
\ <xsd:attribute name=\"Size\" type=\"xsd:unsignedInt\"/>\n </xsd:complexType>\n
|
66
|
+
\ <xsd:complexType name=\"OlapInfo\">\n <xsd:sequence>\n <xsd:element
|
67
|
+
name=\"CubeInfo\">\n <xsd:complexType>\n <xsd:sequence>\n
|
68
|
+
\ <xsd:element name=\"Cube\" maxOccurs=\"unbounded\">\n <xsd:complexType>\n
|
69
|
+
\ <xsd:sequence>\n <xsd:element name=\"CubeName\"
|
70
|
+
type=\"xsd:string\"/>\n </xsd:sequence>\n </xsd:complexType>\n
|
71
|
+
\ </xsd:element>\n </xsd:sequence>\n </xsd:complexType>\n
|
72
|
+
\ </xsd:element>\n <xsd:element name=\"AxesInfo\">\n <xsd:complexType>\n
|
73
|
+
\ <xsd:sequence>\n <xsd:element name=\"AxisInfo\"
|
74
|
+
maxOccurs=\"unbounded\">\n <xsd:complexType>\n <xsd:sequence>\n
|
75
|
+
\ <xsd:element name=\"HierarchyInfo\" minOccurs=\"0\"
|
76
|
+
maxOccurs=\"unbounded\">\n <xsd:complexType>\n <xsd:sequence>\n
|
77
|
+
\ <xsd:sequence maxOccurs=\"unbounded\">\n <xsd:element
|
78
|
+
name=\"UName\" type=\"PropType\"/>\n <xsd:element
|
79
|
+
name=\"Caption\" type=\"PropType\"/>\n <xsd:element
|
80
|
+
name=\"LName\" type=\"PropType\"/>\n <xsd:element
|
81
|
+
name=\"LNum\" type=\"PropType\"/>\n <xsd:element
|
82
|
+
name=\"DisplayInfo\" type=\"PropType\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n
|
83
|
+
\ </xsd:sequence>\n <xsd:sequence>\n
|
84
|
+
\ <xsd:any processContents=\"lax\" minOccurs=\"0\"
|
85
|
+
maxOccurs=\"unbounded\"/>\n </xsd:sequence>\n </xsd:sequence>\n
|
86
|
+
\ <xsd:attribute name=\"name\" type=\"xsd:string\"
|
87
|
+
use=\"required\"/>\n </xsd:complexType>\n </xsd:element>\n
|
88
|
+
\ </xsd:sequence>\n <xsd:attribute
|
89
|
+
name=\"name\" type=\"xsd:string\"/>\n </xsd:complexType>\n
|
90
|
+
\ </xsd:element>\n </xsd:sequence>\n </xsd:complexType>\n
|
91
|
+
\ </xsd:element>\n <xsd:element name=\"CellInfo\">\n <xsd:complexType>\n
|
92
|
+
\ <xsd:sequence>\n <xsd:sequence minOccurs=\"0\"
|
93
|
+
maxOccurs=\"unbounded\">\n <xsd:choice>\n <xsd:element
|
94
|
+
name=\"Value\" type=\"PropType\"/>\n <xsd:element name=\"FmtValue\"
|
95
|
+
type=\"PropType\"/>\n <xsd:element name=\"BackColor\" type=\"PropType\"/>\n
|
96
|
+
\ <xsd:element name=\"ForeColor\" type=\"PropType\"/>\n
|
97
|
+
\ <xsd:element name=\"FontName\" type=\"PropType\"/>\n <xsd:element
|
98
|
+
name=\"FontSize\" type=\"PropType\"/>\n <xsd:element name=\"FontFlags\"
|
99
|
+
type=\"PropType\"/>\n <xsd:element name=\"FormatString\"
|
100
|
+
type=\"PropType\"/>\n <xsd:element name=\"NonEmptyBehavior\"
|
101
|
+
type=\"PropType\"/>\n <xsd:element name=\"SolveOrder\"
|
102
|
+
type=\"PropType\"/>\n <xsd:element name=\"Updateable\"
|
103
|
+
type=\"PropType\"/>\n <xsd:element name=\"Visible\" type=\"PropType\"/>\n
|
104
|
+
\ <xsd:element name=\"Expression\" type=\"PropType\"/>\n
|
105
|
+
\ </xsd:choice>\n </xsd:sequence>\n <xsd:sequence
|
106
|
+
maxOccurs=\"unbounded\" minOccurs=\"0\">\n <xsd:any processContents=\"lax\"
|
107
|
+
maxOccurs=\"unbounded\"/>\n </xsd:sequence>\n </xsd:sequence>\n
|
108
|
+
\ </xsd:complexType>\n </xsd:element>\n </xsd:sequence>\n
|
109
|
+
\ </xsd:complexType>\n <xsd:complexType name=\"Axes\">\n <xsd:sequence
|
110
|
+
maxOccurs=\"unbounded\">\n <xsd:element name=\"Axis\">\n <xsd:complexType>\n
|
111
|
+
\ <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n <xsd:element
|
112
|
+
name=\"CrossProduct\" type=\"CrossProductType\"/>\n <xsd:element
|
113
|
+
name=\"Tuples\" type=\"TuplesType\"/>\n <xsd:element name=\"Members\"
|
114
|
+
type=\"MembersType\"/>\n </xsd:choice>\n <xsd:attribute
|
115
|
+
name=\"name\" type=\"xsd:string\"/>\n </xsd:complexType>\n </xsd:element>\n
|
116
|
+
\ </xsd:sequence>\n </xsd:complexType>\n <xsd:complexType
|
117
|
+
name=\"CellData\">\n <xsd:sequence>\n <xsd:element name=\"Cell\"
|
118
|
+
minOccurs=\"0\" maxOccurs=\"unbounded\">\n <xsd:complexType>\n
|
119
|
+
\ <xsd:sequence maxOccurs=\"unbounded\">\n <xsd:choice>\n
|
120
|
+
\ <xsd:element name=\"Value\"/>\n <xsd:element
|
121
|
+
name=\"FmtValue\" type=\"xsd:string\"/>\n <xsd:element name=\"BackColor\"
|
122
|
+
type=\"xsd:unsignedInt\"/>\n <xsd:element name=\"ForeColor\"
|
123
|
+
type=\"xsd:unsignedInt\"/>\n <xsd:element name=\"FontName\"
|
124
|
+
type=\"xsd:string\"/>\n <xsd:element name=\"FontSize\" type=\"xsd:unsignedShort\"/>\n
|
125
|
+
\ <xsd:element name=\"FontFlags\" type=\"xsd:unsignedInt\"/>\n
|
126
|
+
\ <xsd:element name=\"FormatString\" type=\"xsd:string\"/>\n
|
127
|
+
\ <xsd:element name=\"NonEmptyBehavior\" type=\"xsd:unsignedShort\"/>\n
|
128
|
+
\ <xsd:element name=\"SolveOrder\" type=\"xsd:unsignedInt\"/>\n
|
129
|
+
\ <xsd:element name=\"Updateable\" type=\"xsd:unsignedInt\"/>\n
|
130
|
+
\ <xsd:element name=\"Visible\" type=\"xsd:unsignedInt\"/>\n
|
131
|
+
\ <xsd:element name=\"Expression\" type=\"xsd:string\"/>\n
|
132
|
+
\ </xsd:choice>\n </xsd:sequence>\n <xsd:attribute
|
133
|
+
name=\"CellOrdinal\" type=\"xsd:unsignedInt\" use=\"required\"/>\n </xsd:complexType>\n
|
134
|
+
\ </xsd:element>\n </xsd:sequence>\n </xsd:complexType>\n
|
135
|
+
\ <xsd:element name=\"root\">\n <xsd:complexType>\n <xsd:sequence
|
136
|
+
maxOccurs=\"unbounded\">\n <xsd:element name=\"OlapInfo\" type=\"OlapInfo\"/>\n
|
137
|
+
\ <xsd:element name=\"Axes\" type=\"Axes\"/>\n <xsd:element
|
138
|
+
name=\"CellData\" type=\"CellData\"/>\n </xsd:sequence>\n </xsd:complexType>\n
|
139
|
+
\ </xsd:element>\n </xsd:schema>\n <OlapInfo>\n <CubeInfo>\n
|
140
|
+
\ <Cube>\n <CubeName>Kvarovi</CubeName>\n </Cube>\n
|
141
|
+
\ </CubeInfo>\n <AxesInfo>\n <AxisInfo name=\"Axis0\">\n
|
142
|
+
\ <HierarchyInfo name=\"Measures\">\n <UName name=\"[Measures].[MEMBER_UNIQUE_NAME]\"/>\n
|
143
|
+
\ <Caption name=\"[Measures].[MEMBER_CAPTION]\"/>\n <LName
|
144
|
+
name=\"[Measures].[LEVEL_UNIQUE_NAME]\"/>\n <LNum name=\"[Measures].[LEVEL_NUMBER]\"/>\n
|
145
|
+
\ <DisplayInfo name=\"[Measures].[DISPLAY_INFO]\"/>\n </HierarchyInfo>\n
|
146
|
+
\ </AxisInfo>\n <AxisInfo name=\"Axis1\">\n <HierarchyInfo
|
147
|
+
name=\"Razlog prijave.Razlog prijave\">\n <UName name=\"[Razlog
|
148
|
+
prijave].[MEMBER_UNIQUE_NAME]\"/>\n <Caption name=\"[Razlog prijave].[MEMBER_CAPTION]\"/>\n
|
149
|
+
\ <LName name=\"[Razlog prijave].[LEVEL_UNIQUE_NAME]\"/>\n <LNum
|
150
|
+
name=\"[Razlog prijave].[LEVEL_NUMBER]\"/>\n <DisplayInfo name=\"[Razlog
|
151
|
+
prijave].[DISPLAY_INFO]\"/>\n </HierarchyInfo>\n </AxisInfo>\n
|
152
|
+
\ <AxisInfo name=\"SlicerAxis\"/>\n </AxesInfo>\n <CellInfo>\n
|
153
|
+
\ <Value name=\"VALUE\"/>\n <FmtValue name=\"FORMATTED_VALUE\"/>\n
|
154
|
+
\ <FormatString name=\"FORMAT_STRING\"/>\n </CellInfo>\n </OlapInfo>\n
|
155
|
+
\ <Axes>\n <Axis name=\"Axis0\">\n <Tuples>\n <Tuple>\n
|
156
|
+
\ <Member Hierarchy=\"Measures\">\n <UName>[Measures].[Broj
|
157
|
+
intervencija]</UName>\n <Caption>Broj intervencija</Caption>\n
|
158
|
+
\ <LName>[Measures].[MeasuresLevel]</LName>\n <LNum>0</LNum>\n
|
159
|
+
\ <DisplayInfo>0</DisplayInfo>\n </Member>\n </Tuple>\n
|
160
|
+
\ </Tuples>\n </Axis>\n <Axis name=\"Axis1\">\n <Tuples>\n
|
161
|
+
\ <Tuple>\n <Member Hierarchy=\"Razlog prijave.Razlog
|
162
|
+
prijave\">\n <UName>[Razlog prijave].[Ne radi svjetiljka]</UName>\n
|
163
|
+
\ <Caption>Ne radi svjetiljka</Caption>\n <LName>[Razlog
|
164
|
+
prijave].[Razlog prijave]</LName>\n <LNum>1</LNum>\n <DisplayInfo>0</DisplayInfo>\n
|
165
|
+
\ </Member>\n </Tuple>\n </Tuples>\n </Axis>\n
|
166
|
+
\ <Axis name=\"SlicerAxis\">\n <Tuples>\n <Tuple/>\n
|
167
|
+
\ </Tuples>\n </Axis>\n </Axes>\n <CellData>\n <Cell
|
168
|
+
CellOrdinal=\"0\">\n <Value xsi:type=\"xsd:int\">14442</Value>\n <FmtValue>14,442</FmtValue>\n
|
169
|
+
\ <FormatString/>\n </Cell>\n </CellData>\n </root>\n
|
170
|
+
\ </cxmla:return>\n</cxmla:ExecuteResponse>\n</SOAP-ENV:Body>\n</SOAP-ENV:Envelope>\n"
|
171
|
+
http_version: '1.1'
|
@@ -0,0 +1,159 @@
|
|
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 NON EMPTY {Hierarchize({[Measures].[Broj intervencija]})} ON
|
11
|
+
COLUMNS,\n non empty ( { Filter (Hierarchize({[Razlog prijave].children}),
|
12
|
+
[Measures].[Broj intervencija] >= 15000 )}) ON ROWS\n FROM [Kvarovi]\n
|
13
|
+
]]> </Statement> </Command> <Properties> <PropertyList> <Catalog>GOSJAR</Catalog>\n
|
14
|
+
\ <Format>Multidimensional</Format> <AxisFormat>TupleFormat</AxisFormat>
|
15
|
+
</PropertyList> </Properties></Execute></env:Body></env:Envelope>"
|
16
|
+
headers:
|
17
|
+
soapaction:
|
18
|
+
- ! '"urn:schemas-microsoft-com:xml-analysis:Execute"'
|
19
|
+
content-type:
|
20
|
+
- text/xml;charset=UTF-8
|
21
|
+
content-length:
|
22
|
+
- '840'
|
23
|
+
response: !ruby/struct:VCR::Response
|
24
|
+
status: !ruby/struct:VCR::ResponseStatus
|
25
|
+
code: 200
|
26
|
+
message: OK
|
27
|
+
headers:
|
28
|
+
server:
|
29
|
+
- Apache-Coyote/1.1
|
30
|
+
content-type:
|
31
|
+
- text/xml;charset=UTF-8
|
32
|
+
transfer-encoding:
|
33
|
+
- chunked
|
34
|
+
date:
|
35
|
+
- Wed, 15 Feb 2012 20:48:55 GMT
|
36
|
+
body: ! "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"
|
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
|
+
xmlns:cxmla=\"urn:schemas-microsoft-com:xml-analysis\">\n <cxmla:return>\n
|
39
|
+
\ <root xmlns=\"urn:schemas-microsoft-com:xml-analysis:mddataset\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
|
40
|
+
xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:EX=\"urn:schemas-microsoft-com:xml-analysis:exception\">\n
|
41
|
+
\ <xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" targetNamespace=\"urn:schemas-microsoft-com:xml-analysis:mddataset\"
|
42
|
+
xmlns=\"urn:schemas-microsoft-com:xml-analysis:mddataset\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
|
43
|
+
xmlns:sql=\"urn:schemas-microsoft-com:xml-sql\" elementFormDefault=\"qualified\">\n
|
44
|
+
\ <xsd:complexType name=\"MemberType\">\n <xsd:sequence>\n <xsd:element
|
45
|
+
name=\"UName\" type=\"xsd:string\"/>\n <xsd:element name=\"Caption\"
|
46
|
+
type=\"xsd:string\"/>\n <xsd:element name=\"LName\" type=\"xsd:string\"/>\n
|
47
|
+
\ <xsd:element name=\"LNum\" type=\"xsd:unsignedInt\"/>\n <xsd:element
|
48
|
+
name=\"DisplayInfo\" type=\"xsd:unsignedInt\"/>\n <xsd:sequence maxOccurs=\"unbounded\"
|
49
|
+
minOccurs=\"0\">\n <xsd:any processContents=\"lax\" maxOccurs=\"unbounded\"/>\n
|
50
|
+
\ </xsd:sequence>\n </xsd:sequence>\n <xsd:attribute
|
51
|
+
name=\"Hierarchy\" type=\"xsd:string\"/>\n </xsd:complexType>\n <xsd:complexType
|
52
|
+
name=\"PropType\">\n <xsd:attribute name=\"name\" type=\"xsd:string\"/>\n
|
53
|
+
\ </xsd:complexType>\n <xsd:complexType name=\"TupleType\">\n <xsd:sequence
|
54
|
+
maxOccurs=\"unbounded\">\n <xsd:element name=\"Member\" type=\"MemberType\"/>\n
|
55
|
+
\ </xsd:sequence>\n </xsd:complexType>\n <xsd:complexType
|
56
|
+
name=\"MembersType\">\n <xsd:sequence maxOccurs=\"unbounded\">\n <xsd:element
|
57
|
+
name=\"Member\" type=\"MemberType\"/>\n </xsd:sequence>\n <xsd:attribute
|
58
|
+
name=\"Hierarchy\" type=\"xsd:string\"/>\n </xsd:complexType>\n <xsd:complexType
|
59
|
+
name=\"TuplesType\">\n <xsd:sequence maxOccurs=\"unbounded\">\n <xsd:element
|
60
|
+
name=\"Tuple\" type=\"TupleType\"/>\n </xsd:sequence>\n </xsd:complexType>\n
|
61
|
+
\ <xsd:complexType name=\"CrossProductType\">\n <xsd:sequence>\n
|
62
|
+
\ <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n <xsd:element
|
63
|
+
name=\"Members\" type=\"MembersType\"/>\n <xsd:element name=\"Tuples\"
|
64
|
+
type=\"TuplesType\"/>\n </xsd:choice>\n </xsd:sequence>\n
|
65
|
+
\ <xsd:attribute name=\"Size\" type=\"xsd:unsignedInt\"/>\n </xsd:complexType>\n
|
66
|
+
\ <xsd:complexType name=\"OlapInfo\">\n <xsd:sequence>\n <xsd:element
|
67
|
+
name=\"CubeInfo\">\n <xsd:complexType>\n <xsd:sequence>\n
|
68
|
+
\ <xsd:element name=\"Cube\" maxOccurs=\"unbounded\">\n <xsd:complexType>\n
|
69
|
+
\ <xsd:sequence>\n <xsd:element name=\"CubeName\"
|
70
|
+
type=\"xsd:string\"/>\n </xsd:sequence>\n </xsd:complexType>\n
|
71
|
+
\ </xsd:element>\n </xsd:sequence>\n </xsd:complexType>\n
|
72
|
+
\ </xsd:element>\n <xsd:element name=\"AxesInfo\">\n <xsd:complexType>\n
|
73
|
+
\ <xsd:sequence>\n <xsd:element name=\"AxisInfo\"
|
74
|
+
maxOccurs=\"unbounded\">\n <xsd:complexType>\n <xsd:sequence>\n
|
75
|
+
\ <xsd:element name=\"HierarchyInfo\" minOccurs=\"0\"
|
76
|
+
maxOccurs=\"unbounded\">\n <xsd:complexType>\n <xsd:sequence>\n
|
77
|
+
\ <xsd:sequence maxOccurs=\"unbounded\">\n <xsd:element
|
78
|
+
name=\"UName\" type=\"PropType\"/>\n <xsd:element
|
79
|
+
name=\"Caption\" type=\"PropType\"/>\n <xsd:element
|
80
|
+
name=\"LName\" type=\"PropType\"/>\n <xsd:element
|
81
|
+
name=\"LNum\" type=\"PropType\"/>\n <xsd:element
|
82
|
+
name=\"DisplayInfo\" type=\"PropType\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n
|
83
|
+
\ </xsd:sequence>\n <xsd:sequence>\n
|
84
|
+
\ <xsd:any processContents=\"lax\" minOccurs=\"0\"
|
85
|
+
maxOccurs=\"unbounded\"/>\n </xsd:sequence>\n </xsd:sequence>\n
|
86
|
+
\ <xsd:attribute name=\"name\" type=\"xsd:string\"
|
87
|
+
use=\"required\"/>\n </xsd:complexType>\n </xsd:element>\n
|
88
|
+
\ </xsd:sequence>\n <xsd:attribute
|
89
|
+
name=\"name\" type=\"xsd:string\"/>\n </xsd:complexType>\n
|
90
|
+
\ </xsd:element>\n </xsd:sequence>\n </xsd:complexType>\n
|
91
|
+
\ </xsd:element>\n <xsd:element name=\"CellInfo\">\n <xsd:complexType>\n
|
92
|
+
\ <xsd:sequence>\n <xsd:sequence minOccurs=\"0\"
|
93
|
+
maxOccurs=\"unbounded\">\n <xsd:choice>\n <xsd:element
|
94
|
+
name=\"Value\" type=\"PropType\"/>\n <xsd:element name=\"FmtValue\"
|
95
|
+
type=\"PropType\"/>\n <xsd:element name=\"BackColor\" type=\"PropType\"/>\n
|
96
|
+
\ <xsd:element name=\"ForeColor\" type=\"PropType\"/>\n
|
97
|
+
\ <xsd:element name=\"FontName\" type=\"PropType\"/>\n <xsd:element
|
98
|
+
name=\"FontSize\" type=\"PropType\"/>\n <xsd:element name=\"FontFlags\"
|
99
|
+
type=\"PropType\"/>\n <xsd:element name=\"FormatString\"
|
100
|
+
type=\"PropType\"/>\n <xsd:element name=\"NonEmptyBehavior\"
|
101
|
+
type=\"PropType\"/>\n <xsd:element name=\"SolveOrder\"
|
102
|
+
type=\"PropType\"/>\n <xsd:element name=\"Updateable\"
|
103
|
+
type=\"PropType\"/>\n <xsd:element name=\"Visible\" type=\"PropType\"/>\n
|
104
|
+
\ <xsd:element name=\"Expression\" type=\"PropType\"/>\n
|
105
|
+
\ </xsd:choice>\n </xsd:sequence>\n <xsd:sequence
|
106
|
+
maxOccurs=\"unbounded\" minOccurs=\"0\">\n <xsd:any processContents=\"lax\"
|
107
|
+
maxOccurs=\"unbounded\"/>\n </xsd:sequence>\n </xsd:sequence>\n
|
108
|
+
\ </xsd:complexType>\n </xsd:element>\n </xsd:sequence>\n
|
109
|
+
\ </xsd:complexType>\n <xsd:complexType name=\"Axes\">\n <xsd:sequence
|
110
|
+
maxOccurs=\"unbounded\">\n <xsd:element name=\"Axis\">\n <xsd:complexType>\n
|
111
|
+
\ <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n <xsd:element
|
112
|
+
name=\"CrossProduct\" type=\"CrossProductType\"/>\n <xsd:element
|
113
|
+
name=\"Tuples\" type=\"TuplesType\"/>\n <xsd:element name=\"Members\"
|
114
|
+
type=\"MembersType\"/>\n </xsd:choice>\n <xsd:attribute
|
115
|
+
name=\"name\" type=\"xsd:string\"/>\n </xsd:complexType>\n </xsd:element>\n
|
116
|
+
\ </xsd:sequence>\n </xsd:complexType>\n <xsd:complexType
|
117
|
+
name=\"CellData\">\n <xsd:sequence>\n <xsd:element name=\"Cell\"
|
118
|
+
minOccurs=\"0\" maxOccurs=\"unbounded\">\n <xsd:complexType>\n
|
119
|
+
\ <xsd:sequence maxOccurs=\"unbounded\">\n <xsd:choice>\n
|
120
|
+
\ <xsd:element name=\"Value\"/>\n <xsd:element
|
121
|
+
name=\"FmtValue\" type=\"xsd:string\"/>\n <xsd:element name=\"BackColor\"
|
122
|
+
type=\"xsd:unsignedInt\"/>\n <xsd:element name=\"ForeColor\"
|
123
|
+
type=\"xsd:unsignedInt\"/>\n <xsd:element name=\"FontName\"
|
124
|
+
type=\"xsd:string\"/>\n <xsd:element name=\"FontSize\" type=\"xsd:unsignedShort\"/>\n
|
125
|
+
\ <xsd:element name=\"FontFlags\" type=\"xsd:unsignedInt\"/>\n
|
126
|
+
\ <xsd:element name=\"FormatString\" type=\"xsd:string\"/>\n
|
127
|
+
\ <xsd:element name=\"NonEmptyBehavior\" type=\"xsd:unsignedShort\"/>\n
|
128
|
+
\ <xsd:element name=\"SolveOrder\" type=\"xsd:unsignedInt\"/>\n
|
129
|
+
\ <xsd:element name=\"Updateable\" type=\"xsd:unsignedInt\"/>\n
|
130
|
+
\ <xsd:element name=\"Visible\" type=\"xsd:unsignedInt\"/>\n
|
131
|
+
\ <xsd:element name=\"Expression\" type=\"xsd:string\"/>\n
|
132
|
+
\ </xsd:choice>\n </xsd:sequence>\n <xsd:attribute
|
133
|
+
name=\"CellOrdinal\" type=\"xsd:unsignedInt\" use=\"required\"/>\n </xsd:complexType>\n
|
134
|
+
\ </xsd:element>\n </xsd:sequence>\n </xsd:complexType>\n
|
135
|
+
\ <xsd:element name=\"root\">\n <xsd:complexType>\n <xsd:sequence
|
136
|
+
maxOccurs=\"unbounded\">\n <xsd:element name=\"OlapInfo\" type=\"OlapInfo\"/>\n
|
137
|
+
\ <xsd:element name=\"Axes\" type=\"Axes\"/>\n <xsd:element
|
138
|
+
name=\"CellData\" type=\"CellData\"/>\n </xsd:sequence>\n </xsd:complexType>\n
|
139
|
+
\ </xsd:element>\n </xsd:schema>\n <OlapInfo>\n <CubeInfo>\n
|
140
|
+
\ <Cube>\n <CubeName>Kvarovi</CubeName>\n </Cube>\n
|
141
|
+
\ </CubeInfo>\n <AxesInfo>\n <AxisInfo name=\"Axis0\">\n
|
142
|
+
\ <HierarchyInfo name=\"Measures\">\n <UName name=\"[Measures].[MEMBER_UNIQUE_NAME]\"/>\n
|
143
|
+
\ <Caption name=\"[Measures].[MEMBER_CAPTION]\"/>\n <LName
|
144
|
+
name=\"[Measures].[LEVEL_UNIQUE_NAME]\"/>\n <LNum name=\"[Measures].[LEVEL_NUMBER]\"/>\n
|
145
|
+
\ <DisplayInfo name=\"[Measures].[DISPLAY_INFO]\"/>\n </HierarchyInfo>\n
|
146
|
+
\ </AxisInfo>\n <AxisInfo name=\"Axis1\">\n <HierarchyInfo
|
147
|
+
name=\"Razlog prijave.Razlog prijave\">\n <UName name=\"[Razlog
|
148
|
+
prijave].[MEMBER_UNIQUE_NAME]\"/>\n <Caption name=\"[Razlog prijave].[MEMBER_CAPTION]\"/>\n
|
149
|
+
\ <LName name=\"[Razlog prijave].[LEVEL_UNIQUE_NAME]\"/>\n <LNum
|
150
|
+
name=\"[Razlog prijave].[LEVEL_NUMBER]\"/>\n <DisplayInfo name=\"[Razlog
|
151
|
+
prijave].[DISPLAY_INFO]\"/>\n </HierarchyInfo>\n </AxisInfo>\n
|
152
|
+
\ <AxisInfo name=\"SlicerAxis\"/>\n </AxesInfo>\n <CellInfo>\n
|
153
|
+
\ <Value name=\"VALUE\"/>\n <FmtValue name=\"FORMATTED_VALUE\"/>\n
|
154
|
+
\ <FormatString name=\"FORMAT_STRING\"/>\n </CellInfo>\n </OlapInfo>\n
|
155
|
+
\ <Axes>\n <Axis name=\"Axis0\">\n <Tuples/>\n </Axis>\n
|
156
|
+
\ <Axis name=\"Axis1\">\n <Tuples/>\n </Axis>\n <Axis
|
157
|
+
name=\"SlicerAxis\">\n <Tuples>\n <Tuple/>\n </Tuples>\n
|
158
|
+
\ </Axis>\n </Axes>\n <CellData/>\n </root>\n </cxmla:return>\n</cxmla:ExecuteResponse>\n</SOAP-ENV:Body>\n</SOAP-ENV:Envelope>\n"
|
159
|
+
http_version: '1.1'
|
data/spec/cube_spec.rb
CHANGED
@@ -51,11 +51,15 @@ describe XMLA::Cube do
|
|
51
51
|
<Format>Multidimensional</Format> <AxisFormat>TupleFormat</AxisFormat> </PropertyList> </Properties>"
|
52
52
|
end
|
53
53
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
54
|
+
def configure_mondrian
|
55
|
+
XMLA.configure do |c|
|
56
|
+
c.endpoint = "http://localhost:8383/mondrian/xmla"
|
57
|
+
c.catalog = "GOSJAR"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
it'should connect to mondrian' do
|
62
|
+
configure_mondrian
|
59
63
|
|
60
64
|
VCR.use_cassette('mondrian_broj_intervencija') do
|
61
65
|
result = XMLA::Cube.execute("SELECT NON EMPTY {Hierarchize({[Measures].[Broj intervencija]})} ON COLUMNS, NON EMPTY {Hierarchize({[Gradska cetvrt].[Gradska cetvrt].Members})} ON ROWS FROM [Kvarovi]")
|
@@ -65,4 +69,35 @@ describe XMLA::Cube do
|
|
65
69
|
end
|
66
70
|
end
|
67
71
|
|
72
|
+
it'should handle the case with only one row in result' do
|
73
|
+
configure_mondrian
|
74
|
+
|
75
|
+
VCR.use_cassette('mondrian_jedan_red_odgovor') do
|
76
|
+
result = XMLA::Cube.execute <<-MDX
|
77
|
+
SELECT NON EMPTY {Hierarchize({[Measures].[Broj intervencija]})} ON COLUMNS,
|
78
|
+
non empty ( { Filter (Hierarchize({[Razlog prijave].children}), [Measures].[Broj intervencija] >= 7000 )}) ON ROWS
|
79
|
+
FROM [Kvarovi]
|
80
|
+
MDX
|
81
|
+
result.size.should == 2
|
82
|
+
result[0].should == "|Broj intervencija"
|
83
|
+
result[1].should == "Ne radi svjetiljka|14442"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
|
88
|
+
it'should handle the case with zero rows in result' do
|
89
|
+
configure_mondrian
|
90
|
+
|
91
|
+
VCR.use_cassette('mondrian_nula_redaka') do
|
92
|
+
result = XMLA::Cube.execute <<-MDX
|
93
|
+
SELECT NON EMPTY {Hierarchize({[Measures].[Broj intervencija]})} ON COLUMNS,
|
94
|
+
non empty ( { Filter (Hierarchize({[Razlog prijave].children}), [Measures].[Broj intervencija] >= 15000 )}) ON ROWS
|
95
|
+
FROM [Kvarovi]
|
96
|
+
MDX
|
97
|
+
result.size.should == 1
|
98
|
+
result[0].should == ""
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
|
68
103
|
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.
|
4
|
+
version: 1.2.0
|
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-
|
12
|
+
date: 2012-02-15 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: savon
|
16
|
-
requirement: &
|
16
|
+
requirement: &70098177763320 !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: *
|
24
|
+
version_requirements: *70098177763320
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: webmock
|
27
|
-
requirement: &
|
27
|
+
requirement: &70098177762780 !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: *
|
35
|
+
version_requirements: *70098177762780
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: guerrilla_patch
|
38
|
-
requirement: &
|
38
|
+
requirement: &70098177762260 !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: *
|
46
|
+
version_requirements: *70098177762260
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: vcr
|
49
|
-
requirement: &
|
49
|
+
requirement: &70098177761620 !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: *
|
57
|
+
version_requirements: *70098177761620
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: rspec
|
60
|
-
requirement: &
|
60
|
+
requirement: &70098177761100 !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: *
|
68
|
+
version_requirements: *70098177761100
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: bundler
|
71
|
-
requirement: &
|
71
|
+
requirement: &70098177760540 !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: *
|
79
|
+
version_requirements: *70098177760540
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: jeweler
|
82
|
-
requirement: &
|
82
|
+
requirement: &70098177759980 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ~>
|
@@ -87,9 +87,9 @@ dependencies:
|
|
87
87
|
version: 1.6.4
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
91
|
-
description: Eases the pain I had to go through to get to the data of
|
92
|
-
provider
|
90
|
+
version_requirements: *70098177759980
|
91
|
+
description: Eases the pain I had to go through to get to the data out of XMLA based
|
92
|
+
OLAP provider
|
93
93
|
email: kresimir.bojcic@gmail.com
|
94
94
|
executables: []
|
95
95
|
extensions: []
|
@@ -114,6 +114,8 @@ files:
|
|
114
114
|
- spec/cassettes/kvartovi_u_recima.yml
|
115
115
|
- spec/cassettes/kvatovi_u_koloni.yml
|
116
116
|
- spec/cassettes/mondrian_broj_intervencija.yml
|
117
|
+
- spec/cassettes/mondrian_jedan_red_odgovor.yml
|
118
|
+
- spec/cassettes/mondrian_nula_redaka.yml
|
117
119
|
- spec/cassettes/razlog_prijave_i_kvart.yml
|
118
120
|
- spec/cube_spec.rb
|
119
121
|
- spec/spec_helper.rb
|
@@ -132,7 +134,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
132
134
|
version: '0'
|
133
135
|
segments:
|
134
136
|
- 0
|
135
|
-
hash:
|
137
|
+
hash: 1940280110315131232
|
136
138
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
137
139
|
none: false
|
138
140
|
requirements:
|