CloudSesame 0.4.6 → 0.5.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.
- checksums.yaml +4 -4
- data/Gemfile.lock +4 -1
- data/cloud_sesame.gemspec +2 -2
- data/lib/cloud_sesame/domain/base.rb +40 -30
- data/lib/cloud_sesame/query/ast/field_array.rb +4 -5
- data/lib/cloud_sesame/query/ast/literal.rb +11 -12
- data/lib/cloud_sesame/query/ast/multi_expression_operator.rb +4 -9
- data/lib/cloud_sesame/query/ast/near.rb +3 -1
- data/lib/cloud_sesame/query/ast/not.rb +3 -1
- data/lib/cloud_sesame/query/ast/root.rb +1 -1
- data/lib/cloud_sesame/query/ast/single_expression_operator.rb +3 -3
- data/lib/cloud_sesame/query/builder.rb +20 -12
- data/lib/cloud_sesame/query/domain/block.rb +65 -0
- data/lib/cloud_sesame/query/domain/chaining_block.rb +44 -0
- data/lib/cloud_sesame/query/domain/literal.rb +39 -0
- data/lib/cloud_sesame/query/dsl/block_methods.rb +6 -27
- data/lib/cloud_sesame/query/dsl/field_accessors.rb +24 -0
- data/lib/cloud_sesame/query/dsl/field_array_methods.rb +5 -9
- data/lib/cloud_sesame/query/dsl/filter_query_methods.rb +3 -3
- data/lib/cloud_sesame/query/dsl/operator_methods.rb +8 -15
- data/lib/cloud_sesame/query/dsl/range_methods.rb +4 -4
- data/lib/cloud_sesame/query/dsl/response_methods.rb +1 -1
- data/lib/cloud_sesame/query/dsl/scope_accessors.rb +28 -0
- data/lib/cloud_sesame/query/error/scope_not_defined.rb +8 -0
- data/lib/cloud_sesame/query/scope.rb +21 -0
- data/lib/cloud_sesame.rb +14 -7
- data/spec/cloud_sesame/query/ast/single_expression_operator_spec.rb +1 -1
- data/spec/cloud_sesame/query/dsl/block_methods_spec.rb +54 -70
- data/spec/cloud_sesame/query/dsl/{field_methods_spec.rb → field_accessors_spec.rb} +1 -1
- data/spec/cloud_sesame_spec.rb +35 -22
- metadata +30 -34
- data/lib/cloud_sesame/query/ast/block_chaining_relation.rb +0 -30
- data/lib/cloud_sesame/query/dsl/base.rb +0 -27
- data/lib/cloud_sesame/query/dsl/block_chaining_methods.rb +0 -26
- data/lib/cloud_sesame/query/dsl/field_methods.rb +0 -16
- data/lib/cloud_sesame/query/dsl/scope_methods.rb +0 -33
- data/spec/cloud_sesame/query/ast/block_chaining_relation_spec.rb +0 -44
- data/spec/cloud_sesame/query/dsl/base_spec.rb +0 -31
- data/spec/cloud_sesame/query/dsl/block_chaining_methods_spec.rb +0 -64
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: CloudSesame
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Scott Chu
|
@@ -15,104 +15,104 @@ authors:
|
|
15
15
|
autorequire:
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
|
-
date: 2016-01
|
18
|
+
date: 2016-02-01 00:00:00.000000000 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: aws-sdk
|
22
22
|
requirement: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '2'
|
27
27
|
type: :runtime
|
28
28
|
prerelease: false
|
29
29
|
version_requirements: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '2'
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: activesupport
|
36
36
|
requirement: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '3.2'
|
41
41
|
type: :runtime
|
42
42
|
prerelease: false
|
43
43
|
version_requirements: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - ~>
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '3.2'
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: rspec
|
50
50
|
requirement: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - ~>
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
57
|
version_requirements: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - ~>
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '3'
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
63
|
name: pry
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - ~>
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
type: :development
|
70
70
|
prerelease: false
|
71
71
|
version_requirements: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - ~>
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
- !ruby/object:Gem::Dependency
|
77
77
|
name: guard
|
78
78
|
requirement: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
type: :development
|
84
84
|
prerelease: false
|
85
85
|
version_requirements: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
- !ruby/object:Gem::Dependency
|
91
91
|
name: guard-rspec
|
92
92
|
requirement: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
type: :development
|
98
98
|
prerelease: false
|
99
99
|
version_requirements: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
104
|
- !ruby/object:Gem::Dependency
|
105
105
|
name: ruby-prof
|
106
106
|
requirement: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
type: :development
|
112
112
|
prerelease: false
|
113
113
|
version_requirements: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: '0'
|
118
118
|
description: AWS CloudSearch Query DSL
|
@@ -121,8 +121,8 @@ executables: []
|
|
121
121
|
extensions: []
|
122
122
|
extra_rdoc_files: []
|
123
123
|
files:
|
124
|
-
- .gitignore
|
125
|
-
- .rspec
|
124
|
+
- ".gitignore"
|
125
|
+
- ".rspec"
|
126
126
|
- Gemfile
|
127
127
|
- Gemfile.lock
|
128
128
|
- Guardfile
|
@@ -137,7 +137,6 @@ files:
|
|
137
137
|
- lib/cloud_sesame/domain/config.rb
|
138
138
|
- lib/cloud_sesame/domain/context.rb
|
139
139
|
- lib/cloud_sesame/query/ast/and.rb
|
140
|
-
- lib/cloud_sesame/query/ast/block_chaining_relation.rb
|
141
140
|
- lib/cloud_sesame/query/ast/date_value.rb
|
142
141
|
- lib/cloud_sesame/query/ast/field_array.rb
|
143
142
|
- lib/cloud_sesame/query/ast/literal.rb
|
@@ -155,11 +154,12 @@ files:
|
|
155
154
|
- lib/cloud_sesame/query/ast/term.rb
|
156
155
|
- lib/cloud_sesame/query/ast/value.rb
|
157
156
|
- lib/cloud_sesame/query/builder.rb
|
158
|
-
- lib/cloud_sesame/query/
|
159
|
-
- lib/cloud_sesame/query/
|
157
|
+
- lib/cloud_sesame/query/domain/block.rb
|
158
|
+
- lib/cloud_sesame/query/domain/chaining_block.rb
|
159
|
+
- lib/cloud_sesame/query/domain/literal.rb
|
160
160
|
- lib/cloud_sesame/query/dsl/block_methods.rb
|
161
|
+
- lib/cloud_sesame/query/dsl/field_accessors.rb
|
161
162
|
- lib/cloud_sesame/query/dsl/field_array_methods.rb
|
162
|
-
- lib/cloud_sesame/query/dsl/field_methods.rb
|
163
163
|
- lib/cloud_sesame/query/dsl/filter_query_methods.rb
|
164
164
|
- lib/cloud_sesame/query/dsl/operator_methods.rb
|
165
165
|
- lib/cloud_sesame/query/dsl/page_methods.rb
|
@@ -167,11 +167,12 @@ files:
|
|
167
167
|
- lib/cloud_sesame/query/dsl/range_methods.rb
|
168
168
|
- lib/cloud_sesame/query/dsl/response_methods.rb
|
169
169
|
- lib/cloud_sesame/query/dsl/return_methods.rb
|
170
|
-
- lib/cloud_sesame/query/dsl/
|
170
|
+
- lib/cloud_sesame/query/dsl/scope_accessors.rb
|
171
171
|
- lib/cloud_sesame/query/dsl/sort_methods.rb
|
172
172
|
- lib/cloud_sesame/query/error/invalid_syntax.rb
|
173
173
|
- lib/cloud_sesame/query/error/missing_operator_symbol.rb
|
174
174
|
- lib/cloud_sesame/query/error/missing_query.rb
|
175
|
+
- lib/cloud_sesame/query/error/scope_not_defined.rb
|
175
176
|
- lib/cloud_sesame/query/node/abstract.rb
|
176
177
|
- lib/cloud_sesame/query/node/facet.rb
|
177
178
|
- lib/cloud_sesame/query/node/filter_query.rb
|
@@ -184,22 +185,20 @@ files:
|
|
184
185
|
- lib/cloud_sesame/query/node/request.rb
|
185
186
|
- lib/cloud_sesame/query/node/return.rb
|
186
187
|
- lib/cloud_sesame/query/node/sort.rb
|
188
|
+
- lib/cloud_sesame/query/scope.rb
|
187
189
|
- profiler.rb
|
188
190
|
- spec/abstract_object_spec.rb
|
189
191
|
- spec/cloud_sesame/domain/base_spec.rb
|
190
192
|
- spec/cloud_sesame/query/ast/and_spec.rb
|
191
|
-
- spec/cloud_sesame/query/ast/block_chaining_relation_spec.rb
|
192
193
|
- spec/cloud_sesame/query/ast/multi_expression_operator_spec.rb
|
193
194
|
- spec/cloud_sesame/query/ast/operator_spec.rb
|
194
195
|
- spec/cloud_sesame/query/ast/or_spec.rb
|
195
196
|
- spec/cloud_sesame/query/ast/root_spec.rb
|
196
197
|
- spec/cloud_sesame/query/ast/single_expression_operator_spec.rb
|
197
198
|
- spec/cloud_sesame/query/builder_spec.rb
|
198
|
-
- spec/cloud_sesame/query/dsl/base_spec.rb
|
199
|
-
- spec/cloud_sesame/query/dsl/block_chaining_methods_spec.rb
|
200
199
|
- spec/cloud_sesame/query/dsl/block_methods_spec.rb
|
200
|
+
- spec/cloud_sesame/query/dsl/field_accessors_spec.rb
|
201
201
|
- spec/cloud_sesame/query/dsl/field_array_methods_spec.rb
|
202
|
-
- spec/cloud_sesame/query/dsl/field_methods_spec.rb
|
203
202
|
- spec/cloud_sesame/query/dsl_spec.rb
|
204
203
|
- spec/cloud_sesame/query/node/abstract_spec.rb
|
205
204
|
- spec/cloud_sesame/query/node/facet_spec.rb
|
@@ -223,17 +222,17 @@ require_paths:
|
|
223
222
|
- lib
|
224
223
|
required_ruby_version: !ruby/object:Gem::Requirement
|
225
224
|
requirements:
|
226
|
-
- -
|
225
|
+
- - ">="
|
227
226
|
- !ruby/object:Gem::Version
|
228
227
|
version: '0'
|
229
228
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
230
229
|
requirements:
|
231
|
-
- -
|
230
|
+
- - ">="
|
232
231
|
- !ruby/object:Gem::Version
|
233
232
|
version: '0'
|
234
233
|
requirements: []
|
235
234
|
rubyforge_project:
|
236
|
-
rubygems_version: 2.
|
235
|
+
rubygems_version: 2.5.1
|
237
236
|
signing_key:
|
238
237
|
specification_version: 4
|
239
238
|
summary: AWS CloudSearch Query DSL
|
@@ -241,18 +240,15 @@ test_files:
|
|
241
240
|
- spec/abstract_object_spec.rb
|
242
241
|
- spec/cloud_sesame/domain/base_spec.rb
|
243
242
|
- spec/cloud_sesame/query/ast/and_spec.rb
|
244
|
-
- spec/cloud_sesame/query/ast/block_chaining_relation_spec.rb
|
245
243
|
- spec/cloud_sesame/query/ast/multi_expression_operator_spec.rb
|
246
244
|
- spec/cloud_sesame/query/ast/operator_spec.rb
|
247
245
|
- spec/cloud_sesame/query/ast/or_spec.rb
|
248
246
|
- spec/cloud_sesame/query/ast/root_spec.rb
|
249
247
|
- spec/cloud_sesame/query/ast/single_expression_operator_spec.rb
|
250
248
|
- spec/cloud_sesame/query/builder_spec.rb
|
251
|
-
- spec/cloud_sesame/query/dsl/base_spec.rb
|
252
|
-
- spec/cloud_sesame/query/dsl/block_chaining_methods_spec.rb
|
253
249
|
- spec/cloud_sesame/query/dsl/block_methods_spec.rb
|
250
|
+
- spec/cloud_sesame/query/dsl/field_accessors_spec.rb
|
254
251
|
- spec/cloud_sesame/query/dsl/field_array_methods_spec.rb
|
255
|
-
- spec/cloud_sesame/query/dsl/field_methods_spec.rb
|
256
252
|
- spec/cloud_sesame/query/dsl_spec.rb
|
257
253
|
- spec/cloud_sesame/query/node/abstract_spec.rb
|
258
254
|
- spec/cloud_sesame/query/node/facet_spec.rb
|
@@ -1,30 +0,0 @@
|
|
1
|
-
module CloudSesame
|
2
|
-
module Query
|
3
|
-
module AST
|
4
|
-
class BlockChainingRelation
|
5
|
-
include DSL::BlockChainingMethods
|
6
|
-
|
7
|
-
attr_reader :orphan_node
|
8
|
-
|
9
|
-
def initialize(dsl_scope, dsl_return, orphan_node)
|
10
|
-
@dsl_scope = dsl_scope
|
11
|
-
@dsl_return = dsl_return
|
12
|
-
@orphan_node = orphan_node
|
13
|
-
end
|
14
|
-
|
15
|
-
def dsl_scope
|
16
|
-
@dsl_scope
|
17
|
-
end
|
18
|
-
|
19
|
-
def dsl_context
|
20
|
-
dsl_scope.context
|
21
|
-
end
|
22
|
-
|
23
|
-
def dsl_return(node = nil)
|
24
|
-
@dsl_scope.is_a?(Root) || !node ? @dsl_return : node
|
25
|
-
end
|
26
|
-
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
module CloudSesame
|
2
|
-
module Query
|
3
|
-
module DSL
|
4
|
-
module Base
|
5
|
-
|
6
|
-
private
|
7
|
-
|
8
|
-
def dsl_scope
|
9
|
-
self
|
10
|
-
end
|
11
|
-
|
12
|
-
def dsl_context
|
13
|
-
dsl_scope.context
|
14
|
-
end
|
15
|
-
|
16
|
-
def dsl_caller
|
17
|
-
dsl_context[:caller]
|
18
|
-
end
|
19
|
-
|
20
|
-
def dsl_return(node = nil)
|
21
|
-
node || dsl_scope
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
module CloudSesame
|
2
|
-
module Query
|
3
|
-
module DSL
|
4
|
-
module BlockChainingMethods
|
5
|
-
|
6
|
-
# CLAUSE: NOT
|
7
|
-
# =========================================
|
8
|
-
def not(options = {}, &block)
|
9
|
-
raise missing_block unless block_given?
|
10
|
-
node = AST::Not.new(dsl_context, options)
|
11
|
-
orphan_node.instance_eval &block
|
12
|
-
node << orphan_node
|
13
|
-
dsl_scope << node
|
14
|
-
dsl_return node
|
15
|
-
end
|
16
|
-
|
17
|
-
private
|
18
|
-
|
19
|
-
def missing_block
|
20
|
-
Error::InvalidSyntax.new("#{ orphan_node.class::SYMBOL }.not requires a block")
|
21
|
-
end
|
22
|
-
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
module CloudSesame
|
2
|
-
module Query
|
3
|
-
module DSL
|
4
|
-
module FieldMethods
|
5
|
-
|
6
|
-
def literal(name, *values)
|
7
|
-
name = name.to_sym
|
8
|
-
dsl_scope.children.field = name
|
9
|
-
dsl_scope.children.dsl_return = dsl_return
|
10
|
-
dsl_scope.children.insert values
|
11
|
-
end
|
12
|
-
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
module CloudSesame
|
2
|
-
module Query
|
3
|
-
module DSL
|
4
|
-
module ScopeMethods
|
5
|
-
|
6
|
-
def scopes(name = nil, *args)
|
7
|
-
if (name && context_scopes && (callback = context_scopes[name])) || name.nil?
|
8
|
-
instance_exec(*args, &callback) if callback
|
9
|
-
dsl_return
|
10
|
-
else
|
11
|
-
raise NoMethodError, "scope[#{ name }] does not exist"
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
private
|
16
|
-
|
17
|
-
def context_scopes
|
18
|
-
dsl_context[:scopes]
|
19
|
-
end
|
20
|
-
|
21
|
-
def method_missing(name, *args, &block)
|
22
|
-
if context_scopes && (callback = context_scopes[name])
|
23
|
-
instance_exec *args, &callback
|
24
|
-
dsl_return
|
25
|
-
else
|
26
|
-
super
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
module CloudSesame
|
2
|
-
module Query
|
3
|
-
module AST
|
4
|
-
describe BlockChainingRelation do
|
5
|
-
let(:context) { {} }
|
6
|
-
let(:dsl_scope) { OpenStruct.new context: context }
|
7
|
-
let(:dsl_return) { OpenStruct.new context: context }
|
8
|
-
let(:orphan_node) { OpenStruct.new }
|
9
|
-
subject { BlockChainingRelation.new dsl_scope, dsl_return, orphan_node }
|
10
|
-
|
11
|
-
describe '#dsl_context' do
|
12
|
-
it 'should return dsl_scope context' do
|
13
|
-
expect(subject.dsl_scope).to receive(:context)
|
14
|
-
subject.dsl_context
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
describe '#dsl_return' do
|
19
|
-
context 'when dsl return is a root node' do
|
20
|
-
let(:dsl_scope) { Root.new(context) }
|
21
|
-
it 'should return the root' do
|
22
|
-
expect(subject.dsl_return).to eq dsl_return
|
23
|
-
end
|
24
|
-
end
|
25
|
-
context 'when dsl return is not a root node' do
|
26
|
-
context 'and node is passed in' do
|
27
|
-
let(:node) { OpenStruct.new }
|
28
|
-
it 'should return the node' do
|
29
|
-
expect(subject.dsl_return node).to eq node
|
30
|
-
end
|
31
|
-
end
|
32
|
-
context 'and node is not passed in' do
|
33
|
-
it 'should return the node' do
|
34
|
-
expect(subject.dsl_return).to eq dsl_return
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|
40
|
-
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
module CloudSesame
|
2
|
-
module Query
|
3
|
-
module DSL
|
4
|
-
describe Base do
|
5
|
-
|
6
|
-
class TestClass
|
7
|
-
include Base
|
8
|
-
end
|
9
|
-
|
10
|
-
subject { TestClass.new }
|
11
|
-
|
12
|
-
shared_examples 'return self instance' do
|
13
|
-
it 'should return itself' do
|
14
|
-
expect(result).to eq subject
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
describe '#method_return' do
|
19
|
-
let(:result) { subject.send(:dsl_return) }
|
20
|
-
include_examples 'return self instance'
|
21
|
-
end
|
22
|
-
|
23
|
-
describe '#method_scope' do
|
24
|
-
let(:result) { subject.send(:dsl_scope) }
|
25
|
-
include_examples 'return self instance'
|
26
|
-
end
|
27
|
-
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,64 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module CloudSesame
|
4
|
-
module Query
|
5
|
-
module DSL
|
6
|
-
describe BlockChainingMethods do
|
7
|
-
|
8
|
-
# Setup Test Class
|
9
|
-
class Product
|
10
|
-
include CloudSesame
|
11
|
-
define_cloudsearch {}
|
12
|
-
end
|
13
|
-
|
14
|
-
subject(:cloudsearch) { Product.cloudsearch.builder }
|
15
|
-
|
16
|
-
# NOT
|
17
|
-
# =======================================
|
18
|
-
describe '#not' do
|
19
|
-
let(:node_class) { AST::Not }
|
20
|
-
|
21
|
-
context 'when not called after an operator' do
|
22
|
-
it 'should raise an error' do
|
23
|
-
expect{ subject.not }.to raise_error NoMethodError
|
24
|
-
end
|
25
|
-
end
|
26
|
-
context 'when called after an multi expression operator method call' do
|
27
|
-
context 'and not block is given' do
|
28
|
-
it 'should raise an error' do
|
29
|
-
expect{ subject.or.not }.to raise_error Error::InvalidSyntax
|
30
|
-
end
|
31
|
-
end
|
32
|
-
context 'and block is given' do
|
33
|
-
it 'should create a NOT node' do
|
34
|
-
expect(node_class).to receive(:new).and_call_original
|
35
|
-
subject.and.not {}
|
36
|
-
end
|
37
|
-
it 'should have the operator node as child' do
|
38
|
-
subject.and.not {}
|
39
|
-
expect(subject.request.filter_query.root.children[0].child ).to be_kind_of(AST::And)
|
40
|
-
end
|
41
|
-
it 'should belong to the dsl scope' do
|
42
|
-
expect{ subject.and.not {} }.to change{ subject.request.filter_query.root.children[0] }.from(nil).to be_kind_of(node_class)
|
43
|
-
end
|
44
|
-
context 'from root' do
|
45
|
-
it 'should return the cloudsearch domain' do
|
46
|
-
expect(subject.and.not {}).to eq subject
|
47
|
-
end
|
48
|
-
end
|
49
|
-
context 'from inside of nested block' do
|
50
|
-
it 'should return the Not node itself' do
|
51
|
-
node = nil
|
52
|
-
subject.and { node = or!.not {} }
|
53
|
-
expect(node).to be_kind_of(node_class)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
end
|
60
|
-
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|