cube 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -8,6 +8,7 @@ source "http://rubygems.org"
8
8
 
9
9
  gem "savon"
10
10
  gem "webmock"
11
+ gem "guerrilla_patch"
11
12
 
12
13
  group :development do
13
14
  gem "vcr"
@@ -8,6 +8,7 @@ GEM
8
8
  crack (0.3.1)
9
9
  diff-lcs (1.1.3)
10
10
  git (1.2.5)
11
+ guerrilla_patch (2.0.0)
11
12
  gyoku (0.4.4)
12
13
  builder (>= 2.1.2)
13
14
  httpi (0.9.5)
@@ -48,6 +49,7 @@ PLATFORMS
48
49
 
49
50
  DEPENDENCIES
50
51
  bundler (~> 1.0.0)
52
+ guerrilla_patch
51
53
  jeweler (~> 1.6.4)
52
54
  rspec (~> 2.3.0)
53
55
  savon
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  Cube
2
2
  ================
3
3
 
4
- Use this gem talk to the OLAP based backend via Xmla SOAP messages.
4
+ Use this gem talk to the OLAP based backend via XMLA SOAP messages from Ruby.
5
5
  You can send (simple) MDX queries and get the result back in a human friendly from.
6
6
 
7
7
  Installation
@@ -17,7 +17,7 @@ Configuration
17
17
  Set up your catalog and endpoint
18
18
 
19
19
  ```
20
- Xmla.configure do |c|
20
+ XMLA.configure do |c|
21
21
  c.endpoint = "http://localhost:8282/icCube/xmla"
22
22
  c.catalog = "GOSJAR"
23
23
  end
@@ -26,14 +26,16 @@ end
26
26
  Usage
27
27
  -------
28
28
  ```
29
- table = Cube.execute("select [Location].[City].children on COLUMNS, [Measures].[Count] on ROWS from [GOSJAR]")
29
+ table = XMLA::Cube.execute "select [Location].[City].children on COLUMNS,
30
+ [Measures].[Count] on ROWS
31
+ from [GOSJAR]"
30
32
  ```
31
33
 
32
34
  Limitations
33
35
  ------------
34
36
  * No drill down (fails to even parse the result)
35
37
  * No multi named columns
36
- * Tested only with icCube, in theory works with every Xmla provider
38
+ * Tested only with icCube and Mondrian XMLA, in theory works with every XMLA provider
37
39
 
38
40
  Contributing to cube
39
41
  -------------------------------
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.0
1
+ 1.1.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "cube"
8
- s.version = "1.0.0"
8
+ s.version = "1.1.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-09"
12
+ s.date = "2012-02-12"
13
13
  s.description = "Eases the pain I had to go through to get to the data of Xmla based OLAP provider"
14
14
  s.email = "kresimir.bojcic@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -30,8 +30,10 @@ Gem::Specification.new do |s|
30
30
  "lib/cube/cube.rb",
31
31
  "lib/cube/xmla.rb",
32
32
  "lib/wsdl/xmla.xml",
33
+ "spec/cassettes/.yml",
33
34
  "spec/cassettes/kvartovi_u_recima.yml",
34
35
  "spec/cassettes/kvatovi_u_koloni.yml",
36
+ "spec/cassettes/mondrian_broj_intervencija.yml",
35
37
  "spec/cassettes/razlog_prijave_i_kvart.yml",
36
38
  "spec/cube_spec.rb",
37
39
  "spec/spec_helper.rb"
@@ -48,6 +50,7 @@ Gem::Specification.new do |s|
48
50
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
49
51
  s.add_runtime_dependency(%q<savon>, [">= 0"])
50
52
  s.add_runtime_dependency(%q<webmock>, [">= 0"])
53
+ s.add_runtime_dependency(%q<guerrilla_patch>, [">= 0"])
51
54
  s.add_development_dependency(%q<vcr>, [">= 0"])
52
55
  s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
53
56
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
@@ -55,6 +58,7 @@ Gem::Specification.new do |s|
55
58
  else
56
59
  s.add_dependency(%q<savon>, [">= 0"])
57
60
  s.add_dependency(%q<webmock>, [">= 0"])
61
+ s.add_dependency(%q<guerrilla_patch>, [">= 0"])
58
62
  s.add_dependency(%q<vcr>, [">= 0"])
59
63
  s.add_dependency(%q<rspec>, ["~> 2.3.0"])
60
64
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
@@ -63,6 +67,7 @@ Gem::Specification.new do |s|
63
67
  else
64
68
  s.add_dependency(%q<savon>, [">= 0"])
65
69
  s.add_dependency(%q<webmock>, [">= 0"])
70
+ s.add_dependency(%q<guerrilla_patch>, [">= 0"])
66
71
  s.add_dependency(%q<vcr>, [">= 0"])
67
72
  s.add_dependency(%q<rspec>, ["~> 2.3.0"])
68
73
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
@@ -1,4 +1,5 @@
1
1
  require 'savon'
2
+ require 'guerrilla_patch'
2
3
 
3
4
  Savon.configure do |config|
4
5
  config.soap_version = 1
@@ -7,11 +8,12 @@ end
7
8
 
8
9
  HTTPI.log = false
9
10
 
10
- module Xmla
11
+ module XMLA
11
12
 
12
13
  class Cube
14
+ attr_reader :query, :catalog
13
15
 
14
- def Cube.execute(query, catalog = Xmla.catalog)
16
+ def Cube.execute(query, catalog = XMLA.catalog)
15
17
  Cube.new(query, catalog).as_table
16
18
  end
17
19
 
@@ -19,10 +21,10 @@ module Xmla
19
21
  clean_table(table, y_size).reduce([]) { |result, row| result << row.flatten.join('|') }
20
22
  end
21
23
 
22
- def x_axe() @x_axe ||= axes[0] end
23
- def y_axe() @y_axe ||= axes[1] end
24
- def y_size() y_axe[0].size end
25
- def x_size() x_axe.size end
24
+ let(:x_axe) { @x_axe ||= axes[0] }
25
+ let(:y_axe) { @y_axe ||= axes[1] }
26
+ let(:y_size) { y_axe[0].size }
27
+ let(:x_size) { x_axe.size }
26
28
 
27
29
  private
28
30
 
@@ -38,24 +40,12 @@ module Xmla
38
40
  def axes
39
41
  axes = @response.to_hash[:execute_response][:return][:root][:axes][:axis].select { |axe| axe[:@name] != "SlicerAxis" }
40
42
  @axes ||= axes.reduce([]) do |result, axe|
41
- y = tuple(axe).reduce([]) { |y, member|
43
+ result << tuple(axe).reduce([]) { |y, member|
42
44
  data = (member[0] == :member) ? member[1] : member[:member]
43
- if data.class == Hash
44
- y << [data[:caption].strip]
45
- elsif data.size == 1
46
- y << data[:caption].strip
47
- else
48
- z = []
49
- data.each do |item_data|
50
- if (item_data.class == Hash)
51
- caption = item_data[:caption].strip
52
- z << caption
53
- end
54
- end
55
- y << z
56
- end
45
+ y << ( data.class == Hash || data.size == 1 ?
46
+ [data[:caption].strip].flatten :
47
+ data.select { |item_data| item_data.class == Hash }.reduce([]) { |z,item_data| z << item_data[:caption].strip } )
57
48
  }
58
- result << y
59
49
  end
60
50
  end
61
51
 
@@ -69,13 +59,12 @@ module Xmla
69
59
  def get_response
70
60
  client = Savon::Client.new do
71
61
  wsdl.document = File.expand_path("../../wsdl/xmla.xml", __FILE__)
72
- wsdl.endpoint = Xmla.endpoint
62
+ wsdl.endpoint = XMLA.endpoint
73
63
  end
74
64
 
75
65
  @response = client.request :execute, xmlns:"urn:schemas-microsoft-com:xml-analysis" do
76
- soap.body = "<Command> <Statement> <![CDATA[ #{@query} ]]> </Statement> </Command> <Properties> <PropertyList> <Catalog>#{@catalog}</Catalog>
77
- <Format>Multidimensional</Format> <AxisFormat>TupleFormat</AxisFormat> </PropertyList> </Properties>"
78
- end
66
+ soap.body = Cube.request_body(query, catalog)
67
+ end
79
68
  end
80
69
 
81
70
  #cleanup table so items don't repeat (if they are same)
@@ -94,7 +83,14 @@ module Xmla
94
83
  @data ||= cell_data.reduce([]) { |data, cell| cell[1].reduce(data) { |data, value| data << value[:value] } }
95
84
  end
96
85
 
97
- def tuple(axe) axe[:tuples][:tuple] end
86
+ let(:tuple) { |axe| axe[:tuples][:tuple] }
87
+
88
+ def Cube.request_body(query, catalog)
89
+ "<Command> <Statement> <![CDATA[ #{query} ]]> </Statement> </Command> <Properties> <PropertyList> <Catalog>#{catalog}</Catalog>
90
+ <Format>Multidimensional</Format> <AxisFormat>TupleFormat</AxisFormat> </PropertyList> </Properties>"
91
+ end
98
92
 
99
93
  end
100
94
  end
95
+
96
+
@@ -1,16 +1,9 @@
1
- module Xmla
2
- def self.configure
3
- yield self if block_given?
4
- end
5
-
6
- def self.endpoint=(value)
7
- @endpoint = value
1
+ module XMLA
2
+ class << self
3
+ attr_accessor :endpoint, :catalog
8
4
  end
9
5
 
10
- def self.catalog=(value)
11
- @catalog = value
6
+ def self.configure
7
+ yield self if block_given?
12
8
  end
13
-
14
- def self.endpoint() @endpoint end
15
- def self.catalog() @catalog end
16
9
  end
@@ -0,0 +1,40 @@
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
+ \ ]]> </Statement> </Command> <Properties> <PropertyList> <Catalog></Catalog>\n
11
+ \ <Format>Multidimensional</Format> <AxisFormat>TupleFormat</AxisFormat>
12
+ </PropertyList> </Properties></Execute></env:Body></env:Envelope>"
13
+ headers:
14
+ soapaction:
15
+ - ! '"urn:schemas-microsoft-com:xml-analysis:Execute"'
16
+ content-type:
17
+ - text/xml;charset=UTF-8
18
+ content-length:
19
+ - '612'
20
+ response: !ruby/struct:VCR::Response
21
+ status: !ruby/struct:VCR::ResponseStatus
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ server:
26
+ - Apache-Coyote/1.1
27
+ content-type:
28
+ - text/xml
29
+ transfer-encoding:
30
+ - chunked
31
+ date:
32
+ - Sat, 11 Feb 2012 23:02:52 GMT
33
+ body: ! "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"
34
+ SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" >\n<SOAP-ENV:Header>\n</SOAP-ENV:Header>\n<SOAP-ENV:Body>\n<SOAP-ENV:Fault>\n
35
+ \ <faultcode>SOAP-ENV:Server.00HSBB01</faultcode>\n <faultstring>XMLA SOAP
36
+ Body processing error</faultstring>\n <faultactor>Mondrian</faultactor>\n <detail>\n
37
+ \ <XA:error xmlns:XA=\"http://mondrian.sourceforge.net\">\n <code>00HSBB01</code>\n
38
+ \ <desc>The Mondrian XML: Mondrian Error:Internal error: Unknown catalog
39
+ &#39;&#39;</desc>\n </XA:error>\n </detail>\n</SOAP-ENV:Fault>\n</SOAP-ENV:Body>\n</SOAP-ENV:Envelope>\n"
40
+ http_version: '1.1'
@@ -0,0 +1,269 @@
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 COLUMNS,
11
+ NON EMPTY {Hierarchize({[Gradska cetvrt].[Gradska cetvrt].Members})} ON ROWS
12
+ FROM [Kvarovi] ]]> </Statement> </Command> <Properties> <PropertyList> <Catalog>GOSJAR</Catalog>\n
13
+ \ <Format>Multidimensional</Format> <AxisFormat>TupleFormat</AxisFormat>
14
+ </PropertyList> </Properties></Execute></env:Body></env:Envelope>"
15
+ headers:
16
+ soapaction:
17
+ - ! '"urn:schemas-microsoft-com:xml-analysis:Execute"'
18
+ content-type:
19
+ - text/xml;charset=UTF-8
20
+ content-length:
21
+ - '786'
22
+ response: !ruby/struct:VCR::Response
23
+ status: !ruby/struct:VCR::ResponseStatus
24
+ code: 200
25
+ message: OK
26
+ headers:
27
+ server:
28
+ - Apache-Coyote/1.1
29
+ content-type:
30
+ - text/xml;charset=UTF-8
31
+ transfer-encoding:
32
+ - chunked
33
+ date:
34
+ - Sun, 12 Feb 2012 14:58:54 GMT
35
+ body: ! "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"
36
+ SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" >\n<SOAP-ENV:Header>\n</SOAP-ENV:Header>\n<SOAP-ENV:Body>\n<cxmla:ExecuteResponse
37
+ xmlns:cxmla=\"urn:schemas-microsoft-com:xml-analysis\">\n <cxmla:return>\n
38
+ \ <root xmlns=\"urn:schemas-microsoft-com:xml-analysis:mddataset\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
39
+ xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:EX=\"urn:schemas-microsoft-com:xml-analysis:exception\">\n
40
+ \ <xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" targetNamespace=\"urn:schemas-microsoft-com:xml-analysis:mddataset\"
41
+ xmlns=\"urn:schemas-microsoft-com:xml-analysis:mddataset\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
42
+ xmlns:sql=\"urn:schemas-microsoft-com:xml-sql\" elementFormDefault=\"qualified\">\n
43
+ \ <xsd:complexType name=\"MemberType\">\n <xsd:sequence>\n <xsd:element
44
+ name=\"UName\" type=\"xsd:string\"/>\n <xsd:element name=\"Caption\"
45
+ type=\"xsd:string\"/>\n <xsd:element name=\"LName\" type=\"xsd:string\"/>\n
46
+ \ <xsd:element name=\"LNum\" type=\"xsd:unsignedInt\"/>\n <xsd:element
47
+ name=\"DisplayInfo\" type=\"xsd:unsignedInt\"/>\n <xsd:sequence maxOccurs=\"unbounded\"
48
+ minOccurs=\"0\">\n <xsd:any processContents=\"lax\" maxOccurs=\"unbounded\"/>\n
49
+ \ </xsd:sequence>\n </xsd:sequence>\n <xsd:attribute
50
+ name=\"Hierarchy\" type=\"xsd:string\"/>\n </xsd:complexType>\n <xsd:complexType
51
+ name=\"PropType\">\n <xsd:attribute name=\"name\" type=\"xsd:string\"/>\n
52
+ \ </xsd:complexType>\n <xsd:complexType name=\"TupleType\">\n <xsd:sequence
53
+ maxOccurs=\"unbounded\">\n <xsd:element name=\"Member\" type=\"MemberType\"/>\n
54
+ \ </xsd:sequence>\n </xsd:complexType>\n <xsd:complexType
55
+ name=\"MembersType\">\n <xsd:sequence maxOccurs=\"unbounded\">\n <xsd:element
56
+ name=\"Member\" type=\"MemberType\"/>\n </xsd:sequence>\n <xsd:attribute
57
+ name=\"Hierarchy\" type=\"xsd:string\"/>\n </xsd:complexType>\n <xsd:complexType
58
+ name=\"TuplesType\">\n <xsd:sequence maxOccurs=\"unbounded\">\n <xsd:element
59
+ name=\"Tuple\" type=\"TupleType\"/>\n </xsd:sequence>\n </xsd:complexType>\n
60
+ \ <xsd:complexType name=\"CrossProductType\">\n <xsd:sequence>\n
61
+ \ <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n <xsd:element
62
+ name=\"Members\" type=\"MembersType\"/>\n <xsd:element name=\"Tuples\"
63
+ type=\"TuplesType\"/>\n </xsd:choice>\n </xsd:sequence>\n
64
+ \ <xsd:attribute name=\"Size\" type=\"xsd:unsignedInt\"/>\n </xsd:complexType>\n
65
+ \ <xsd:complexType name=\"OlapInfo\">\n <xsd:sequence>\n <xsd:element
66
+ name=\"CubeInfo\">\n <xsd:complexType>\n <xsd:sequence>\n
67
+ \ <xsd:element name=\"Cube\" maxOccurs=\"unbounded\">\n <xsd:complexType>\n
68
+ \ <xsd:sequence>\n <xsd:element name=\"CubeName\"
69
+ type=\"xsd:string\"/>\n </xsd:sequence>\n </xsd:complexType>\n
70
+ \ </xsd:element>\n </xsd:sequence>\n </xsd:complexType>\n
71
+ \ </xsd:element>\n <xsd:element name=\"AxesInfo\">\n <xsd:complexType>\n
72
+ \ <xsd:sequence>\n <xsd:element name=\"AxisInfo\"
73
+ maxOccurs=\"unbounded\">\n <xsd:complexType>\n <xsd:sequence>\n
74
+ \ <xsd:element name=\"HierarchyInfo\" minOccurs=\"0\"
75
+ maxOccurs=\"unbounded\">\n <xsd:complexType>\n <xsd:sequence>\n
76
+ \ <xsd:sequence maxOccurs=\"unbounded\">\n <xsd:element
77
+ name=\"UName\" type=\"PropType\"/>\n <xsd:element
78
+ name=\"Caption\" type=\"PropType\"/>\n <xsd:element
79
+ name=\"LName\" type=\"PropType\"/>\n <xsd:element
80
+ name=\"LNum\" type=\"PropType\"/>\n <xsd:element
81
+ name=\"DisplayInfo\" type=\"PropType\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n
82
+ \ </xsd:sequence>\n <xsd:sequence>\n
83
+ \ <xsd:any processContents=\"lax\" minOccurs=\"0\"
84
+ maxOccurs=\"unbounded\"/>\n </xsd:sequence>\n </xsd:sequence>\n
85
+ \ <xsd:attribute name=\"name\" type=\"xsd:string\"
86
+ use=\"required\"/>\n </xsd:complexType>\n </xsd:element>\n
87
+ \ </xsd:sequence>\n <xsd:attribute
88
+ name=\"name\" type=\"xsd:string\"/>\n </xsd:complexType>\n
89
+ \ </xsd:element>\n </xsd:sequence>\n </xsd:complexType>\n
90
+ \ </xsd:element>\n <xsd:element name=\"CellInfo\">\n <xsd:complexType>\n
91
+ \ <xsd:sequence>\n <xsd:sequence minOccurs=\"0\"
92
+ maxOccurs=\"unbounded\">\n <xsd:choice>\n <xsd:element
93
+ name=\"Value\" type=\"PropType\"/>\n <xsd:element name=\"FmtValue\"
94
+ type=\"PropType\"/>\n <xsd:element name=\"BackColor\" type=\"PropType\"/>\n
95
+ \ <xsd:element name=\"ForeColor\" type=\"PropType\"/>\n
96
+ \ <xsd:element name=\"FontName\" type=\"PropType\"/>\n <xsd:element
97
+ name=\"FontSize\" type=\"PropType\"/>\n <xsd:element name=\"FontFlags\"
98
+ type=\"PropType\"/>\n <xsd:element name=\"FormatString\"
99
+ type=\"PropType\"/>\n <xsd:element name=\"NonEmptyBehavior\"
100
+ type=\"PropType\"/>\n <xsd:element name=\"SolveOrder\"
101
+ type=\"PropType\"/>\n <xsd:element name=\"Updateable\"
102
+ type=\"PropType\"/>\n <xsd:element name=\"Visible\" type=\"PropType\"/>\n
103
+ \ <xsd:element name=\"Expression\" type=\"PropType\"/>\n
104
+ \ </xsd:choice>\n </xsd:sequence>\n <xsd:sequence
105
+ maxOccurs=\"unbounded\" minOccurs=\"0\">\n <xsd:any processContents=\"lax\"
106
+ maxOccurs=\"unbounded\"/>\n </xsd:sequence>\n </xsd:sequence>\n
107
+ \ </xsd:complexType>\n </xsd:element>\n </xsd:sequence>\n
108
+ \ </xsd:complexType>\n <xsd:complexType name=\"Axes\">\n <xsd:sequence
109
+ maxOccurs=\"unbounded\">\n <xsd:element name=\"Axis\">\n <xsd:complexType>\n
110
+ \ <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n <xsd:element
111
+ name=\"CrossProduct\" type=\"CrossProductType\"/>\n <xsd:element
112
+ name=\"Tuples\" type=\"TuplesType\"/>\n <xsd:element name=\"Members\"
113
+ type=\"MembersType\"/>\n </xsd:choice>\n <xsd:attribute
114
+ name=\"name\" type=\"xsd:string\"/>\n </xsd:complexType>\n </xsd:element>\n
115
+ \ </xsd:sequence>\n </xsd:complexType>\n <xsd:complexType
116
+ name=\"CellData\">\n <xsd:sequence>\n <xsd:element name=\"Cell\"
117
+ minOccurs=\"0\" maxOccurs=\"unbounded\">\n <xsd:complexType>\n
118
+ \ <xsd:sequence maxOccurs=\"unbounded\">\n <xsd:choice>\n
119
+ \ <xsd:element name=\"Value\"/>\n <xsd:element
120
+ name=\"FmtValue\" type=\"xsd:string\"/>\n <xsd:element name=\"BackColor\"
121
+ type=\"xsd:unsignedInt\"/>\n <xsd:element name=\"ForeColor\"
122
+ type=\"xsd:unsignedInt\"/>\n <xsd:element name=\"FontName\"
123
+ type=\"xsd:string\"/>\n <xsd:element name=\"FontSize\" type=\"xsd:unsignedShort\"/>\n
124
+ \ <xsd:element name=\"FontFlags\" type=\"xsd:unsignedInt\"/>\n
125
+ \ <xsd:element name=\"FormatString\" type=\"xsd:string\"/>\n
126
+ \ <xsd:element name=\"NonEmptyBehavior\" type=\"xsd:unsignedShort\"/>\n
127
+ \ <xsd:element name=\"SolveOrder\" type=\"xsd:unsignedInt\"/>\n
128
+ \ <xsd:element name=\"Updateable\" type=\"xsd:unsignedInt\"/>\n
129
+ \ <xsd:element name=\"Visible\" type=\"xsd:unsignedInt\"/>\n
130
+ \ <xsd:element name=\"Expression\" type=\"xsd:string\"/>\n
131
+ \ </xsd:choice>\n </xsd:sequence>\n <xsd:attribute
132
+ name=\"CellOrdinal\" type=\"xsd:unsignedInt\" use=\"required\"/>\n </xsd:complexType>\n
133
+ \ </xsd:element>\n </xsd:sequence>\n </xsd:complexType>\n
134
+ \ <xsd:element name=\"root\">\n <xsd:complexType>\n <xsd:sequence
135
+ maxOccurs=\"unbounded\">\n <xsd:element name=\"OlapInfo\" type=\"OlapInfo\"/>\n
136
+ \ <xsd:element name=\"Axes\" type=\"Axes\"/>\n <xsd:element
137
+ name=\"CellData\" type=\"CellData\"/>\n </xsd:sequence>\n </xsd:complexType>\n
138
+ \ </xsd:element>\n </xsd:schema>\n <OlapInfo>\n <CubeInfo>\n
139
+ \ <Cube>\n <CubeName>Kvarovi</CubeName>\n </Cube>\n
140
+ \ </CubeInfo>\n <AxesInfo>\n <AxisInfo name=\"Axis0\">\n
141
+ \ <HierarchyInfo name=\"Measures\">\n <UName name=\"[Measures].[MEMBER_UNIQUE_NAME]\"/>\n
142
+ \ <Caption name=\"[Measures].[MEMBER_CAPTION]\"/>\n <LName
143
+ name=\"[Measures].[LEVEL_UNIQUE_NAME]\"/>\n <LNum name=\"[Measures].[LEVEL_NUMBER]\"/>\n
144
+ \ <DisplayInfo name=\"[Measures].[DISPLAY_INFO]\"/>\n </HierarchyInfo>\n
145
+ \ </AxisInfo>\n <AxisInfo name=\"Axis1\">\n <HierarchyInfo
146
+ name=\"Gradska cetvrt.Gradska cetvrt\">\n <UName name=\"[Gradska
147
+ cetvrt].[MEMBER_UNIQUE_NAME]\"/>\n <Caption name=\"[Gradska cetvrt].[MEMBER_CAPTION]\"/>\n
148
+ \ <LName name=\"[Gradska cetvrt].[LEVEL_UNIQUE_NAME]\"/>\n <LNum
149
+ name=\"[Gradska cetvrt].[LEVEL_NUMBER]\"/>\n <DisplayInfo name=\"[Gradska
150
+ cetvrt].[DISPLAY_INFO]\"/>\n </HierarchyInfo>\n </AxisInfo>\n
151
+ \ <AxisInfo name=\"SlicerAxis\"/>\n </AxesInfo>\n <CellInfo>\n
152
+ \ <Value name=\"VALUE\"/>\n <FmtValue name=\"FORMATTED_VALUE\"/>\n
153
+ \ <FormatString name=\"FORMAT_STRING\"/>\n </CellInfo>\n </OlapInfo>\n
154
+ \ <Axes>\n <Axis name=\"Axis0\">\n <Tuples>\n <Tuple>\n
155
+ \ <Member Hierarchy=\"Measures\">\n <UName>[Measures].[Broj
156
+ intervencija]</UName>\n <Caption>Broj intervencija</Caption>\n
157
+ \ <LName>[Measures].[MeasuresLevel]</LName>\n <LNum>0</LNum>\n
158
+ \ <DisplayInfo>0</DisplayInfo>\n </Member>\n </Tuple>\n
159
+ \ </Tuples>\n </Axis>\n <Axis name=\"Axis1\">\n <Tuples>\n
160
+ \ <Tuple>\n <Member Hierarchy=\"Gradska cetvrt.Gradska
161
+ cetvrt\">\n <UName>[Gradska cetvrt].[DONJI GRAD]</UName>\n <Caption>DONJI
162
+ GRAD</Caption>\n <LName>[Gradska cetvrt].[Gradska cetvrt]</LName>\n
163
+ \ <LNum>1</LNum>\n <DisplayInfo>0</DisplayInfo>\n
164
+ \ </Member>\n </Tuple>\n <Tuple>\n <Member
165
+ Hierarchy=\"Gradska cetvrt.Gradska cetvrt\">\n <UName>[Gradska
166
+ cetvrt].[GORNJI GRAD – MEDVEŠČAK]</UName>\n <Caption>GORNJI GRAD
167
+ – MEDVEŠČAK</Caption>\n <LName>[Gradska cetvrt].[Gradska cetvrt]</LName>\n
168
+ \ <LNum>1</LNum>\n <DisplayInfo>131072</DisplayInfo>\n
169
+ \ </Member>\n </Tuple>\n <Tuple>\n <Member
170
+ Hierarchy=\"Gradska cetvrt.Gradska cetvrt\">\n <UName>[Gradska
171
+ cetvrt].[TRNJE]</UName>\n <Caption>TRNJE</Caption>\n <LName>[Gradska
172
+ cetvrt].[Gradska cetvrt]</LName>\n <LNum>1</LNum>\n <DisplayInfo>131072</DisplayInfo>\n
173
+ \ </Member>\n </Tuple>\n <Tuple>\n <Member
174
+ Hierarchy=\"Gradska cetvrt.Gradska cetvrt\">\n <UName>[Gradska
175
+ cetvrt].[MAKSIMIR]</UName>\n <Caption>MAKSIMIR</Caption>\n <LName>[Gradska
176
+ cetvrt].[Gradska cetvrt]</LName>\n <LNum>1</LNum>\n <DisplayInfo>131072</DisplayInfo>\n
177
+ \ </Member>\n </Tuple>\n <Tuple>\n <Member
178
+ Hierarchy=\"Gradska cetvrt.Gradska cetvrt\">\n <UName>[Gradska
179
+ cetvrt].[PEŠČENICA - ŽITNJAK]</UName>\n <Caption>PEŠČENICA -
180
+ ŽITNJAK</Caption>\n <LName>[Gradska cetvrt].[Gradska cetvrt]</LName>\n
181
+ \ <LNum>1</LNum>\n <DisplayInfo>131072</DisplayInfo>\n
182
+ \ </Member>\n </Tuple>\n <Tuple>\n <Member
183
+ Hierarchy=\"Gradska cetvrt.Gradska cetvrt\">\n <UName>[Gradska
184
+ cetvrt].[NOVI ZAGREB – ISTOK]</UName>\n <Caption>NOVI ZAGREB
185
+ – ISTOK</Caption>\n <LName>[Gradska cetvrt].[Gradska cetvrt]</LName>\n
186
+ \ <LNum>1</LNum>\n <DisplayInfo>131072</DisplayInfo>\n
187
+ \ </Member>\n </Tuple>\n <Tuple>\n <Member
188
+ Hierarchy=\"Gradska cetvrt.Gradska cetvrt\">\n <UName>[Gradska
189
+ cetvrt].[NOVI ZAGREB – ZAPAD]</UName>\n <Caption>NOVI ZAGREB
190
+ – ZAPAD</Caption>\n <LName>[Gradska cetvrt].[Gradska cetvrt]</LName>\n
191
+ \ <LNum>1</LNum>\n <DisplayInfo>131072</DisplayInfo>\n
192
+ \ </Member>\n </Tuple>\n <Tuple>\n <Member
193
+ Hierarchy=\"Gradska cetvrt.Gradska cetvrt\">\n <UName>[Gradska
194
+ cetvrt].[TREŠNJEVKA – SJEVER]</UName>\n <Caption>TREŠNJEVKA –
195
+ SJEVER</Caption>\n <LName>[Gradska cetvrt].[Gradska cetvrt]</LName>\n
196
+ \ <LNum>1</LNum>\n <DisplayInfo>131072</DisplayInfo>\n
197
+ \ </Member>\n </Tuple>\n <Tuple>\n <Member
198
+ Hierarchy=\"Gradska cetvrt.Gradska cetvrt\">\n <UName>[Gradska
199
+ cetvrt].[TREŠNJEVKA – JUG]</UName>\n <Caption>TREŠNJEVKA – JUG</Caption>\n
200
+ \ <LName>[Gradska cetvrt].[Gradska cetvrt]</LName>\n <LNum>1</LNum>\n
201
+ \ <DisplayInfo>131072</DisplayInfo>\n </Member>\n
202
+ \ </Tuple>\n <Tuple>\n <Member Hierarchy=\"Gradska
203
+ cetvrt.Gradska cetvrt\">\n <UName>[Gradska cetvrt].[ČRNOMEREC]</UName>\n
204
+ \ <Caption>ČRNOMEREC</Caption>\n <LName>[Gradska
205
+ cetvrt].[Gradska cetvrt]</LName>\n <LNum>1</LNum>\n <DisplayInfo>131072</DisplayInfo>\n
206
+ \ </Member>\n </Tuple>\n <Tuple>\n <Member
207
+ Hierarchy=\"Gradska cetvrt.Gradska cetvrt\">\n <UName>[Gradska
208
+ cetvrt].[GORNJA DUBRAVA]</UName>\n <Caption>GORNJA DUBRAVA</Caption>\n
209
+ \ <LName>[Gradska cetvrt].[Gradska cetvrt]</LName>\n <LNum>1</LNum>\n
210
+ \ <DisplayInfo>131072</DisplayInfo>\n </Member>\n
211
+ \ </Tuple>\n <Tuple>\n <Member Hierarchy=\"Gradska
212
+ cetvrt.Gradska cetvrt\">\n <UName>[Gradska cetvrt].[DONJA DUBRAVA]</UName>\n
213
+ \ <Caption>DONJA DUBRAVA</Caption>\n <LName>[Gradska
214
+ cetvrt].[Gradska cetvrt]</LName>\n <LNum>1</LNum>\n <DisplayInfo>131072</DisplayInfo>\n
215
+ \ </Member>\n </Tuple>\n <Tuple>\n <Member
216
+ Hierarchy=\"Gradska cetvrt.Gradska cetvrt\">\n <UName>[Gradska
217
+ cetvrt].[STENJEVEC]</UName>\n <Caption>STENJEVEC</Caption>\n
218
+ \ <LName>[Gradska cetvrt].[Gradska cetvrt]</LName>\n <LNum>1</LNum>\n
219
+ \ <DisplayInfo>131072</DisplayInfo>\n </Member>\n
220
+ \ </Tuple>\n <Tuple>\n <Member Hierarchy=\"Gradska
221
+ cetvrt.Gradska cetvrt\">\n <UName>[Gradska cetvrt].[PODSUSED
222
+ – VRAPČE]</UName>\n <Caption>PODSUSED – VRAPČE</Caption>\n <LName>[Gradska
223
+ cetvrt].[Gradska cetvrt]</LName>\n <LNum>1</LNum>\n <DisplayInfo>131072</DisplayInfo>\n
224
+ \ </Member>\n </Tuple>\n <Tuple>\n <Member
225
+ Hierarchy=\"Gradska cetvrt.Gradska cetvrt\">\n <UName>[Gradska
226
+ cetvrt].[PODSLJEME ]</UName>\n <Caption>PODSLJEME </Caption>\n
227
+ \ <LName>[Gradska cetvrt].[Gradska cetvrt]</LName>\n <LNum>1</LNum>\n
228
+ \ <DisplayInfo>131072</DisplayInfo>\n </Member>\n
229
+ \ </Tuple>\n <Tuple>\n <Member Hierarchy=\"Gradska
230
+ cetvrt.Gradska cetvrt\">\n <UName>[Gradska cetvrt].[SESVETE]</UName>\n
231
+ \ <Caption>SESVETE</Caption>\n <LName>[Gradska
232
+ cetvrt].[Gradska cetvrt]</LName>\n <LNum>1</LNum>\n <DisplayInfo>131072</DisplayInfo>\n
233
+ \ </Member>\n </Tuple>\n </Tuples>\n </Axis>\n
234
+ \ <Axis name=\"SlicerAxis\">\n <Tuples>\n <Tuple/>\n
235
+ \ </Tuples>\n </Axis>\n </Axes>\n <CellData>\n <Cell
236
+ CellOrdinal=\"0\">\n <Value xsi:type=\"xsd:int\">1422</Value>\n <FmtValue>1,422</FmtValue>\n
237
+ \ <FormatString/>\n </Cell>\n <Cell CellOrdinal=\"1\">\n
238
+ \ <Value xsi:type=\"xsd:int\">2259</Value>\n <FmtValue>2,259</FmtValue>\n
239
+ \ <FormatString/>\n </Cell>\n <Cell CellOrdinal=\"2\">\n
240
+ \ <Value xsi:type=\"xsd:int\">2148</Value>\n <FmtValue>2,148</FmtValue>\n
241
+ \ <FormatString/>\n </Cell>\n <Cell CellOrdinal=\"3\">\n
242
+ \ <Value xsi:type=\"xsd:int\">2733</Value>\n <FmtValue>2,733</FmtValue>\n
243
+ \ <FormatString/>\n </Cell>\n <Cell CellOrdinal=\"4\">\n
244
+ \ <Value xsi:type=\"xsd:int\">2004</Value>\n <FmtValue>2,004</FmtValue>\n
245
+ \ <FormatString/>\n </Cell>\n <Cell CellOrdinal=\"5\">\n
246
+ \ <Value xsi:type=\"xsd:int\">2607</Value>\n <FmtValue>2,607</FmtValue>\n
247
+ \ <FormatString/>\n </Cell>\n <Cell CellOrdinal=\"6\">\n
248
+ \ <Value xsi:type=\"xsd:int\">2829</Value>\n <FmtValue>2,829</FmtValue>\n
249
+ \ <FormatString/>\n </Cell>\n <Cell CellOrdinal=\"7\">\n
250
+ \ <Value xsi:type=\"xsd:int\">1611</Value>\n <FmtValue>1,611</FmtValue>\n
251
+ \ <FormatString/>\n </Cell>\n <Cell CellOrdinal=\"8\">\n
252
+ \ <Value xsi:type=\"xsd:int\">2581</Value>\n <FmtValue>2,581</FmtValue>\n
253
+ \ <FormatString/>\n </Cell>\n <Cell CellOrdinal=\"9\">\n
254
+ \ <Value xsi:type=\"xsd:int\">1945</Value>\n <FmtValue>1,945</FmtValue>\n
255
+ \ <FormatString/>\n </Cell>\n <Cell CellOrdinal=\"10\">\n
256
+ \ <Value xsi:type=\"xsd:int\">3602</Value>\n <FmtValue>3,602</FmtValue>\n
257
+ \ <FormatString/>\n </Cell>\n <Cell CellOrdinal=\"11\">\n
258
+ \ <Value xsi:type=\"xsd:int\">1356</Value>\n <FmtValue>1,356</FmtValue>\n
259
+ \ <FormatString/>\n </Cell>\n <Cell CellOrdinal=\"12\">\n
260
+ \ <Value xsi:type=\"xsd:int\">1696</Value>\n <FmtValue>1,696</FmtValue>\n
261
+ \ <FormatString/>\n </Cell>\n <Cell CellOrdinal=\"13\">\n
262
+ \ <Value xsi:type=\"xsd:int\">2327</Value>\n <FmtValue>2,327</FmtValue>\n
263
+ \ <FormatString/>\n </Cell>\n <Cell CellOrdinal=\"14\">\n
264
+ \ <Value xsi:type=\"xsd:int\">1228</Value>\n <FmtValue>1,228</FmtValue>\n
265
+ \ <FormatString/>\n </Cell>\n <Cell CellOrdinal=\"15\">\n
266
+ \ <Value xsi:type=\"xsd:int\">3186</Value>\n <FmtValue>3,186</FmtValue>\n
267
+ \ <FormatString/>\n </Cell>\n </CellData>\n </root>\n
268
+ \ </cxmla:return>\n</cxmla:ExecuteResponse>\n</SOAP-ENV:Body>\n</SOAP-ENV:Envelope>\n"
269
+ http_version: '1.1'
@@ -1,48 +1,68 @@
1
+ #encoding: utf-8
1
2
  require 'cube'
2
3
  require 'webmock'
3
4
  require 'vcr'
5
+ require 'guerrilla_patch'
4
6
 
5
7
  VCR.config do |c|
6
8
  c.cassette_library_dir = 'spec/cassettes'
7
9
  c.stub_with :webmock
8
10
  end
9
11
 
10
- Xmla.configure do |c|
12
+ XMLA.configure do |c|
11
13
  c.endpoint = "http://localhost:8282/icCube/xmla"
12
14
  c.catalog = "GOSJAR"
13
15
  end
14
16
 
15
- module Xmla
16
17
 
17
- describe Cube do
18
- it 'supports multiple items on x axis' do
19
- VCR.use_cassette('kvatovi_u_koloni') do
20
- result = Cube.execute("select [Lokacija].[Kvart].children on COLUMNS, [Measures].[Broj] on ROWS from [GOSJAR]")
21
- result.size.should == 2
22
- result[0].split('|').size.should == 18
23
- result[1].should == "Broj|1422|2259|2148|2733|2004|2607|2829|1611|2581|1945|3602|1356|1696|2327|1228|3186|"
24
- end
25
- end
18
+ describe XMLA::Cube do
19
+ it 'supports multiple items on x axis' do
20
+ VCR.use_cassette('kvatovi_u_koloni') do
21
+ result = XMLA::Cube.execute("select [Lokacija].[Kvart].children on COLUMNS, [Measures].[Broj] on ROWS from [GOSJAR]")
22
+ result.size.should == 2
23
+ result[0].split('|').size.should == 18
24
+ result[1].should == "Broj|1422|2259|2148|2733|2004|2607|2829|1611|2581|1945|3602|1356|1696|2327|1228|3186|"
25
+ end
26
+ end
26
27
 
27
- it 'supports multiple items on y axis' do
28
- VCR.use_cassette('kvartovi_u_recima') do
29
- result = Cube.execute("select [Measures].[Broj] on COLUMNS, non empty topcount( [Lokacija].[Kvart].children, 100, [Measures].[Broj]) on ROWS from [GOSJAR]")
30
- result.size.should == 17
31
- result[0].should == '|Broj'
32
- result[6].should == 'TRESNJEVKA - JUG|2607'
33
- result[16].should == 'PODSLJEME|1228'
34
- end
28
+ it 'supports multiple items on y axis' do
29
+ VCR.use_cassette('kvartovi_u_recima') do
30
+ result = XMLA::Cube.execute("select [Measures].[Broj] on COLUMNS, non empty topcount( [Lokacija].[Kvart].children, 100, [Measures].[Broj]) on ROWS from [GOSJAR]")
31
+ result.size.should == 17
32
+ result[0].should == '|Broj'
33
+ result[6].should == 'TRESNJEVKA - JUG|2607'
34
+ result[16].should == 'PODSLJEME|1228'
35
35
  end
36
+ end
36
37
 
37
- it 'support multiple items on y axis and multiple items on x axis' do
38
- VCR.use_cassette('razlog_prijave_i_kvart') do
39
- result = Cube.execute("select [Measures].[Broj] on COLUMNS, non empty topcount ( [Razlog prijave].[Razlog].children * [Lokacija].[Kvart].children , 20, [Measures].[Broj] ) on ROWS from [GOSJAR]")
40
- result.size.should == 21
41
- result[0].should == "||Broj"
42
- result[2].should == "|GORNJA DUBRAVA|1383"
43
- result[20].should == "Redovna izmjena|GORNJA DUBRAVA|575"
44
- end
38
+ it 'support multiple items on y axis and multiple items on x axis' do
39
+ VCR.use_cassette('razlog_prijave_i_kvart') do
40
+ result = XMLA::Cube.execute("select [Measures].[Broj] on COLUMNS, non empty topcount ( [Razlog prijave].[Razlog].children * [Lokacija].[Kvart].children , 20, [Measures].[Broj] ) on ROWS from [GOSJAR]")
41
+ result.size.should == 21
42
+ result[0].should == "||Broj"
43
+ result[2].should == "|GORNJA DUBRAVA|1383"
44
+ result[20].should == "Redovna izmjena|GORNJA DUBRAVA|575"
45
45
  end
46
+ end
46
47
 
48
+ it 'check if request is correct - to fix that bug with class varables not beign visible inside the block' do
49
+ XMLA::Cube.send(:request_body, "SELECT", "GOSJAR").should ==
50
+ "<Command> <Statement> <![CDATA[ SELECT ]]> </Statement> </Command> <Properties> <PropertyList> <Catalog>GOSJAR</Catalog>
51
+ <Format>Multidimensional</Format> <AxisFormat>TupleFormat</AxisFormat> </PropertyList> </Properties>"
47
52
  end
53
+
54
+ it 'should connect to mondrian' do
55
+ XMLA.configure do |c|
56
+ c.endpoint = "http://localhost:8383/mondrian/xmla"
57
+ c.catalog = "GOSJAR"
58
+ end
59
+
60
+ VCR.use_cassette('mondrian_broj_intervencija') do
61
+ 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]")
62
+ result.size.should == 17
63
+ result[0].should == "|Broj intervencija"
64
+ result[2].should == "GORNJI GRAD – MEDVEŠČAK|2259"
65
+ end
66
+ end
67
+
48
68
  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.0.0
4
+ version: 1.1.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-09 00:00:00.000000000Z
12
+ date: 2012-02-12 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: savon
16
- requirement: &70148046904980 !ruby/object:Gem::Requirement
16
+ requirement: &70118415011960 !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: *70148046904980
24
+ version_requirements: *70118415011960
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: webmock
27
- requirement: &70148046900860 !ruby/object:Gem::Requirement
27
+ requirement: &70118415011460 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,21 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70148046900860
35
+ version_requirements: *70118415011460
36
+ - !ruby/object:Gem::Dependency
37
+ name: guerrilla_patch
38
+ requirement: &70118415010940 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *70118415010940
36
47
  - !ruby/object:Gem::Dependency
37
48
  name: vcr
38
- requirement: &70148046900320 !ruby/object:Gem::Requirement
49
+ requirement: &70118415010460 !ruby/object:Gem::Requirement
39
50
  none: false
40
51
  requirements:
41
52
  - - ! '>='
@@ -43,10 +54,10 @@ dependencies:
43
54
  version: '0'
44
55
  type: :development
45
56
  prerelease: false
46
- version_requirements: *70148046900320
57
+ version_requirements: *70118415010460
47
58
  - !ruby/object:Gem::Dependency
48
59
  name: rspec
49
- requirement: &70148046899660 !ruby/object:Gem::Requirement
60
+ requirement: &70118415009940 !ruby/object:Gem::Requirement
50
61
  none: false
51
62
  requirements:
52
63
  - - ~>
@@ -54,10 +65,10 @@ dependencies:
54
65
  version: 2.3.0
55
66
  type: :development
56
67
  prerelease: false
57
- version_requirements: *70148046899660
68
+ version_requirements: *70118415009940
58
69
  - !ruby/object:Gem::Dependency
59
70
  name: bundler
60
- requirement: &70148046898880 !ruby/object:Gem::Requirement
71
+ requirement: &70118415009440 !ruby/object:Gem::Requirement
61
72
  none: false
62
73
  requirements:
63
74
  - - ~>
@@ -65,10 +76,10 @@ dependencies:
65
76
  version: 1.0.0
66
77
  type: :development
67
78
  prerelease: false
68
- version_requirements: *70148046898880
79
+ version_requirements: *70118415009440
69
80
  - !ruby/object:Gem::Dependency
70
81
  name: jeweler
71
- requirement: &70148046898340 !ruby/object:Gem::Requirement
82
+ requirement: &70118415008940 !ruby/object:Gem::Requirement
72
83
  none: false
73
84
  requirements:
74
85
  - - ~>
@@ -76,7 +87,7 @@ dependencies:
76
87
  version: 1.6.4
77
88
  type: :development
78
89
  prerelease: false
79
- version_requirements: *70148046898340
90
+ version_requirements: *70118415008940
80
91
  description: Eases the pain I had to go through to get to the data of Xmla based OLAP
81
92
  provider
82
93
  email: kresimir.bojcic@gmail.com
@@ -99,8 +110,10 @@ files:
99
110
  - lib/cube/cube.rb
100
111
  - lib/cube/xmla.rb
101
112
  - lib/wsdl/xmla.xml
113
+ - spec/cassettes/.yml
102
114
  - spec/cassettes/kvartovi_u_recima.yml
103
115
  - spec/cassettes/kvatovi_u_koloni.yml
116
+ - spec/cassettes/mondrian_broj_intervencija.yml
104
117
  - spec/cassettes/razlog_prijave_i_kvart.yml
105
118
  - spec/cube_spec.rb
106
119
  - spec/spec_helper.rb
@@ -119,7 +132,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
119
132
  version: '0'
120
133
  segments:
121
134
  - 0
122
- hash: 3924057970411294698
135
+ hash: -309596402643366136
123
136
  required_rubygems_version: !ruby/object:Gem::Requirement
124
137
  none: false
125
138
  requirements: