CloudSesame 0.2.4 → 0.2.5
Sign up to get free protection for your applications and to get access to all the features.
- 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
|