CloudSesame 0.1.6 → 0.2.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.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/cloud_sesame.gemspec +1 -1
  4. data/lib/cloud_sesame/domain/base.rb +9 -0
  5. data/lib/cloud_sesame/query/ast/and.rb +1 -1
  6. data/lib/cloud_sesame/query/ast/block_chaining_relation.rb +30 -0
  7. data/lib/cloud_sesame/query/ast/field_array.rb +31 -0
  8. data/lib/cloud_sesame/query/ast/literal.rb +15 -9
  9. data/lib/cloud_sesame/query/ast/multi_expression_operator.rb +26 -8
  10. data/lib/cloud_sesame/query/ast/near.rb +5 -10
  11. data/lib/cloud_sesame/query/ast/not.rb +11 -1
  12. data/lib/cloud_sesame/query/ast/operator.rb +26 -0
  13. data/lib/cloud_sesame/query/ast/or.rb +1 -1
  14. data/lib/cloud_sesame/query/ast/phrase.rb +2 -6
  15. data/lib/cloud_sesame/query/ast/prefix.rb +2 -6
  16. data/lib/cloud_sesame/query/ast/range_value.rb +1 -1
  17. data/lib/cloud_sesame/query/ast/root.rb +7 -3
  18. data/lib/cloud_sesame/query/ast/single_expression_operator.rb +16 -7
  19. data/lib/cloud_sesame/query/ast/term.rb +2 -6
  20. data/lib/cloud_sesame/query/ast/value.rb +5 -5
  21. data/lib/cloud_sesame/query/builder.rb +18 -8
  22. data/lib/cloud_sesame/query/dsl/base.rb +6 -6
  23. data/lib/cloud_sesame/query/dsl/block_chaining_methods.rb +26 -0
  24. data/lib/cloud_sesame/query/dsl/block_methods.rb +41 -0
  25. data/lib/cloud_sesame/query/dsl/field_array_methods.rb +70 -0
  26. data/lib/cloud_sesame/query/dsl/field_methods.rb +25 -0
  27. data/lib/cloud_sesame/query/dsl/{filter_query.rb → filter_query_methods.rb} +3 -9
  28. data/lib/cloud_sesame/query/dsl/operator_methods.rb +53 -0
  29. data/lib/cloud_sesame/query/dsl/{page.rb → page_methods.rb} +12 -1
  30. data/lib/cloud_sesame/query/dsl/{query.rb → query_methods.rb} +1 -1
  31. data/lib/cloud_sesame/query/dsl/{return.rb → return_methods.rb} +1 -1
  32. data/lib/cloud_sesame/query/dsl/{scope.rb → scope_methods.rb} +3 -3
  33. data/lib/cloud_sesame/query/dsl/{sort.rb → sort_methods.rb} +1 -1
  34. data/lib/cloud_sesame/query/dsl/{value.rb → value_methods.rb} +1 -4
  35. data/lib/cloud_sesame/query/{ast/leaf.rb → error/invalid_syntax.rb} +2 -2
  36. data/lib/cloud_sesame/query/fuzziness.rb +54 -0
  37. data/lib/cloud_sesame/query/node/page.rb +6 -6
  38. data/lib/cloud_sesame/query/node/query.rb +14 -10
  39. data/lib/cloud_sesame/query/node/sort.rb +1 -1
  40. data/lib/cloud_sesame.rb +19 -16
  41. data/spec/cloud_sesame/query/dsl/base_spec.rb +2 -2
  42. data/spec/cloud_sesame/query/dsl/block_chaining_methods_spec.rb +73 -0
  43. data/spec/cloud_sesame/query/dsl/block_methods_spec.rb +117 -0
  44. data/spec/cloud_sesame/query/dsl/field_array_methods_spec.rb +69 -0
  45. data/spec/cloud_sesame/query/dsl/field_methods_spec.rb +54 -0
  46. data/spec/cloud_sesame/query/node/query_spec.rb +16 -9
  47. data/spec/cloud_sesame_spec.rb +79 -68
  48. metadata +26 -34
  49. data/lib/cloud_sesame/query/ast/compound_array.rb +0 -77
  50. data/lib/cloud_sesame/query/ast/multi_branch.rb +0 -27
  51. data/lib/cloud_sesame/query/ast/single_branch.rb +0 -27
  52. data/lib/cloud_sesame/query/dsl/and.rb +0 -19
  53. data/lib/cloud_sesame/query/dsl/boost.rb +0 -20
  54. data/lib/cloud_sesame/query/dsl/literal.rb +0 -72
  55. data/lib/cloud_sesame/query/dsl/or.rb +0 -19
  56. data/spec/cloud_sesame/query/ast/and_spec.rb +0 -13
  57. data/spec/cloud_sesame/query/ast/literal_spec.rb +0 -37
  58. data/spec/cloud_sesame/query/ast/multi_branch_spec.rb +0 -65
  59. data/spec/cloud_sesame/query/ast/multi_expression_operator_spec.rb +0 -26
  60. data/spec/cloud_sesame/query/ast/or_spec.rb +0 -13
  61. data/spec/cloud_sesame/query/ast/root_spec.rb +0 -43
  62. data/spec/cloud_sesame/query/ast/value_spec.rb +0 -40
  63. data/spec/cloud_sesame/query/dsl/filter_query_spec.rb +0 -108
  64. data/spec/cloud_sesame/query/node/request_spec.rb +0 -71
@@ -0,0 +1,54 @@
1
+ require 'spec_helper'
2
+
3
+ module CloudSesame
4
+ module Query
5
+ module DSL
6
+ describe FieldMethods do
7
+
8
+ # Setup Test Class
9
+ class Product
10
+ include CloudSesame
11
+ define_cloudsearch {
12
+ field :name
13
+ field :tags
14
+ }
15
+ end
16
+
17
+ subject(:cloudsearch) { Product.cloudsearch }
18
+
19
+ after { subject.clear_request }
20
+
21
+ context 'when field is registered' do
22
+ it 'should create a literal node' do
23
+ expect(AST::Literal).to receive(:new).with(:name, "my name", {})
24
+ subject.name "my name"
25
+ end
26
+ it 'should belong to the dsl context' do
27
+ expect{ subject.name "name" }.to change{ subject.request.filter_query.root.children.size }.by(1)
28
+ end
29
+ it 'should return the dsl scope if called from the root' do
30
+ expect(subject.tags "men").to eq subject
31
+ end
32
+ it 'should return the field array if called from inside a block' do
33
+ array = nil
34
+ subject.and { array = tags("men") }
35
+ expect(array).to be_kind_of(AST::FieldArray)
36
+ expect(array).to include(AST::Literal)
37
+ end
38
+ it 'shoudl set the field array#field' do
39
+ array = nil
40
+ subject.and { array = tags("men") }
41
+ expect(array.field).to eq :tags
42
+ end
43
+ end
44
+
45
+ context 'when field is not registered' do
46
+ it 'should raise an error' do
47
+ expect{ subject.description("description") }.to raise_error NoMethodError
48
+ end
49
+ end
50
+
51
+ end
52
+ end
53
+ end
54
+ end
@@ -10,31 +10,38 @@ module CloudSesame
10
10
  describe '#initialize' do
11
11
  context 'when arguments passed in' do
12
12
  let(:arguments) {{ query: "" }}
13
- it 'should initalize an empty terms if query is empty' do
14
- expect(node.terms).to eq []
13
+ it 'should initalize an empty string if query is empty' do
14
+ expect(node.query).to eq ""
15
15
  end
16
- it 'should accept query as args and initialize terms' do
16
+ it 'should accept query as args and initialize query' do
17
17
  arguments[:query] = "hello world"
18
- expect(node.terms).to eq ["hello", "world"]
18
+ expect(node.query).to eq "hello world"
19
19
  end
20
20
  end
21
21
  context 'when arguments not passed in' do
22
22
  it 'should initialize an empty terms' do
23
- expect(node.terms).to eq []
23
+ expect(node.query).to eq nil
24
24
  end
25
25
  end
26
26
  end
27
27
 
28
28
  describe '#query' do
29
- it 'should return a string with all the terms added' do
30
- node.terms = ["term1", " term2", "term3 ", "-term4"]
29
+ it 'should return the query string' do
30
+ node.query = ["term1", "term2", "term3", "-term4"].join(' ')
31
31
  expect(node.query).to eq "term1 term2 term3 -term4"
32
32
  end
33
33
  end
34
34
 
35
- describe '#run' do
35
+ describe '#compile' do
36
+ it 'should parse with fuzziness if fuzziness is defined' do
37
+ fuzziness = Fuzziness.new
38
+ node = Query.new(fuzziness: fuzziness)
39
+ node.query = ["term1", "term2", "term3", "-term4"].join(' ')
40
+ expect(fuzziness).to receive(:parse).with(node.query)
41
+ node.compile
42
+ end
36
43
  it 'should return a serialized hash contains query string' do
37
- node.terms = ["term1", " term2", "term3 ", "-term4"]
44
+ node.query = ["term1", "term2", "term3", "-term4"].join(' ')
38
45
  expect(node.compile).to eq({ query: "term1 term2 term3 -term4" })
39
46
  end
40
47
  end
@@ -2,74 +2,85 @@ require 'spec_helper'
2
2
 
3
3
  describe CloudSesame do
4
4
 
5
- # # AWS initializer
6
- # require 'yaml'
7
- # YAML.load_file('aws.yml').each do |key, value|
8
- # ENV["AWS_#{ key }"] = value
9
- # end
10
-
11
- # # Domain Initializer /config/initializers/cloudsearch.rb
12
- # require 'cloud_sesame'
13
-
14
- # CloudSesame::Domain::Client.configure do |config|
15
- # config.access_key = ENV['AWS_ACCESS_KEY_ID']
16
- # config.secret_key = ENV['AWS_SECRET_ACCESS_KEY']
17
- # end
18
-
19
- # # Usage Example
20
- # class Product
21
- # include CloudSesame
22
-
23
- # define_cloudsearch do
24
- # # Product CloudSesame Config
25
- # config.endpoint = ENV['AWS_ENDPOINT']
26
- # config.region = ENV['AWS_REGION']
27
-
28
- # default_size 100
29
-
30
- # # describe_fuzziness do
31
- # # max_fuzziness 3
32
- # # min_word_length 6
33
- # # fuzzy_percentage 0.17
34
- # # end
35
-
36
- # field :searchable_text, query: { weight: 2 }
37
- # field :description, query: true
38
- # field :tags
39
-
40
- # field :affiliate_advertiser_ext_id, facet: { size: 50 }
41
- # field :currency, facet: true
42
- # field :discount_percentage, facet: { buckets: %w([10,100] [25,100] [50,100] [70,100]), method: 'interval' }
43
- # field :manufacturer_name, facet: { size: 50 }
44
- # field :price, facet: { buckets: %w([0,25] [25,50] [50,100] [100,200] [200,}), method: 'interval' }
45
- # field :category_string, facet: { sort: 'bucket', size: 10_000 }
46
- # field :created_at
47
-
48
- # scope :men_tag, ->(date) { created_at date }
49
- # scope :and_mens do
50
- # and! { tags "men"}
51
- # end
52
- # scope :men_stuff, -> { query("men").sort().page }
53
-
54
- # end
55
-
56
- # end
57
-
58
- # class NewProduct < Product
59
- # load_definition_from Product
60
-
61
- # define_cloudsearch do
62
- # field :searchable_text, query: { weight: 4 }
63
- # field :name, as: :text1
64
- # end
65
- # end
66
-
67
-
68
-
69
-
70
- # # Example Query
71
- # query = Product.cloudsearch.query("nike pants").create_at(Date.today)
72
-
5
+ # AWS initializer
6
+ require 'yaml'
7
+ YAML.load_file('aws.yml').each do |key, value|
8
+ ENV["AWS_#{ key }"] = value
9
+ end
10
+
11
+ # Domain Initializer /config/initializers/cloudsearch.rb
12
+ require 'cloud_sesame'
13
+
14
+ CloudSesame::Domain::Client.configure do |config|
15
+ config.access_key = ENV['AWS_ACCESS_KEY_ID']
16
+ config.secret_key = ENV['AWS_SECRET_ACCESS_KEY']
17
+ end
18
+
19
+ # Usage Example
20
+ class Product
21
+ include CloudSesame
22
+
23
+ define_cloudsearch do
24
+ # Product CloudSesame Config
25
+ config.endpoint = ENV['AWS_ENDPOINT']
26
+ config.region = ENV['AWS_REGION']
27
+
28
+ default_size 100
29
+
30
+ define_sloppiness 3
31
+
32
+ define_fuzziness do
33
+ max_fuzziness 3
34
+ min_char_size 6
35
+ fuzzy_percent 0.17
36
+ end
37
+
38
+ field :searchable_text, query: { weight: 2 }
39
+ field :description, query: true
40
+ field :tags
41
+
42
+ field :affiliate_advertiser_ext_id, facet: { size: 50 }
43
+ field :currency, facet: true
44
+ field :discount_percentage, facet: { buckets: %w([10,100] [25,100] [50,100] [70,100]), method: 'interval' }
45
+ field :manufacturer_name, facet: { size: 50 }
46
+ field :price, facet: { buckets: %w([0,25] [25,50] [50,100] [100,200] [200,}), method: 'interval' }
47
+ field :category_string, facet: { sort: 'bucket', size: 10_000 }
48
+ field :created_at
49
+
50
+ scope :men_tag, ->(date) { created_at date }
51
+ scope :and_mens do
52
+ and! { tags "men"}
53
+ end
54
+
55
+ end
56
+
57
+ end
58
+
59
+ class NewProduct < Product
60
+ load_definition_from Product
61
+
62
+ define_cloudsearch do
63
+ field :searchable_text, query: { weight: 4 }
64
+ field :name, as: :text1
65
+ end
66
+ end
67
+
68
+ # Example Query
69
+ query = Product.cloudsearch.query("children panasonic")
70
+ .and {
71
+ or!(boost: 2) {
72
+ # tags.not start_with "flash_deal"
73
+ tags.not.start_with "flash_deal"
74
+ # tags.near"sales"
75
+ # tags start_with("flash_deal"), near("sales")
76
+ }
77
+ or!.not {
78
+ currency "CAD", "EUR"
79
+ }
80
+ and! {
81
+ price r.gte(100).lt(200)
82
+ }
83
+ }.created_at(Date.today).description("wasup")
73
84
 
74
85
  # binding.pry
75
86
 
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.1.6
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Chu
@@ -108,38 +108,40 @@ files:
108
108
  - lib/cloud_sesame/domain/config.rb
109
109
  - lib/cloud_sesame/domain/context.rb
110
110
  - lib/cloud_sesame/query/ast/and.rb
111
- - lib/cloud_sesame/query/ast/compound_array.rb
111
+ - lib/cloud_sesame/query/ast/block_chaining_relation.rb
112
112
  - lib/cloud_sesame/query/ast/date_value.rb
113
- - lib/cloud_sesame/query/ast/leaf.rb
113
+ - lib/cloud_sesame/query/ast/field_array.rb
114
114
  - lib/cloud_sesame/query/ast/literal.rb
115
- - lib/cloud_sesame/query/ast/multi_branch.rb
116
115
  - lib/cloud_sesame/query/ast/multi_expression_operator.rb
117
116
  - lib/cloud_sesame/query/ast/near.rb
118
117
  - lib/cloud_sesame/query/ast/not.rb
118
+ - lib/cloud_sesame/query/ast/operator.rb
119
119
  - lib/cloud_sesame/query/ast/or.rb
120
120
  - lib/cloud_sesame/query/ast/phrase.rb
121
121
  - lib/cloud_sesame/query/ast/prefix.rb
122
122
  - lib/cloud_sesame/query/ast/range_value.rb
123
123
  - lib/cloud_sesame/query/ast/root.rb
124
- - lib/cloud_sesame/query/ast/single_branch.rb
125
124
  - lib/cloud_sesame/query/ast/single_expression_operator.rb
126
125
  - lib/cloud_sesame/query/ast/term.rb
127
126
  - lib/cloud_sesame/query/ast/value.rb
128
127
  - lib/cloud_sesame/query/builder.rb
129
- - lib/cloud_sesame/query/dsl/and.rb
130
128
  - lib/cloud_sesame/query/dsl/base.rb
131
- - lib/cloud_sesame/query/dsl/boost.rb
132
- - lib/cloud_sesame/query/dsl/filter_query.rb
133
- - lib/cloud_sesame/query/dsl/literal.rb
134
- - lib/cloud_sesame/query/dsl/or.rb
135
- - lib/cloud_sesame/query/dsl/page.rb
136
- - lib/cloud_sesame/query/dsl/query.rb
137
- - lib/cloud_sesame/query/dsl/return.rb
138
- - lib/cloud_sesame/query/dsl/scope.rb
139
- - lib/cloud_sesame/query/dsl/sort.rb
140
- - lib/cloud_sesame/query/dsl/value.rb
129
+ - lib/cloud_sesame/query/dsl/block_chaining_methods.rb
130
+ - lib/cloud_sesame/query/dsl/block_methods.rb
131
+ - lib/cloud_sesame/query/dsl/field_array_methods.rb
132
+ - lib/cloud_sesame/query/dsl/field_methods.rb
133
+ - lib/cloud_sesame/query/dsl/filter_query_methods.rb
134
+ - lib/cloud_sesame/query/dsl/operator_methods.rb
135
+ - lib/cloud_sesame/query/dsl/page_methods.rb
136
+ - lib/cloud_sesame/query/dsl/query_methods.rb
137
+ - lib/cloud_sesame/query/dsl/return_methods.rb
138
+ - lib/cloud_sesame/query/dsl/scope_methods.rb
139
+ - lib/cloud_sesame/query/dsl/sort_methods.rb
140
+ - lib/cloud_sesame/query/dsl/value_methods.rb
141
+ - lib/cloud_sesame/query/error/invalid_syntax.rb
141
142
  - lib/cloud_sesame/query/error/missing_operator_symbol.rb
142
143
  - lib/cloud_sesame/query/error/missing_query.rb
144
+ - lib/cloud_sesame/query/fuzziness.rb
143
145
  - lib/cloud_sesame/query/node/abstract.rb
144
146
  - lib/cloud_sesame/query/node/facet.rb
145
147
  - lib/cloud_sesame/query/node/filter_query.rb
@@ -154,16 +156,12 @@ files:
154
156
  - spec/abstract_object_spec.rb
155
157
  - spec/cloud_sesame/domain/base_spec.rb
156
158
  - spec/cloud_sesame/domain/context_spec.rb
157
- - spec/cloud_sesame/query/ast/and_spec.rb
158
- - spec/cloud_sesame/query/ast/literal_spec.rb
159
- - spec/cloud_sesame/query/ast/multi_branch_spec.rb
160
- - spec/cloud_sesame/query/ast/multi_expression_operator_spec.rb
161
- - spec/cloud_sesame/query/ast/or_spec.rb
162
- - spec/cloud_sesame/query/ast/root_spec.rb
163
- - spec/cloud_sesame/query/ast/value_spec.rb
164
159
  - spec/cloud_sesame/query/builder_spec.rb
165
160
  - spec/cloud_sesame/query/dsl/base_spec.rb
166
- - spec/cloud_sesame/query/dsl/filter_query_spec.rb
161
+ - spec/cloud_sesame/query/dsl/block_chaining_methods_spec.rb
162
+ - spec/cloud_sesame/query/dsl/block_methods_spec.rb
163
+ - spec/cloud_sesame/query/dsl/field_array_methods_spec.rb
164
+ - spec/cloud_sesame/query/dsl/field_methods_spec.rb
167
165
  - spec/cloud_sesame/query/dsl_spec.rb
168
166
  - spec/cloud_sesame/query/node/abstract_spec.rb
169
167
  - spec/cloud_sesame/query/node/facet_spec.rb
@@ -173,7 +171,6 @@ files:
173
171
  - spec/cloud_sesame/query/node/query_options_spec.rb
174
172
  - spec/cloud_sesame/query/node/query_parser_spec.rb
175
173
  - spec/cloud_sesame/query/node/query_spec.rb
176
- - spec/cloud_sesame/query/node/request_spec.rb
177
174
  - spec/cloud_sesame/query/node/sort_spec.rb
178
175
  - spec/cloud_sesame_spec.rb
179
176
  - spec/spec_helper.rb
@@ -205,16 +202,12 @@ test_files:
205
202
  - spec/abstract_object_spec.rb
206
203
  - spec/cloud_sesame/domain/base_spec.rb
207
204
  - spec/cloud_sesame/domain/context_spec.rb
208
- - spec/cloud_sesame/query/ast/and_spec.rb
209
- - spec/cloud_sesame/query/ast/literal_spec.rb
210
- - spec/cloud_sesame/query/ast/multi_branch_spec.rb
211
- - spec/cloud_sesame/query/ast/multi_expression_operator_spec.rb
212
- - spec/cloud_sesame/query/ast/or_spec.rb
213
- - spec/cloud_sesame/query/ast/root_spec.rb
214
- - spec/cloud_sesame/query/ast/value_spec.rb
215
205
  - spec/cloud_sesame/query/builder_spec.rb
216
206
  - spec/cloud_sesame/query/dsl/base_spec.rb
217
- - spec/cloud_sesame/query/dsl/filter_query_spec.rb
207
+ - spec/cloud_sesame/query/dsl/block_chaining_methods_spec.rb
208
+ - spec/cloud_sesame/query/dsl/block_methods_spec.rb
209
+ - spec/cloud_sesame/query/dsl/field_array_methods_spec.rb
210
+ - spec/cloud_sesame/query/dsl/field_methods_spec.rb
218
211
  - spec/cloud_sesame/query/dsl_spec.rb
219
212
  - spec/cloud_sesame/query/node/abstract_spec.rb
220
213
  - spec/cloud_sesame/query/node/facet_spec.rb
@@ -224,7 +217,6 @@ test_files:
224
217
  - spec/cloud_sesame/query/node/query_options_spec.rb
225
218
  - spec/cloud_sesame/query/node/query_parser_spec.rb
226
219
  - spec/cloud_sesame/query/node/query_spec.rb
227
- - spec/cloud_sesame/query/node/request_spec.rb
228
220
  - spec/cloud_sesame/query/node/sort_spec.rb
229
221
  - spec/cloud_sesame_spec.rb
230
222
  - spec/spec_helper.rb
@@ -1,77 +0,0 @@
1
- module CloudSesame
2
- module Query
3
- module AST
4
- class CompoundArray < Array
5
-
6
- attr_reader :scope, :field
7
-
8
- def for_field(field)
9
- parents.clear
10
- @field = field
11
- end
12
-
13
- def parents
14
- @parents ||= []
15
- end
16
-
17
- def scope_to(scope)
18
- @scope = scope
19
- return self
20
- end
21
-
22
- # SINGLE BRANCH OPERATOR
23
- # =======================================
24
-
25
- # NEAR
26
- # =======================================
27
- def near(*values)
28
- parents[1] = AST::Near
29
- insert_and_return_children values
30
- end
31
-
32
- alias_method :sloppy, :near
33
-
34
- # NOT
35
- # =======================================
36
- def not(*values)
37
- parents[0] = AST::Not
38
- insert_and_return_children values
39
- end
40
-
41
- alias_method :is_not, :not
42
-
43
- # PREFIX
44
- # =======================================
45
- def prefix(*values)
46
- parents[1] = AST::Prefix
47
- insert_and_return_children values
48
- end
49
-
50
- alias_method :start_with, :prefix
51
- alias_method :begin_with, :prefix
52
-
53
- def insert_and_return_children(values = [])
54
- values.each do |value|
55
- value.child.field = field if value.kind_of?(AST::SingleExpressionOperator)
56
- child = value.kind_of?(AST::SingleExpressionOperator) || value.kind_of?(AST::Literal) ? value : AST::Literal.new(field, value, options)
57
-
58
- current_scope = self
59
- parents.compact.each do |parent|
60
- current_scope << (node = parent.new scope.context)
61
- current_scope = node
62
- end
63
- current_scope << child
64
- end
65
- return self
66
- end
67
-
68
- private
69
-
70
- def options
71
- scope.context[:fields][field]
72
- end
73
-
74
- end
75
- end
76
- end
77
- end
@@ -1,27 +0,0 @@
1
- module CloudSesame
2
- module Query
3
- module AST
4
- class MultiBranch
5
- include DSL::Base
6
- include DSL::FilterQuery
7
- include DSL::Scope
8
-
9
- attr_reader :context
10
-
11
- def initialize(context, &block)
12
- @context = context
13
- instance_eval &block if block_given?
14
- end
15
-
16
- def children
17
- @children ||= CompoundArray.new.scope_to self
18
- end
19
-
20
- def compile_children
21
- children.map(&:compile).join(' ')
22
- end
23
-
24
- end
25
- end
26
- end
27
- end
@@ -1,27 +0,0 @@
1
- module CloudSesame
2
- module Query
3
- module AST
4
- class SingleBranch
5
- attr_accessor :child
6
- attr_reader :context
7
-
8
- def initialize(context, &block)
9
- @context = context
10
- instance_eval &block if block_given?
11
- end
12
-
13
- def child=(object)
14
- if object.kind_of? Literal
15
- (object.options[:excluded] ||= []) << object.options[:included].delete(object.value)
16
- end
17
- @child = object
18
- end
19
-
20
- def <<(object)
21
- self.child= object
22
- end
23
-
24
- end
25
- end
26
- end
27
- end
@@ -1,19 +0,0 @@
1
- module CloudSesame
2
- module Query
3
- module DSL
4
- module And
5
-
6
- # CLAUSE: AND
7
- # =========================================
8
- def and(&block)
9
- method_scope.children << AST::And.new(method_context, &block)
10
- method_return
11
- end
12
-
13
- alias_method :all, :and
14
- alias_method :and!, :and
15
-
16
- end
17
- end
18
- end
19
- end
@@ -1,20 +0,0 @@
1
- module CloudSesame
2
- module Query
3
- module DSL
4
- module Boost
5
-
6
- def compile_boost
7
- " boost=#{ @boost }" if @boost
8
- end
9
-
10
- def boost(value)
11
- @boost = value.to_i
12
- return self
13
- end
14
-
15
- alias_method :weight, :boost
16
-
17
- end
18
- end
19
- end
20
- end
@@ -1,72 +0,0 @@
1
- module CloudSesame
2
- module Query
3
- module DSL
4
- module Literal
5
-
6
- # LITERAL: creates a single LITERAL node
7
- # =======================================
8
- def literal(value)
9
- field = method_scope.children.field
10
- AST::Literal.new field, value, fields[field]
11
- end
12
-
13
- alias_method :l, :literal
14
- alias_method :field, :literal
15
-
16
- # NEAR: creates a single NEAR node
17
- # =======================================
18
- def near(value)
19
- create_literal_with_operator AST::Near, value
20
- end
21
-
22
- alias_method :n, :near
23
- alias_method :sloppy, :near
24
-
25
- # PREFIX: creates a single PREFIX node
26
- # =======================================
27
- def prefix(value)
28
- create_literal_with_operator AST::Prefix, value
29
- end
30
-
31
- alias_method :p, :prefix
32
- alias_method :start_with, :prefix
33
- alias_method :begin_with, :prefix
34
-
35
- # PHRASE: creates a single PHRASE node
36
- # =======================================
37
- def phrase(value)
38
- create_literal_with_operator AST::Phrase, value
39
- end
40
-
41
- # TERM: creates a single TERM node
42
- # =======================================
43
- def term(value)
44
- create_literal_with_operator AST::Term, value
45
- end
46
-
47
- private
48
-
49
- def fields
50
- method_context[:fields]
51
- end
52
-
53
- def create_literal_with_operator(klass, value)
54
- field = method_scope.children.field
55
- literal = AST::Literal.new field, value, fields[field]
56
- (node = klass.new method_context) << literal
57
- node
58
- end
59
-
60
- def method_missing(field, *values, &block)
61
- if fields && (options = fields[field])
62
- method_scope.children.for_field field
63
- method_scope.children.insert_and_return_children values
64
- else
65
- super
66
- end
67
- end
68
-
69
- end
70
- end
71
- end
72
- end
@@ -1,19 +0,0 @@
1
- module CloudSesame
2
- module Query
3
- module DSL
4
- module Or
5
-
6
- # CLAUSE: OR
7
- # =========================================
8
- def or(&block)
9
- method_scope.children << AST::Or.new(method_context, &block)
10
- method_return
11
- end
12
-
13
- alias_method :any, :or
14
- alias_method :or!, :or
15
-
16
- end
17
- end
18
- end
19
- end
@@ -1,13 +0,0 @@
1
- require "spec_helper"
2
-
3
- module CloudSesame
4
- module Query
5
- module AST
6
- describe And do
7
- it 'should set the symbol to :and' do
8
- expect(And.symbol).to eq :and
9
- end
10
- end
11
- end
12
- end
13
- end