msfl_visitors 1.1.0.dev3 → 1.1.0.dev4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/msfl_visitors/visitor.rb +7 -6
- data/msfl_visitors.gemspec +1 -1
- data/spec/msfl_visitors/visitors/chewy_term_filter_spec.rb +40 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e7618102d9f99a0c0355ca268490a8f333726946
|
4
|
+
data.tar.gz: d53c6a5cafbb278a65a5be4d18342a9b90b492c5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 69d662a60f191114662fa52b9cac362891d3e51f75405610fec3ebeb0be29a8bd47e8c8b4cdb34a18fa699203bcd115624479078f00e4102d3d639bf4e37b994
|
7
|
+
data.tar.gz: 8196994112628bf366eb554ffd291c95ce47a4b1bba99ec885eea7457a7717dfdc5a612a347b7a818fefa6e80380d7b746ea1833edd52a1613ef6ed29ec51c2f
|
@@ -73,7 +73,7 @@ module MSFLVisitors
|
|
73
73
|
when Nodes::Field
|
74
74
|
node.value.to_s
|
75
75
|
when Nodes::Regex
|
76
|
-
"/#{node.value}/"
|
76
|
+
"/#{Regexp.escape(node.value)}/"
|
77
77
|
when Nodes::Word
|
78
78
|
"\"#{node.value}\""
|
79
79
|
when Nodes::Date, Nodes::Time
|
@@ -83,8 +83,8 @@ module MSFLVisitors
|
|
83
83
|
|
84
84
|
when Nodes::Match
|
85
85
|
if node.right.is_a? Nodes::Set
|
86
|
-
regex = node.right.contents.map { |right_child| right_child.value.to_s }.join('|')
|
87
|
-
"#{node.left.accept(visitor)} #{BINARY_OPERATORS[node.class]} #{
|
86
|
+
regex = '/' + node.right.contents.map { |right_child| MSFLVisitors::Nodes::Regex.new(right_child.value.to_s).accept(visitor)[1..-2] }.join('|') + '/'
|
87
|
+
"#{node.left.accept(visitor)} #{BINARY_OPERATORS[node.class]} #{regex}"
|
88
88
|
else
|
89
89
|
"#{node.left.accept(visitor)} #{BINARY_OPERATORS[node.class]} #{MSFLVisitors::Nodes::Regex.new(node.right.value.to_s).accept(visitor)}"
|
90
90
|
end
|
@@ -159,8 +159,9 @@ module MSFLVisitors
|
|
159
159
|
|
160
160
|
when Nodes::Match
|
161
161
|
if node.right.is_a? Nodes::Set
|
162
|
-
regex = node.right.contents.map { |right_child| right_child.value.to_s }.join('|')
|
163
|
-
|
162
|
+
regex = node.right.contents.map { |right_child| MSFLVisitors::Nodes::Regex.new(right_child.value.to_s).accept(visitor) }.join('|')
|
163
|
+
# regex = node.right.contents.map { |right_child| right_child.value.to_s }.join('|')
|
164
|
+
{ agg_field_name: node.left.accept(visitor), operator: :match, test_value: regex }
|
164
165
|
else
|
165
166
|
{ agg_field_name: node.left.accept(visitor), operator: :match, test_value: MSFLVisitors::Nodes::Regex.new(node.right.value.to_s).accept(visitor) }
|
166
167
|
end
|
@@ -175,7 +176,7 @@ module MSFLVisitors
|
|
175
176
|
Nodes::Dataset
|
176
177
|
node.value
|
177
178
|
when Nodes::Regex
|
178
|
-
node.value.to_s
|
179
|
+
Regexp.escape(node.value.to_s)
|
179
180
|
|
180
181
|
when Nodes::GreaterThan,
|
181
182
|
Nodes::GreaterThanEqual,
|
data/msfl_visitors.gemspec
CHANGED
@@ -683,6 +683,46 @@ describe MSFLVisitors::Visitor do
|
|
683
683
|
end
|
684
684
|
end
|
685
685
|
end
|
686
|
+
|
687
|
+
describe "a Regex node" do
|
688
|
+
|
689
|
+
let(:regex) { "content" }
|
690
|
+
|
691
|
+
let(:node) { MSFLVisitors::Nodes::Regex.new regex }
|
692
|
+
|
693
|
+
it "returns: \"/content/\"" do
|
694
|
+
expect(result).to eq "/#{regex}/"
|
695
|
+
end
|
696
|
+
|
697
|
+
context "when using the Aggregations visitor" do
|
698
|
+
|
699
|
+
before { visitor.mode = :aggregations }
|
700
|
+
|
701
|
+
it "returns: the elasticsearch regular expression formatted string \"content\"" do
|
702
|
+
expect(result).to eq "#{regex}"
|
703
|
+
end
|
704
|
+
end
|
705
|
+
|
706
|
+
context "when the regex contains characters that require escaping" do
|
707
|
+
|
708
|
+
let(:regex) { 'this / needs to % {be,escaped} *. ^[or] | \else' }
|
709
|
+
|
710
|
+
let(:node) { MSFLVisitors::Nodes::Regex.new regex }
|
711
|
+
|
712
|
+
it "returns: '/this\\ /\\ needs\\ to\\ %\\ \\{be,escaped\\}\\ \\*\\.\\ \\^\\[or\\]\\ \\|\\ \\\\else/'" do
|
713
|
+
expect(result).to eq "/this\\ /\\ needs\\ to\\ %\\ \\{be,escaped\\}\\ \\*\\.\\ \\^\\[or\\]\\ \\|\\ \\\\else/"
|
714
|
+
end
|
715
|
+
|
716
|
+
context "when using the Aggregations visitor" do
|
717
|
+
|
718
|
+
before { visitor.mode = :aggregations }
|
719
|
+
|
720
|
+
it "returns: 'this\\ /\\ needs\\ to\\ %\\ \\{be,escaped\\}\\ \\*\\.\\ \\^\\[or\\]\\ \\|\\ \\\\else'" do
|
721
|
+
expect(result).to eq "this\\ /\\ needs\\ to\\ %\\ \\{be,escaped\\}\\ \\*\\.\\ \\^\\[or\\]\\ \\|\\ \\\\else"
|
722
|
+
end
|
723
|
+
end
|
724
|
+
end
|
725
|
+
end
|
686
726
|
end
|
687
727
|
|
688
728
|
describe "range value nodes" do
|