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 +1 -1
- data/cube.gemspec +4 -2
- data/lib/cube/cube.rb +8 -2
- data/spec/cassettes/mondrian_jedan_red_odgovor.yml +1 -1
- data/spec/cassettes/mondrian_scalar_value.yml +166 -0
- data/spec/cassettes/mondrian_vrati_samo_jedan_broj.yml +166 -0
- data/spec/cube_spec.rb +17 -3
- metadata +19 -17
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.2.
|
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.
|
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-
|
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
|
-
(
|
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
|
-
-
|
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.
|
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-
|
12
|
+
date: 2012-02-17 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: savon
|
16
|
-
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: *
|
24
|
+
version_requirements: *70127395026240
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: webmock
|
27
|
-
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: *
|
35
|
+
version_requirements: *70127395025680
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: guerrilla_patch
|
38
|
-
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: *
|
46
|
+
version_requirements: *70127395024960
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: vcr
|
49
|
-
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: *
|
57
|
+
version_requirements: *70127395024440
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: rspec
|
60
|
-
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: *
|
68
|
+
version_requirements: *70127395023920
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: bundler
|
71
|
-
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: *
|
79
|
+
version_requirements: *70127395023320
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: jeweler
|
82
|
-
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: *
|
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:
|
139
|
+
hash: 1611623706615328168
|
138
140
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
139
141
|
none: false
|
140
142
|
requirements:
|