Skip to content

Commit be90abc

Browse files
MarcioPortojazzido
authored andcommitted
Measure name matching (#37)
* fixes broken query helper tests * adds tests for new VALID_FILTER_RE regex * makes VALID_FILTER_RE tests pass * remove coverage files, ignore dir
1 parent d56c711 commit be90abc

File tree

4 files changed

+126
-2
lines changed

4 files changed

+126
-2
lines changed

Diff for: .gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,5 @@
22
*.log
33
spec/fixtures/foodmart/
44
spec/fixtures/webshop.sqlite
5+
coverage
6+

Diff for: Gemfile.lock

+112
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
PATH
2+
remote: .
3+
specs:
4+
mondrian-rest (1.0.0-java)
5+
activesupport (~> 5.1, >= 5.1.5)
6+
grape (~> 1.0, >= 1.0.0)
7+
mondrian-olap (~> 0.8.0)
8+
writeexcel (~> 1.0, >= 1.0.5)
9+
10+
GEM
11+
remote: http://rubygems.org/
12+
specs:
13+
activesupport (5.2.1)
14+
concurrent-ruby (~> 1.0, >= 1.0.2)
15+
i18n (>= 0.7, < 2)
16+
minitest (~> 5.1)
17+
tzinfo (~> 1.1)
18+
axiom-types (0.1.1)
19+
descendants_tracker (~> 0.0.4)
20+
ice_nine (~> 0.11.0)
21+
thread_safe (~> 0.3, >= 0.3.1)
22+
builder (3.2.3)
23+
coercible (1.0.0)
24+
descendants_tracker (~> 0.0.1)
25+
concurrent-ruby (1.0.5-java)
26+
coveralls (0.8.22)
27+
json (>= 1.8, < 3)
28+
simplecov (~> 0.16.1)
29+
term-ansicolor (~> 1.3)
30+
thor (~> 0.19.4)
31+
tins (~> 1.6)
32+
descendants_tracker (0.0.4)
33+
thread_safe (~> 0.3, >= 0.3.1)
34+
diff-lcs (1.3)
35+
docile (1.3.1)
36+
equalizer (0.0.11)
37+
grape (1.1.0)
38+
activesupport
39+
builder
40+
mustermann-grape (~> 1.0.0)
41+
rack (>= 1.3.0)
42+
rack-accept
43+
virtus (>= 1.0.0)
44+
i18n (1.1.0)
45+
concurrent-ruby (~> 1.0)
46+
ice_nine (0.11.2)
47+
jar-dependencies (0.3.12)
48+
jdbc-derby (10.12.1.1)
49+
jdbc-sqlite3 (3.20.1)
50+
json (2.1.0-java)
51+
minitest (5.11.3)
52+
mondrian-olap (0.8.0)
53+
nokogiri
54+
mustermann (1.0.3)
55+
mustermann-grape (1.0.0)
56+
mustermann (~> 1.0.0)
57+
nokogiri (1.8.4-java)
58+
rack (2.0.5)
59+
rack-accept (0.4.5)
60+
rack (>= 0.4)
61+
rack-test (0.7.0)
62+
rack (>= 1.0, < 3)
63+
rake (12.3.1)
64+
rspec (3.8.0)
65+
rspec-core (~> 3.8.0)
66+
rspec-expectations (~> 3.8.0)
67+
rspec-mocks (~> 3.8.0)
68+
rspec-core (3.8.0)
69+
rspec-support (~> 3.8.0)
70+
rspec-expectations (3.8.1)
71+
diff-lcs (>= 1.2.0, < 2.0)
72+
rspec-support (~> 3.8.0)
73+
rspec-mocks (3.8.0)
74+
diff-lcs (>= 1.2.0, < 2.0)
75+
rspec-support (~> 3.8.0)
76+
rspec-support (3.8.0)
77+
rubyzip (1.2.2)
78+
simplecov (0.16.1)
79+
docile (~> 1.1)
80+
json (>= 1.8, < 3)
81+
simplecov-html (~> 0.10.0)
82+
simplecov-html (0.10.2)
83+
term-ansicolor (1.6.0)
84+
tins (~> 1.0)
85+
thor (0.19.4)
86+
thread_safe (0.3.6-java)
87+
tins (1.16.3)
88+
tzinfo (1.2.5)
89+
thread_safe (~> 0.1)
90+
virtus (1.0.5)
91+
axiom-types (~> 0.1)
92+
coercible (~> 1.0)
93+
descendants_tracker (~> 0.0, >= 0.0.3)
94+
equalizer (~> 0.0, >= 0.0.9)
95+
writeexcel (1.0.5)
96+
97+
PLATFORMS
98+
java
99+
100+
DEPENDENCIES
101+
coveralls
102+
jar-dependencies (~> 0.3.2)
103+
jdbc-derby (~> 10.12, >= 10.12.1.1)
104+
jdbc-sqlite3 (~> 3.15, >= 3.15.1)
105+
mondrian-rest!
106+
rack-test (~> 0.7.0)
107+
rake (~> 12.1, >= 12.1.0)
108+
rspec (~> 3.6, >= 3.6.0)
109+
rubyzip (~> 1.2, >= 1.2.1)
110+
111+
BUNDLED WITH
112+
1.16.3

Diff for: lib/mondrian_rest/query_helper.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ module QueryHelper
44
VALID_FILTER_OPS = [
55
'>', '<', '>=', '<=', '=', '<>'
66
].freeze
7-
VALID_FILTER_RE = /(?<measure>[a-zA-Z0-9\s]+)\s*(?<operand>#{VALID_FILTER_OPS.join("|")})\s*(?<value>-?\d+\.?\d*)/
7+
VALID_FILTER_RE = /(?<measure>[a-zA-Z0-9-!$%^&*()_+|@#~`{}\[\]:";'?,.\/\s]+)\s*(?<operand>#{VALID_FILTER_OPS.join("|")})\s*(?<value>-?\d+\.?\d*)/
88
MEMBER_METHODS = %w[Caption Key Name UniqueName].freeze
99

1010
def unparse_node(node)
@@ -269,7 +269,7 @@ def build_query(cube, options = {})
269269

270270
# Apply filters
271271
unless filters.empty?
272-
filter_exp = filters.map { |f| "[Measures].[#{org.olap4j.mdx.MdxUtil.mdxEncodeString(f[:measure])}] #{f[:operand]} #{f[:value]}" }.join(' AND ')
272+
filter_exp = filters.map { |f| "[Measures].[#{f[:measure]}] #{f[:operand]} #{f[:value]}" }.join(' AND ')
273273
axis_exp = "FILTER(#{axis_exp}, #{filter_exp})"
274274
end
275275

Diff for: spec/query_builder_spec.rb

+10
Original file line numberDiff line numberDiff line change
@@ -158,4 +158,14 @@ def error!(*args)
158158
expect(q.to_mdx).to eq("SELECT {[Measures].[Store Invoice]} ON COLUMNS,\n{[Top Sellers]} ON ROWS\nFROM [Warehouse]")
159159
end
160160
end
161+
162+
describe "VALID_FILTER_RE" do
163+
it "should match measures with special characters (except '<', '>' and '=')" do
164+
m = QueryHelper::VALID_FILTER_RE.match(" \"#$%&'()*+,-./:;?@[\]^_`{|}~ > 100")
165+
expect(m["measure"]).to eq(" \"#$%&'()*+,-./:;?@[\]^_`{|}~ ")
166+
167+
m = QueryHelper::VALID_FILTER_RE.match("#<=># > 100")
168+
expect(m["measure"]).not_to eq("#<=># ")
169+
end
170+
end
161171
end

0 commit comments

Comments
 (0)