CloudSesame 0.6.8 → 0.7.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 (101) hide show
  1. checksums.yaml +4 -4
  2. data/.editorconfig +12 -0
  3. data/.gitignore +1 -1
  4. data/Gemfile.lock +13 -13
  5. data/Guardfile +1 -0
  6. data/cloud_sesame.gemspec +2 -2
  7. data/coverage/.last_run.json +1 -1
  8. data/coverage/.resultset.json +679 -591
  9. data/lib/cloud_sesame/config/credential.rb +6 -6
  10. data/lib/cloud_sesame/context.rb +0 -5
  11. data/lib/cloud_sesame/domain/base.rb +147 -128
  12. data/lib/cloud_sesame/domain/client.rb +25 -25
  13. data/lib/cloud_sesame/domain/client_module/caching/base.rb +19 -23
  14. data/lib/cloud_sesame/domain/client_module/caching/no_cache.rb +11 -11
  15. data/lib/cloud_sesame/domain/client_module/caching/rails_cache.rb +32 -28
  16. data/lib/cloud_sesame/domain/client_module/caching.rb +19 -28
  17. data/lib/cloud_sesame/domain/client_module/retry.rb +6 -6
  18. data/lib/cloud_sesame/domain/config.rb +6 -6
  19. data/lib/cloud_sesame/query/ast/abstract/multi_expression_operator.rb +37 -0
  20. data/lib/cloud_sesame/query/ast/abstract/operator.rb +27 -0
  21. data/lib/cloud_sesame/query/ast/abstract/single_expression_operator.rb +39 -0
  22. data/lib/cloud_sesame/query/ast/abstract/value.rb +88 -0
  23. data/lib/cloud_sesame/query/ast/and.rb +1 -1
  24. data/lib/cloud_sesame/query/ast/date_value.rb +19 -3
  25. data/lib/cloud_sesame/query/ast/literal.rb +13 -28
  26. data/lib/cloud_sesame/query/ast/near.rb +4 -4
  27. data/lib/cloud_sesame/query/ast/not.rb +6 -7
  28. data/lib/cloud_sesame/query/ast/numeric_value.rb +20 -12
  29. data/lib/cloud_sesame/query/ast/or.rb +1 -1
  30. data/lib/cloud_sesame/query/ast/phrase.rb +1 -1
  31. data/lib/cloud_sesame/query/ast/prefix.rb +1 -1
  32. data/lib/cloud_sesame/query/ast/range_value.rb +40 -39
  33. data/lib/cloud_sesame/query/ast/root.rb +2 -6
  34. data/lib/cloud_sesame/query/ast/string_value.rb +26 -0
  35. data/lib/cloud_sesame/query/ast/term.rb +1 -1
  36. data/lib/cloud_sesame/query/ast/value.rb +25 -54
  37. data/lib/cloud_sesame/query/builder.rb +83 -54
  38. data/lib/cloud_sesame/query/domain/block.rb +3 -1
  39. data/lib/cloud_sesame/query/dsl/applied_filter_query.rb +14 -23
  40. data/lib/cloud_sesame/query/dsl/field_accessors.rb +25 -22
  41. data/lib/cloud_sesame/query/dsl/field_array_methods.rb +1 -1
  42. data/lib/cloud_sesame/query/dsl/inspect_method.rb +31 -0
  43. data/lib/cloud_sesame/query/dsl/sort_methods.rb +5 -4
  44. data/lib/cloud_sesame/query/node/abstract.rb +1 -2
  45. data/lib/cloud_sesame/query/node/facet.rb +1 -5
  46. data/lib/cloud_sesame/query/node/filter_query.rb +15 -2
  47. data/lib/cloud_sesame/query/node/fuzziness.rb +4 -3
  48. data/lib/cloud_sesame/query/node/page.rb +2 -2
  49. data/lib/cloud_sesame/query/node/query.rb +4 -17
  50. data/lib/cloud_sesame/query/node/query_options.rb +6 -16
  51. data/lib/cloud_sesame/query/node/query_options_field.rb +3 -1
  52. data/lib/cloud_sesame/query/node/query_parser.rb +8 -10
  53. data/lib/cloud_sesame/query/node/request.rb +57 -31
  54. data/lib/cloud_sesame/query/node/sort.rb +25 -11
  55. data/lib/cloud_sesame.rb +15 -12
  56. data/lib/{abstract_object.rb → services/abstract_object.rb} +0 -0
  57. data/lib/services/class_specific.rb +44 -0
  58. data/lib/services/lazy_object.rb +19 -0
  59. data/spec/cloud_sesame/domain/base_spec.rb +26 -11
  60. data/spec/cloud_sesame/domain/client_module/caching/base_spec.rb +2 -1
  61. data/spec/cloud_sesame/domain/client_module/caching/no_cache_spec.rb +2 -3
  62. data/spec/cloud_sesame/domain/client_module/caching/rails_cache_spec.rb +6 -6
  63. data/spec/cloud_sesame/domain/client_module/caching_spec.rb +33 -32
  64. data/spec/cloud_sesame/query/ast/abstract/multi_expression_operator_spec.rb +67 -0
  65. data/spec/cloud_sesame/query/ast/abstract/operator_spec.rb +29 -0
  66. data/spec/cloud_sesame/query/ast/abstract/single_expression_operator_spec.rb +70 -0
  67. data/spec/cloud_sesame/query/ast/abstract/value_spec.rb +118 -0
  68. data/spec/cloud_sesame/query/ast/and_spec.rb +1 -1
  69. data/spec/cloud_sesame/query/ast/or_spec.rb +1 -1
  70. data/spec/cloud_sesame/query/ast/range_value_spec.rb +5 -11
  71. data/spec/cloud_sesame/query/builder_spec.rb +10 -4
  72. data/spec/cloud_sesame/query/domain/block_spec.rb +15 -8
  73. data/spec/cloud_sesame/query/dsl/{block_methods_spec.rb → block_styled_operators_spec.rb} +0 -0
  74. data/spec/cloud_sesame/query/dsl/field_accessors_spec.rb +88 -50
  75. data/spec/cloud_sesame/query/dsl/field_array_methods_spec.rb +0 -2
  76. data/spec/cloud_sesame/query/node/facet_spec.rb +1 -15
  77. data/spec/cloud_sesame/query/node/filter_query_spec.rb +16 -2
  78. data/spec/cloud_sesame/query/node/page_spec.rb +3 -2
  79. data/spec/cloud_sesame/query/node/query_options_spec.rb +1 -1
  80. data/spec/cloud_sesame/query/node/query_parser_spec.rb +1 -7
  81. data/spec/cloud_sesame/query/node/query_spec.rb +10 -28
  82. data/spec/cloud_sesame/query/node/sort_spec.rb +19 -28
  83. data/spec/cloud_sesame_spec.rb +2 -156
  84. data/spec/helpers/benchmark_helper.rb +12 -0
  85. data/spec/integration/filter_query_spec.rb +0 -0
  86. data/spec/profiling_spec.rb +155 -0
  87. data/spec/{abstract_object_spec.rb → services/abstract_object_spec.rb} +0 -0
  88. data/spec/services/class_specific_spec.rb +135 -0
  89. data/spec/spec_helper.rb +3 -0
  90. metadata +32 -22
  91. data/lib/active_support/core_ext/object/deep_dup.rb +0 -53
  92. data/lib/active_support/core_ext/object/duplicable.rb +0 -98
  93. data/lib/cloud_sesame/query/ast/multi_expression_operator.rb +0 -35
  94. data/lib/cloud_sesame/query/ast/operator.rb +0 -25
  95. data/lib/cloud_sesame/query/ast/single_expression_operator.rb +0 -35
  96. data/lib/cloud_sesame/query/scope.rb +0 -21
  97. data/profiler.rb +0 -91
  98. data/spec/cloud_sesame/query/ast/multi_expression_operator_spec.rb +0 -76
  99. data/spec/cloud_sesame/query/ast/operator_spec.rb +0 -29
  100. data/spec/cloud_sesame/query/ast/single_expression_operator_spec.rb +0 -78
  101. data/spec/context_spec.rb +0 -17
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.6.8
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Chu
@@ -16,7 +16,7 @@ authors:
16
16
  autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
- date: 2016-02-16 00:00:00.000000000 Z
19
+ date: 2016-03-13 00:00:00.000000000 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  name: aws-sdk
@@ -136,6 +136,7 @@ executables: []
136
136
  extensions: []
137
137
  extra_rdoc_files: []
138
138
  files:
139
+ - ".editorconfig"
139
140
  - ".gitignore"
140
141
  - ".rspec"
141
142
  - ".rubocop.yml"
@@ -148,9 +149,6 @@ files:
148
149
  - coverage/.last_run.json
149
150
  - coverage/.resultset.json
150
151
  - coverage/.resultset.json.lock
151
- - lib/abstract_object.rb
152
- - lib/active_support/core_ext/object/deep_dup.rb
153
- - lib/active_support/core_ext/object/duplicable.rb
154
152
  - lib/cloud_sesame.rb
155
153
  - lib/cloud_sesame/config/credential.rb
156
154
  - lib/cloud_sesame/context.rb
@@ -163,21 +161,23 @@ files:
163
161
  - lib/cloud_sesame/domain/client_module/retry.rb
164
162
  - lib/cloud_sesame/domain/config.rb
165
163
  - lib/cloud_sesame/domain/error/caching.rb
164
+ - lib/cloud_sesame/query/ast/abstract/multi_expression_operator.rb
165
+ - lib/cloud_sesame/query/ast/abstract/operator.rb
166
+ - lib/cloud_sesame/query/ast/abstract/single_expression_operator.rb
167
+ - lib/cloud_sesame/query/ast/abstract/value.rb
166
168
  - lib/cloud_sesame/query/ast/and.rb
167
169
  - lib/cloud_sesame/query/ast/date_value.rb
168
170
  - lib/cloud_sesame/query/ast/field_array.rb
169
171
  - lib/cloud_sesame/query/ast/literal.rb
170
- - lib/cloud_sesame/query/ast/multi_expression_operator.rb
171
172
  - lib/cloud_sesame/query/ast/near.rb
172
173
  - lib/cloud_sesame/query/ast/not.rb
173
174
  - lib/cloud_sesame/query/ast/numeric_value.rb
174
- - lib/cloud_sesame/query/ast/operator.rb
175
175
  - lib/cloud_sesame/query/ast/or.rb
176
176
  - lib/cloud_sesame/query/ast/phrase.rb
177
177
  - lib/cloud_sesame/query/ast/prefix.rb
178
178
  - lib/cloud_sesame/query/ast/range_value.rb
179
179
  - lib/cloud_sesame/query/ast/root.rb
180
- - lib/cloud_sesame/query/ast/single_expression_operator.rb
180
+ - lib/cloud_sesame/query/ast/string_value.rb
181
181
  - lib/cloud_sesame/query/ast/term.rb
182
182
  - lib/cloud_sesame/query/ast/value.rb
183
183
  - lib/cloud_sesame/query/builder.rb
@@ -189,6 +189,7 @@ files:
189
189
  - lib/cloud_sesame/query/dsl/block_styled_operators.rb
190
190
  - lib/cloud_sesame/query/dsl/field_accessors.rb
191
191
  - lib/cloud_sesame/query/dsl/field_array_methods.rb
192
+ - lib/cloud_sesame/query/dsl/inspect_method.rb
192
193
  - lib/cloud_sesame/query/dsl/operators.rb
193
194
  - lib/cloud_sesame/query/dsl/page_methods.rb
194
195
  - lib/cloud_sesame/query/dsl/query_methods.rb
@@ -214,9 +215,9 @@ files:
214
215
  - lib/cloud_sesame/query/node/return.rb
215
216
  - lib/cloud_sesame/query/node/sloppiness.rb
216
217
  - lib/cloud_sesame/query/node/sort.rb
217
- - lib/cloud_sesame/query/scope.rb
218
- - profiler.rb
219
- - spec/abstract_object_spec.rb
218
+ - lib/services/abstract_object.rb
219
+ - lib/services/class_specific.rb
220
+ - lib/services/lazy_object.rb
220
221
  - spec/cloud_sesame/config/credential_spec.rb
221
222
  - spec/cloud_sesame/domain/base_spec.rb
222
223
  - spec/cloud_sesame/domain/client_module/caching/base_spec.rb
@@ -224,17 +225,18 @@ files:
224
225
  - spec/cloud_sesame/domain/client_module/caching/rails_cache_spec.rb
225
226
  - spec/cloud_sesame/domain/client_module/caching_spec.rb
226
227
  - spec/cloud_sesame/domain/client_spec.rb
228
+ - spec/cloud_sesame/query/ast/abstract/multi_expression_operator_spec.rb
229
+ - spec/cloud_sesame/query/ast/abstract/operator_spec.rb
230
+ - spec/cloud_sesame/query/ast/abstract/single_expression_operator_spec.rb
231
+ - spec/cloud_sesame/query/ast/abstract/value_spec.rb
227
232
  - spec/cloud_sesame/query/ast/and_spec.rb
228
- - spec/cloud_sesame/query/ast/multi_expression_operator_spec.rb
229
233
  - spec/cloud_sesame/query/ast/numeric_value_spec.rb
230
- - spec/cloud_sesame/query/ast/operator_spec.rb
231
234
  - spec/cloud_sesame/query/ast/or_spec.rb
232
235
  - spec/cloud_sesame/query/ast/range_value_spec.rb
233
236
  - spec/cloud_sesame/query/ast/root_spec.rb
234
- - spec/cloud_sesame/query/ast/single_expression_operator_spec.rb
235
237
  - spec/cloud_sesame/query/builder_spec.rb
236
238
  - spec/cloud_sesame/query/domain/block_spec.rb
237
- - spec/cloud_sesame/query/dsl/block_methods_spec.rb
239
+ - spec/cloud_sesame/query/dsl/block_styled_operators_spec.rb
238
240
  - spec/cloud_sesame/query/dsl/field_accessors_spec.rb
239
241
  - spec/cloud_sesame/query/dsl/field_array_methods_spec.rb
240
242
  - spec/cloud_sesame/query/node/abstract_spec.rb
@@ -247,7 +249,11 @@ files:
247
249
  - spec/cloud_sesame/query/node/query_spec.rb
248
250
  - spec/cloud_sesame/query/node/sort_spec.rb
249
251
  - spec/cloud_sesame_spec.rb
250
- - spec/context_spec.rb
252
+ - spec/helpers/benchmark_helper.rb
253
+ - spec/integration/filter_query_spec.rb
254
+ - spec/profiling_spec.rb
255
+ - spec/services/abstract_object_spec.rb
256
+ - spec/services/class_specific_spec.rb
251
257
  - spec/spec_helper.rb
252
258
  homepage: https://github.com/47colborne/cloud-sesame
253
259
  licenses:
@@ -274,7 +280,6 @@ signing_key:
274
280
  specification_version: 4
275
281
  summary: AWS CloudSearch Query DSL
276
282
  test_files:
277
- - spec/abstract_object_spec.rb
278
283
  - spec/cloud_sesame/config/credential_spec.rb
279
284
  - spec/cloud_sesame/domain/base_spec.rb
280
285
  - spec/cloud_sesame/domain/client_module/caching/base_spec.rb
@@ -282,17 +287,18 @@ test_files:
282
287
  - spec/cloud_sesame/domain/client_module/caching/rails_cache_spec.rb
283
288
  - spec/cloud_sesame/domain/client_module/caching_spec.rb
284
289
  - spec/cloud_sesame/domain/client_spec.rb
290
+ - spec/cloud_sesame/query/ast/abstract/multi_expression_operator_spec.rb
291
+ - spec/cloud_sesame/query/ast/abstract/operator_spec.rb
292
+ - spec/cloud_sesame/query/ast/abstract/single_expression_operator_spec.rb
293
+ - spec/cloud_sesame/query/ast/abstract/value_spec.rb
285
294
  - spec/cloud_sesame/query/ast/and_spec.rb
286
- - spec/cloud_sesame/query/ast/multi_expression_operator_spec.rb
287
295
  - spec/cloud_sesame/query/ast/numeric_value_spec.rb
288
- - spec/cloud_sesame/query/ast/operator_spec.rb
289
296
  - spec/cloud_sesame/query/ast/or_spec.rb
290
297
  - spec/cloud_sesame/query/ast/range_value_spec.rb
291
298
  - spec/cloud_sesame/query/ast/root_spec.rb
292
- - spec/cloud_sesame/query/ast/single_expression_operator_spec.rb
293
299
  - spec/cloud_sesame/query/builder_spec.rb
294
300
  - spec/cloud_sesame/query/domain/block_spec.rb
295
- - spec/cloud_sesame/query/dsl/block_methods_spec.rb
301
+ - spec/cloud_sesame/query/dsl/block_styled_operators_spec.rb
296
302
  - spec/cloud_sesame/query/dsl/field_accessors_spec.rb
297
303
  - spec/cloud_sesame/query/dsl/field_array_methods_spec.rb
298
304
  - spec/cloud_sesame/query/node/abstract_spec.rb
@@ -305,5 +311,9 @@ test_files:
305
311
  - spec/cloud_sesame/query/node/query_spec.rb
306
312
  - spec/cloud_sesame/query/node/sort_spec.rb
307
313
  - spec/cloud_sesame_spec.rb
308
- - spec/context_spec.rb
314
+ - spec/helpers/benchmark_helper.rb
315
+ - spec/integration/filter_query_spec.rb
316
+ - spec/profiling_spec.rb
317
+ - spec/services/abstract_object_spec.rb
318
+ - spec/services/class_specific_spec.rb
309
319
  - spec/spec_helper.rb
@@ -1,53 +0,0 @@
1
- require 'active_support/core_ext/object/duplicable'
2
-
3
- class Object
4
- # Returns a deep copy of object if it's duplicable. If it's
5
- # not duplicable, returns +self+.
6
- #
7
- # object = Object.new
8
- # dup = object.deep_dup
9
- # dup.instance_variable_set(:@a, 1)
10
- #
11
- # object.instance_variable_defined?(:@a) # => false
12
- # dup.instance_variable_defined?(:@a) # => true
13
- def deep_dup
14
- duplicable? ? dup : self
15
- end
16
- end
17
-
18
- class Array
19
- # Returns a deep copy of array.
20
- #
21
- # array = [1, [2, 3]]
22
- # dup = array.deep_dup
23
- # dup[1][2] = 4
24
- #
25
- # array[1][2] # => nil
26
- # dup[1][2] # => 4
27
- def deep_dup
28
- map(&:deep_dup)
29
- end
30
- end
31
-
32
- class Hash
33
- # Returns a deep copy of hash.
34
- #
35
- # hash = { a: { b: 'b' } }
36
- # dup = hash.deep_dup
37
- # dup[:a][:c] = 'c'
38
- #
39
- # hash[:a][:c] # => nil
40
- # dup[:a][:c] # => "c"
41
- def deep_dup
42
- hash = dup
43
- each_pair do |key, value|
44
- if key.frozen? && ::String === key
45
- hash[key] = value.deep_dup
46
- else
47
- hash.delete(key)
48
- hash[key.deep_dup] = value.deep_dup
49
- end
50
- end
51
- hash
52
- end
53
- end
@@ -1,98 +0,0 @@
1
- #--
2
- # Most objects are cloneable, but not all. For example you can't dup +nil+:
3
- #
4
- # nil.dup # => TypeError: can't dup NilClass
5
- #
6
- # Classes may signal their instances are not duplicable removing +dup+/+clone+
7
- # or raising exceptions from them. So, to dup an arbitrary object you normally
8
- # use an optimistic approach and are ready to catch an exception, say:
9
- #
10
- # arbitrary_object.dup rescue object
11
- #
12
- # Rails dups objects in a few critical spots where they are not that arbitrary.
13
- # That rescue is very expensive (like 40 times slower than a predicate), and it
14
- # is often triggered.
15
- #
16
- # That's why we hardcode the following cases and check duplicable? instead of
17
- # using that rescue idiom.
18
- #++
19
- class Object
20
- # Can you safely dup this object?
21
- #
22
- # False for +nil+, +false+, +true+, symbol, number, method objects;
23
- # true otherwise.
24
- def duplicable?
25
- true
26
- end
27
- end
28
-
29
- class NilClass
30
- # +nil+ is not duplicable:
31
- #
32
- # nil.duplicable? # => false
33
- # nil.dup # => TypeError: can't dup NilClass
34
- def duplicable?
35
- false
36
- end
37
- end
38
-
39
- class FalseClass
40
- # +false+ is not duplicable:
41
- #
42
- # false.duplicable? # => false
43
- # false.dup # => TypeError: can't dup FalseClass
44
- def duplicable?
45
- false
46
- end
47
- end
48
-
49
- class TrueClass
50
- # +true+ is not duplicable:
51
- #
52
- # true.duplicable? # => false
53
- # true.dup # => TypeError: can't dup TrueClass
54
- def duplicable?
55
- false
56
- end
57
- end
58
-
59
- class Symbol
60
- # Symbols are not duplicable:
61
- #
62
- # :my_symbol.duplicable? # => false
63
- # :my_symbol.dup # => TypeError: can't dup Symbol
64
- def duplicable?
65
- false
66
- end
67
- end
68
-
69
- class Numeric
70
- # Numbers are not duplicable:
71
- #
72
- # 3.duplicable? # => false
73
- # 3.dup # => TypeError: can't dup Fixnum
74
- def duplicable?
75
- false
76
- end
77
- end
78
-
79
- require 'bigdecimal'
80
- class BigDecimal
81
- # BigDecimals are duplicable:
82
- #
83
- # BigDecimal.new("1.2").duplicable? # => true
84
- # BigDecimal.new("1.2").dup # => #<BigDecimal:...,'0.12E1',18(18)>
85
- def duplicable?
86
- true
87
- end
88
- end
89
-
90
- class Method
91
- # Methods are not duplicable:
92
- #
93
- # method(:puts).duplicable? # => false
94
- # method(:puts).dup # => TypeError: allocator undefined for Method
95
- def duplicable?
96
- false
97
- end
98
- end
@@ -1,35 +0,0 @@
1
- module CloudSesame
2
- module Query
3
- module AST
4
- class MultiExpressionOperator < Operator
5
-
6
- def children
7
- @children ||= create_children
8
- end
9
-
10
- def compile
11
- if !children.empty? && (compiled = children.compile) && !compiled.empty?
12
- "(#{ symbol }#{ boost } #{ compiled })"
13
- end
14
- end
15
-
16
- def <<(object)
17
- children << object
18
- end
19
-
20
- def is_excluded
21
- children.map(&:is_excluded)
22
- end
23
-
24
- private
25
-
26
- def create_children
27
- array = FieldArray.new
28
- array._scope = self
29
- array
30
- end
31
-
32
- end
33
- end
34
- end
35
- end
@@ -1,25 +0,0 @@
1
- module CloudSesame
2
- module Query
3
- module AST
4
- class Operator
5
- SYMBOL = nil
6
-
7
- attr_reader :context, :options
8
-
9
- def initialize(context, options = {})
10
- @context = context
11
- @options = options
12
- end
13
-
14
- def boost
15
- " boost=#{ options[:boost] }" if options[:boost]
16
- end
17
-
18
- def symbol
19
- self.class::SYMBOL
20
- end
21
-
22
- end
23
- end
24
- end
25
- end
@@ -1,35 +0,0 @@
1
- module CloudSesame
2
- module Query
3
- module AST
4
- class SingleExpressionOperator < Operator
5
-
6
- DETAILED = false
7
-
8
- attr_accessor :child
9
-
10
- def is_for(field, options = {})
11
- child.is_for field, options if child
12
- end
13
-
14
- def is_excluded
15
- child.is_excluded if child
16
- end
17
-
18
- def <<(object)
19
- self.child = object
20
- end
21
-
22
- def compile(_detailed = nil)
23
- if child && (compiled = child.compile operator_detailed) && !compiled.empty?
24
- "(#{ symbol }#{ boost } #{ compiled })"
25
- end
26
- end
27
-
28
- def operator_detailed
29
- self.class::DETAILED
30
- end
31
-
32
- end
33
- end
34
- end
35
- end
@@ -1,21 +0,0 @@
1
- module CloudSesame
2
- module Query
3
- class Scope
4
-
5
- attr_reader :_scope, :_return
6
-
7
- def initialize(_scope, _return)
8
- @_scope, @_return = _scope, _return
9
- end
10
-
11
- def _context
12
- _scope.context
13
- end
14
-
15
- def <<(object)
16
- _scope << object
17
- end
18
-
19
- end
20
- end
21
- end
data/profiler.rb DELETED
@@ -1,91 +0,0 @@
1
- require 'profile'
2
- require 'yaml'
3
- require_relative './cloud_sesame.rb'
4
-
5
- # AWS initializer
6
- # =======================================================
7
-
8
- YAML.load_file('aws.yml').each do |key, value|
9
- ENV["AWS_#{ key }"] = value
10
- end
11
-
12
- # Domain Initializer /config/initializers/cloudsearch.rb
13
- # =======================================================
14
-
15
-
16
- CloudSesame::Domain::Client.configure do |config|
17
- config.access_key = ENV['AWS_ACCESS_KEY_ID']
18
- config.secret_key = ENV['AWS_SECRET_ACCESS_KEY']
19
- end
20
-
21
- # Usage Example
22
- # =======================================================
23
- class Product
24
- include CloudSesame
25
-
26
- define_cloudsearch do
27
- # Product CloudSesame Config
28
- config.endpoint = ENV['AWS_ENDPOINT']
29
- config.region = ENV['AWS_REGION']
30
-
31
- default_size 100
32
-
33
- define_sloppiness 3
34
-
35
- define_fuzziness do
36
- max_fuzziness 3
37
- min_char_size 6
38
- fuzzy_percent 0.17
39
- end
40
-
41
- field :searchable_text, query: { weight: 2 }
42
- field :description, query: true
43
- field :tags
44
-
45
- field :affiliate_advertiser_ext_id, facet: { size: 50 }
46
- field :currency, facet: true
47
- field :discount_percentage, facet: { buckets: %w([10,100] [25,100] [50,100] [70,100]), method: 'interval' }
48
- field :manufacturer_name, facet: { size: 50 }
49
- field :price, facet: { buckets: %w([0,25] [25,50] [50,100] [100,200] [200,}), method: 'interval' }
50
- field :category_string, facet: { sort: 'bucket', size: 10_000 }
51
- field :created_at, default: -> { gt Date.today }
52
-
53
- scope :shoes_by_brand, ->(brand = nil) { query("shoes").and { manufacturer_name brand } if brand }
54
- scope :and_mens do
55
- and! { tags "men"}
56
- end
57
-
58
- end
59
-
60
- end
61
-
62
- def query
63
- query = Product.cloudsearch
64
- .query("black jacket")
65
- .sort(price: :asc)
66
- .page(1)
67
- .size(1000)
68
- .or {
69
- or! {
70
- tags("men", "women")
71
- }
72
- tags.not start_with("automotive"), "home"
73
- and! {
74
- price gt(100).lt(500)
75
- created_at gt(Date.today - 7)
76
- currency "CAD", "USD"
77
- }
78
-
79
- }.or {
80
- and! {
81
- tags "outdoor"
82
- price gt(200).lt(1000)
83
- created_at gt(Date.today - 7)
84
- currency "CAD", "USD"
85
- }
86
- }
87
-
88
- query.compile
89
- end
90
-
91
- query
@@ -1,76 +0,0 @@
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
@@ -1,29 +0,0 @@
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 '#boost' do
13
- context 'given boost option' do
14
- let(:options) {{ boost: 2 }}
15
- it 'should return an compiled boost value' do
16
- expect(subject.boost).to eq " boost=2"
17
- end
18
- end
19
- context 'given no boost option' do
20
- it 'should return nothing' do
21
- expect(subject.boost).to eq nil
22
- end
23
- end
24
- end
25
-
26
- end
27
- end
28
- end
29
- end