CloudSesame 0.2.4 → 0.2.5
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 +1 -1
- data/cloud_sesame.gemspec +1 -1
- data/lib/cloud_sesame/query/ast/operator.rb +1 -5
- data/lib/cloud_sesame/query/ast/single_expression_operator.rb +2 -2
- data/lib/cloud_sesame/query/dsl/block_chaining_methods.rb +1 -1
- data/lib/cloud_sesame/query/node/filter_query.rb +14 -1
- data/spec/cloud_sesame/query/ast/and_spec.rb +17 -0
- data/spec/cloud_sesame/query/ast/block_chaining_relation_spec.rb +44 -0
- data/spec/cloud_sesame/query/ast/multi_expression_operator_spec.rb +76 -0
- data/spec/cloud_sesame/query/ast/operator_spec.rb +38 -0
- data/spec/cloud_sesame/query/ast/or_spec.rb +17 -0
- data/spec/cloud_sesame/query/ast/root_spec.rb +0 -0
- data/spec/cloud_sesame/query/ast/single_expression_operator_spec.rb +84 -0
- data/spec/cloud_sesame/query/dsl/block_chaining_methods_spec.rb +0 -7
- metadata +15 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3459d29078ee48b4320364769b91bbe66f7fbece
|
4
|
+
data.tar.gz: e77c9b2917e402329afa7206512d51f77fe973aa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3d8586b977026307c6ef5027cf98f76c9fea091d75e99bfad83a67d446f53b8b469b92c56537b38e6eec0ca8fd81f8c07ab644c668fcc45e83159f6bdcf6b653
|
7
|
+
data.tar.gz: 9f66a716cf04f1713dca9a59fd6ef633c5d71432661d78af41110e164d51527721d1bb09d63bd464a25c00116e2308de9647a644c301e1fb22ba502b5b10caea
|
data/Gemfile.lock
CHANGED
data/cloud_sesame.gemspec
CHANGED
@@ -9,17 +9,13 @@ module CloudSesame
|
|
9
9
|
def initialize(context, options = {}, &block)
|
10
10
|
@context = context
|
11
11
|
@options = options
|
12
|
-
|
12
|
+
instance_eval &block if block_given?
|
13
13
|
end
|
14
14
|
|
15
15
|
def boost
|
16
16
|
" boost=#{ options[:boost] }" if options[:boost]
|
17
17
|
end
|
18
18
|
|
19
|
-
def evaluate(&block)
|
20
|
-
instance_eval &block
|
21
|
-
end
|
22
|
-
|
23
19
|
end
|
24
20
|
end
|
25
21
|
end
|
@@ -10,11 +10,11 @@ module CloudSesame
|
|
10
10
|
attr_accessor :child
|
11
11
|
|
12
12
|
def is_for(field, field_options)
|
13
|
-
child.is_for field, field_options
|
13
|
+
child.is_for field, field_options if child
|
14
14
|
end
|
15
15
|
|
16
16
|
def is_excluded
|
17
|
-
child.is_excluded
|
17
|
+
child.is_excluded if child
|
18
18
|
end
|
19
19
|
|
20
20
|
def <<(object)
|
@@ -8,7 +8,7 @@ module CloudSesame
|
|
8
8
|
def not(options = {}, &block)
|
9
9
|
raise missing_block unless block_given?
|
10
10
|
node = AST::Not.new(dsl_context, options)
|
11
|
-
orphan_node.
|
11
|
+
orphan_node.instance_eval &block
|
12
12
|
node << orphan_node
|
13
13
|
dsl_scope << node
|
14
14
|
dsl_return node
|
@@ -8,7 +8,20 @@ module CloudSesame
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def root
|
11
|
-
@root ||=
|
11
|
+
@root ||= create_root_with_default_values
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def create_root_with_default_values
|
17
|
+
root = CloudSesame::Query::AST::Root.new context
|
18
|
+
context[:fields].each do |field, options|
|
19
|
+
if options && (block = options[:default])
|
20
|
+
value = root.instance_exec &block
|
21
|
+
root << AST::Literal.new(field, value, options)
|
22
|
+
end
|
23
|
+
end if context[:fields]
|
24
|
+
root
|
12
25
|
end
|
13
26
|
|
14
27
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module CloudSesame
|
2
|
+
module Query
|
3
|
+
module AST
|
4
|
+
describe And do
|
5
|
+
|
6
|
+
it 'should be a type of operator' do
|
7
|
+
expect(And.ancestors).to include(MultiExpressionOperator)
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'should have symbol :and' do
|
11
|
+
expect(And::SYMBOL).to eq :and
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,44 @@
|
|
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
|
@@ -0,0 +1,76 @@
|
|
1
|
+
module CloudSesame
|
2
|
+
module Query
|
3
|
+
module AST
|
4
|
+
describe MultiExpressionOperator do
|
5
|
+
|
6
|
+
let(:context) { {} }
|
7
|
+
let(:options) { {} }
|
8
|
+
let(:block) { Proc.new {} }
|
9
|
+
|
10
|
+
subject { MultiExpressionOperator.new(context, options, &block) }
|
11
|
+
|
12
|
+
it 'should be a type of operator' do
|
13
|
+
expect(MultiExpressionOperator.ancestors).to include(Operator)
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '#children' do
|
17
|
+
it 'should be empty by default' do
|
18
|
+
expect(subject.children).to be_empty
|
19
|
+
end
|
20
|
+
it 'should be an Field Array' do
|
21
|
+
expect(subject.children).to be_a AST::FieldArray
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe '#compile' do
|
26
|
+
context 'when theres children' do
|
27
|
+
let(:child) { OpenStruct.new(compile: "compiled") }
|
28
|
+
before { subject.children << child }
|
29
|
+
|
30
|
+
it 'should compile to children' do
|
31
|
+
expect(subject.children).to receive(:compile)
|
32
|
+
subject.compile
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'and boost options is given' do
|
36
|
+
before { subject.options[:boost] = 2 }
|
37
|
+
it 'should return compiled string with boost' do
|
38
|
+
expect(subject.compile).to eq "( boost=2 compiled)"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
context 'and boost options is not given' do
|
42
|
+
it 'should return compiled string with boost' do
|
43
|
+
expect(subject.compile).to eq "( compiled)"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
context 'when theres no children' do
|
48
|
+
it 'should return nothing' do
|
49
|
+
expect(subject.compile).to eq nil
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe '#<<' do
|
55
|
+
it 'should push object into the children' do
|
56
|
+
object = :hello
|
57
|
+
expect(subject.children).to receive(:<<).with(object)
|
58
|
+
subject << object
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe '#is_excluded' do
|
63
|
+
let(:child) { OpenStruct.new(is_excluded: nil) }
|
64
|
+
before { subject.children << child.dup << child.dup << child.dup }
|
65
|
+
it 'should broadcast down this method to it\'s children' do
|
66
|
+
subject.children.each do |child|
|
67
|
+
expect(child).to receive(:is_excluded)
|
68
|
+
end
|
69
|
+
subject.is_excluded
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module CloudSesame
|
4
|
+
module Query
|
5
|
+
module AST
|
6
|
+
describe Operator do
|
7
|
+
let(:context) {{}}
|
8
|
+
let(:options) {{}}
|
9
|
+
let(:block) { Proc.new {} }
|
10
|
+
subject { Operator.new(context, options, &block) }
|
11
|
+
|
12
|
+
describe '#initialize' do
|
13
|
+
context 'given a block' do
|
14
|
+
let(:block) { Proc.new { context[:name] = :test } }
|
15
|
+
it 'should evalute the block' do
|
16
|
+
expect(subject.context[:name]).to eq :test
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe '#boost' do
|
22
|
+
context 'given boost option' do
|
23
|
+
let(:options) {{ boost: 2 }}
|
24
|
+
it 'should return an compiled boost value' do
|
25
|
+
expect(subject.boost).to eq " boost=2"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
context 'given no boost option' do
|
29
|
+
it 'should return nothing' do
|
30
|
+
expect(subject.boost).to eq nil
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module CloudSesame
|
2
|
+
module Query
|
3
|
+
module AST
|
4
|
+
describe Or do
|
5
|
+
|
6
|
+
it 'should be a type of operator' do
|
7
|
+
expect(Or.ancestors).to include(MultiExpressionOperator)
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'should have symbol :or' do
|
11
|
+
expect(Or::SYMBOL).to eq :or
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
File without changes
|
@@ -0,0 +1,84 @@
|
|
1
|
+
module CloudSesame
|
2
|
+
module Query
|
3
|
+
module AST
|
4
|
+
describe SingleExpressionOperator do
|
5
|
+
|
6
|
+
let(:context) { {} }
|
7
|
+
let(:options) { {} }
|
8
|
+
let(:block) { Proc.new {} }
|
9
|
+
|
10
|
+
subject { SingleExpressionOperator.new(context, options, &block) }
|
11
|
+
|
12
|
+
it 'should be a type of operator' do
|
13
|
+
expect(MultiExpressionOperator.ancestors).to include(Operator)
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '#child' do
|
17
|
+
it 'should be nil by default' do
|
18
|
+
expect(subject.child).to be_nil
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe '#is_for' do
|
23
|
+
it 'should forward the field and field options to it\'s child' do
|
24
|
+
subject.child = OpenStruct.new is_for: ""
|
25
|
+
expect(subject.child).to receive(:is_for).with(:test, :options)
|
26
|
+
subject.is_for :test, :options
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe '#is_excluded' do
|
31
|
+
context 'when child exist' do
|
32
|
+
it 'should call #is_excluded on it\'s child' do
|
33
|
+
subject.child = OpenStruct.new is_excluded: ""
|
34
|
+
expect(subject.child).to receive(:is_excluded)
|
35
|
+
subject.is_excluded
|
36
|
+
end
|
37
|
+
end
|
38
|
+
context 'when child not exist' do
|
39
|
+
it 'should call #is_excluded on it\'s child' do
|
40
|
+
expect(subject.child).to_not receive(:is_excluded)
|
41
|
+
subject.is_excluded
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe '#<<' do
|
47
|
+
it 'should set the object as child' do
|
48
|
+
child = OpenStruct.new()
|
49
|
+
expect { subject << child }.to change{ subject.child }.from(nil).to(child)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe '#compile' do
|
54
|
+
before {
|
55
|
+
subject.child = OpenStruct.new compile: ""
|
56
|
+
allow(subject.child).to receive(:compile)
|
57
|
+
}
|
58
|
+
it 'should compile it\'s child and detailed set to false' do
|
59
|
+
expect(subject.child).to receive(:compile).with(SingleExpressionOperator::DETAILED)
|
60
|
+
subject.compile
|
61
|
+
end
|
62
|
+
context 'when theres boost options' do
|
63
|
+
it 'should include boost value in the compiled value' do
|
64
|
+
subject.options[:boost] = 1
|
65
|
+
expect(subject.compile).to include("boost=1")
|
66
|
+
end
|
67
|
+
end
|
68
|
+
context 'when theres no boost options' do
|
69
|
+
it 'should not include boost value in the compiled value' do
|
70
|
+
expect(subject.compile).to_not include("boost=")
|
71
|
+
end
|
72
|
+
end
|
73
|
+
context 'when theres a symbol' do
|
74
|
+
before { SingleExpressionOperator::SYMBOL = "test_symbol"}
|
75
|
+
it 'should include the symbol in the compiled value' do
|
76
|
+
expect(subject.compile).to include "(test_symbol"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -36,13 +36,6 @@ module CloudSesame
|
|
36
36
|
expect(node_class).to receive(:new).and_call_original
|
37
37
|
subject.and.not {}
|
38
38
|
end
|
39
|
-
it 'should create a operator node with the block passed to not' do
|
40
|
-
proc = -> { }
|
41
|
-
expect_any_instance_of(AST::And).to receive(:evaluate) { |context, options, &block|
|
42
|
-
expect(block).to eq(proc)
|
43
|
-
}
|
44
|
-
subject.and.not &proc
|
45
|
-
end
|
46
39
|
it 'should have the operator node as child' do
|
47
40
|
subject.and.not {}
|
48
41
|
expect(subject.request.filter_query.root.children[0].child ).to be_kind_of(AST::And)
|
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.2.
|
4
|
+
version: 0.2.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Scott Chu
|
@@ -156,6 +156,13 @@ files:
|
|
156
156
|
- spec/abstract_object_spec.rb
|
157
157
|
- spec/cloud_sesame/domain/base_spec.rb
|
158
158
|
- spec/cloud_sesame/domain/context_spec.rb
|
159
|
+
- spec/cloud_sesame/query/ast/and_spec.rb
|
160
|
+
- spec/cloud_sesame/query/ast/block_chaining_relation_spec.rb
|
161
|
+
- spec/cloud_sesame/query/ast/multi_expression_operator_spec.rb
|
162
|
+
- spec/cloud_sesame/query/ast/operator_spec.rb
|
163
|
+
- spec/cloud_sesame/query/ast/or_spec.rb
|
164
|
+
- spec/cloud_sesame/query/ast/root_spec.rb
|
165
|
+
- spec/cloud_sesame/query/ast/single_expression_operator_spec.rb
|
159
166
|
- spec/cloud_sesame/query/dsl/base_spec.rb
|
160
167
|
- spec/cloud_sesame/query/dsl/block_chaining_methods_spec.rb
|
161
168
|
- spec/cloud_sesame/query/dsl/block_methods_spec.rb
|
@@ -202,6 +209,13 @@ test_files:
|
|
202
209
|
- spec/abstract_object_spec.rb
|
203
210
|
- spec/cloud_sesame/domain/base_spec.rb
|
204
211
|
- spec/cloud_sesame/domain/context_spec.rb
|
212
|
+
- spec/cloud_sesame/query/ast/and_spec.rb
|
213
|
+
- spec/cloud_sesame/query/ast/block_chaining_relation_spec.rb
|
214
|
+
- spec/cloud_sesame/query/ast/multi_expression_operator_spec.rb
|
215
|
+
- spec/cloud_sesame/query/ast/operator_spec.rb
|
216
|
+
- spec/cloud_sesame/query/ast/or_spec.rb
|
217
|
+
- spec/cloud_sesame/query/ast/root_spec.rb
|
218
|
+
- spec/cloud_sesame/query/ast/single_expression_operator_spec.rb
|
205
219
|
- spec/cloud_sesame/query/dsl/base_spec.rb
|
206
220
|
- spec/cloud_sesame/query/dsl/block_chaining_methods_spec.rb
|
207
221
|
- spec/cloud_sesame/query/dsl/block_methods_spec.rb
|