CloudSesame 0.7.5 → 0.7.7

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 (41) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +14 -12
  3. data/Guardfile +2 -2
  4. data/cloud_sesame.gemspec +2 -2
  5. data/coverage/.last_run.json +1 -1
  6. data/coverage/.resultset.json +1363 -248
  7. data/lib/cloud_sesame/domain/base.rb +1 -1
  8. data/lib/cloud_sesame/query/ast/abstract/multi_expression_operator.rb +3 -4
  9. data/lib/cloud_sesame/query/ast/abstract/value.rb +10 -2
  10. data/lib/cloud_sesame/query/ast/date_value.rb +1 -4
  11. data/lib/cloud_sesame/query/ast/literal.rb +20 -12
  12. data/lib/cloud_sesame/query/ast/{field_array.rb → multi_expression_operator_children.rb} +8 -2
  13. data/lib/cloud_sesame/query/ast/not.rb +1 -7
  14. data/lib/cloud_sesame/query/ast/range_value.rb +43 -28
  15. data/lib/cloud_sesame/query/ast/root.rb +2 -4
  16. data/lib/cloud_sesame/query/ast/value.rb +1 -9
  17. data/lib/cloud_sesame/query/builder.rb +9 -11
  18. data/lib/cloud_sesame/query/domain/block.rb +1 -3
  19. data/lib/cloud_sesame/query/domain/chaining_block.rb +3 -4
  20. data/lib/cloud_sesame/query/domain/literal.rb +1 -3
  21. data/lib/cloud_sesame/query/dsl/bind_caller.rb +13 -6
  22. data/lib/cloud_sesame/query/dsl/{field_array_methods.rb → literal_chaining_methods.rb} +1 -6
  23. data/lib/cloud_sesame/query/dsl/{field_accessors.rb → literal_methods.rb} +1 -1
  24. data/lib/cloud_sesame/query/node/fuzziness.rb +1 -1
  25. data/lib/cloud_sesame.rb +4 -3
  26. data/spec/cloud_sesame/query/ast/abstract/multi_expression_operator_spec.rb +5 -1
  27. data/spec/cloud_sesame/query/ast/field_array_spec.rb +57 -0
  28. data/spec/cloud_sesame/query/ast/literal_spec.rb +136 -0
  29. data/spec/cloud_sesame/query/ast/not_spec.rb +30 -0
  30. data/spec/cloud_sesame/query/ast/phrase_spec.rb +20 -0
  31. data/spec/cloud_sesame/query/ast/range_value_spec.rb +245 -30
  32. data/spec/cloud_sesame/query/ast/string_value_spec.rb +39 -0
  33. data/spec/cloud_sesame/query/ast/term_spec.rb +20 -0
  34. data/spec/cloud_sesame/query/ast/value_spec.rb +109 -0
  35. data/spec/cloud_sesame/query/builder_spec.rb +4 -4
  36. data/spec/cloud_sesame/query/domain/block_spec.rb +3 -3
  37. data/spec/cloud_sesame/query/dsl/{field_array_methods_spec.rb → literal_chaining_methods_spec.rb} +1 -1
  38. data/spec/cloud_sesame/query/dsl/{field_accessors_spec.rb → literal_methods_spec.rb} +3 -3
  39. data/spec/cloud_sesame/query/node/query_spec.rb +22 -0
  40. data/spec/profiling_spec.rb +155 -155
  41. metadata +23 -9
@@ -1,5 +1,5 @@
1
1
  require_relative '../dsl/applied_filter_query_spec'
2
- require_relative '../dsl/field_accessors_spec'
2
+ require_relative '../dsl/literal_methods_spec'
3
3
 
4
4
  module CloudSesame
5
5
  module Query
@@ -14,11 +14,11 @@ module CloudSesame
14
14
  before { subject.instance_variable_set(:@_scopes, [scope]) }
15
15
  end
16
16
 
17
- it_behaves_like DSL::FieldAccessors do
17
+ it_behaves_like DSL::LiteralMethods do
18
18
  let(:scope) { AST::Root.new(context, {}) }
19
19
  subject { Block.new(self, context) }
20
20
  before do
21
- Block.send(:include, DSL::FieldAccessors)
21
+ Block.send(:include, DSL::LiteralMethods)
22
22
  subject.instance_variable_set(:@_scopes, [scope])
23
23
  end
24
24
  end
@@ -1,7 +1,7 @@
1
1
  module CloudSesame
2
2
  module Query
3
3
  module DSL
4
- describe FieldArrayMethods do
4
+ describe LiteralChainingMethods do
5
5
 
6
6
  # Setup Test Class
7
7
  class Product
@@ -1,7 +1,7 @@
1
1
  module CloudSesame
2
2
  module Query
3
3
  module DSL
4
- shared_examples_for FieldAccessors do
4
+ shared_examples_for LiteralMethods do
5
5
  let(:field_name) { :test_field_name }
6
6
  let(:_scope) { subject.send(:_scope) }
7
7
  let(:context) { { fields: { field_name => {} } } }
@@ -51,7 +51,7 @@ module CloudSesame
51
51
 
52
52
  context 'when field is registered' do
53
53
  let(:value) { "value" }
54
- before { DSL::FieldAccessors.__define_accessor__(field_name) }
54
+ before { DSL::LiteralMethods.__define_accessor__(field_name) }
55
55
  it 'should create a literal node' do
56
56
  expect(AST::Literal).to receive(:new).with(field_name, value, options)
57
57
  subject.send(field_name, value)
@@ -68,7 +68,7 @@ module CloudSesame
68
68
  it 'should return the field array if called from inside a block' do
69
69
  array = nil
70
70
  subject.and { array = send(field_name, value) }
71
- expect(array).to be_kind_of(AST::FieldArray)
71
+ expect(array).to be_kind_of(AST::MultiExpressionOperatorChildren)
72
72
  expect(array).to include(AST::Literal)
73
73
  end
74
74
  it 'should set the field array#field' do
@@ -70,10 +70,32 @@ module CloudSesame
70
70
  include_examples 'common query compile actions'
71
71
  end
72
72
  context 'when fuzziness is defined' do
73
+ let(:query_string) { 'firstword secondword' }
73
74
  let(:parser) { Fuzziness.new }
74
75
  let(:context) {{ fuzziness: parser }}
76
+
75
77
  include_examples 'common query compile actions'
76
78
  include_examples 'with additional parser defined', "fuzziness"
79
+
80
+ it 'applies fuzziness to each word in the query' do
81
+ expect(subject.compile).to include('(firstword~2+secondword~2)')
82
+ end
83
+
84
+ context 'negative query terms' do
85
+ let(:query_string) { 'firstword -excludedword' }
86
+
87
+ it 'do not have fuzziness applied' do
88
+ expect(subject.compile).to include('(firstword~2+-excludedword)')
89
+ end
90
+ end
91
+
92
+ context 'wildcard query terms' do
93
+ let(:query_string) { 'firstword wildcard*' }
94
+
95
+ it 'do not have fuzziness applied' do
96
+ expect(subject.compile).to include('(firstword~2+wildcard*)')
97
+ end
98
+ end
77
99
  end
78
100
  context 'when sloppiness is defined' do
79
101
  let(:parser) { Sloppiness.new(3) }
@@ -1,155 +1,155 @@
1
- require 'spec_helper'
2
-
3
- fdescribe CloudSesame do
4
- # FAKE RAILS AND RAILS CACHE
5
- # =====================================
6
- class ::Rails
7
- def self.cache
8
- @cache ||= FakeCache.new
9
- end
10
- end
11
-
12
- class ::FakeCache
13
- def table
14
- @table ||= {}
15
- end
16
- def fetch(key, &block)
17
- table[key] ||= (block.call if block_given?)
18
- end
19
- end
20
-
21
- # AWS initializer
22
- # =======================================================
23
- require 'yaml'
24
- YAML.load_file('aws.yml').each do |key, value|
25
- ENV["AWS_#{ key }"] = value
26
- end
27
-
28
- # Domain Initializer /config/initializers/cloudsearch.rb
29
- # =======================================================
30
- require 'cloud_sesame'
31
-
32
- CloudSesame::Domain::Client.configure do |config|
33
- config.access_key = ENV['AWS_ACCESS_KEY_ID']
34
- config.secret_key = ENV['AWS_SECRET_ACCESS_KEY']
35
- end
36
-
37
- # Usage Example
38
- # =======================================================
39
- class Product
40
- include CloudSesame
41
-
42
- def self.greeting
43
- "hello world!"
44
- end
45
-
46
- define_cloudsearch do
47
- # Product CloudSesame Config
48
- config.endpoint = ENV['AWS_ENDPOINT']
49
- config.region = ENV['AWS_REGION']
50
-
51
- caching_with :RailsCache
52
-
53
- default_size 100
54
-
55
- define_sloppiness 3
56
-
57
- define_fuzziness do
58
- max_fuzziness 3
59
- min_char_size 6
60
- fuzzy_percent 0.17
61
- end
62
-
63
- field :searchable_text, query: { weight: 2 }, type: :string
64
- field :description, query: { weight: 0.5 }, type: :string
65
- field :tags, type: :string
66
-
67
- field :affiliate_advertiser_ext_id, facet: { size: 50 }
68
- field :currency, facet: true
69
- field :discount_percentage, facet: { buckets: %w([10,100] [25,100] [50,100] [70,100]), method: 'interval' }
70
- field :manufacturer_name, facet: { size: 50 }
71
- field :price, facet: { buckets: %w([0,25] [25,50] [50,100] [100,200] [200,}), method: 'interval' }
72
- field :category_string, facet: { sort: 'bucket', size: 10_000 }
73
- field :created_at, type: :datetime
74
-
75
- end
76
-
77
- end
78
-
79
- class Coupon
80
- include CloudSesame
81
-
82
- VALID_COUPON_RANK = 20
83
-
84
- define_cloudsearch do
85
- config.endpoint = ENV['AWS_ENDPOINT']
86
- config.region = ENV['AWS_REGION']
87
-
88
- default_size 10
89
-
90
- define_sloppiness 3
91
-
92
- define_fuzziness do
93
- max_fuzziness 3
94
- min_char_size 6
95
- fuzzy_percent 0.17
96
- end
97
-
98
- field :end_date, as: :date1
99
- field :rank, as: :num1, default: -> { gte VALID_COUPON_RANK }
100
- field :searchable_text, query: true
101
- field :affiliate_advertiser_search_ext_id, as: :string1, facet: { size: 50 }
102
- field :countries, as: :string_array1
103
- field :deal_types, as: :string_array2, facet: {}
104
- field :tags, as: :string_array3, facet: {}
105
- field :type, default: -> { 'Catalog::CouponSearchable' }
106
- end
107
-
108
- end
109
-
110
- @tags = [1, 2]
111
- q = nil
112
- profile 1 do
113
- q = Product.cloudsearch
114
- .query("black leather jacket")
115
- .sort(price: :asc, created_at: :desc)
116
- .page(3)
117
- .size(1000)
118
- .price { gt 1 }
119
- .tags { "2" }
120
- .and {
121
- or! {
122
- tags *@tags
123
- tags nil
124
- and! {
125
- tags.not "3", "4"
126
- }
127
- and!.not {
128
- tags.start_with "5", "6"
129
- tags.not.start_with("7")
130
- tags.not.near("8", distance: 7)
131
- tags start_with("9"), near("10")
132
- tags term("11", boost: 2)
133
- tags.not phrase "12"
134
- }
135
- or!.not {
136
- price(25..100)
137
- price 100...200
138
- price gte(200).lt(300)
139
- price gte(300)
140
- }
141
- or! {
142
- created_at Date.today - 7
143
- created_at gte(Date.today)
144
- created_at gte(Date.today).lt(Date.today + 3)
145
- }
146
- }
147
- }
148
-
149
- q.compile
150
-
151
- end
152
-
153
- binding.pry
154
-
155
- end
1
+ # require 'spec_helper'
2
+
3
+ # fdescribe CloudSesame do
4
+ # # FAKE RAILS AND RAILS CACHE
5
+ # # =====================================
6
+ # class ::Rails
7
+ # def self.cache
8
+ # @cache ||= FakeCache.new
9
+ # end
10
+ # end
11
+
12
+ # class ::FakeCache
13
+ # def table
14
+ # @table ||= {}
15
+ # end
16
+ # def fetch(key, &block)
17
+ # table[key] ||= (block.call if block_given?)
18
+ # end
19
+ # end
20
+
21
+ # # AWS initializer
22
+ # # =======================================================
23
+ # require 'yaml'
24
+ # YAML.load_file('aws.yml').each do |key, value|
25
+ # ENV["AWS_#{ key }"] = value
26
+ # end
27
+
28
+ # # Domain Initializer /config/initializers/cloudsearch.rb
29
+ # # =======================================================
30
+ # require 'cloud_sesame'
31
+
32
+ # CloudSesame::Domain::Client.configure do |config|
33
+ # config.access_key = ENV['AWS_ACCESS_KEY_ID']
34
+ # config.secret_key = ENV['AWS_SECRET_ACCESS_KEY']
35
+ # end
36
+
37
+ # # Usage Example
38
+ # # =======================================================
39
+ # class Product
40
+ # include CloudSesame
41
+
42
+ # def self.greeting
43
+ # "hello world!"
44
+ # end
45
+
46
+ # define_cloudsearch do
47
+ # # Product CloudSesame Config
48
+ # config.endpoint = ENV['AWS_ENDPOINT']
49
+ # config.region = ENV['AWS_REGION']
50
+
51
+ # caching_with :RailsCache
52
+
53
+ # default_size 100
54
+
55
+ # define_sloppiness 3
56
+
57
+ # define_fuzziness do
58
+ # max_fuzziness 3
59
+ # min_char_size 6
60
+ # fuzzy_percent 0.17
61
+ # end
62
+
63
+ # field :searchable_text, query: { weight: 2 }, type: :string
64
+ # field :description, query: true, type: :string
65
+ # field :tags, type: :string
66
+
67
+ # field :affiliate_advertiser_ext_id, facet: { size: 50 }
68
+ # field :currency, facet: true
69
+ # field :discount_percentage, facet: { buckets: %w([10,100] [25,100] [50,100] [70,100]), method: 'interval' }
70
+ # field :manufacturer_name, facet: { size: 50 }
71
+ # field :price, facet: { buckets: %w([0,25] [25,50] [50,100] [100,200] [200,}), method: 'interval' }
72
+ # field :category_string, facet: { sort: 'bucket', size: 10_000 }
73
+ # field :created_at, type: :datetime
74
+
75
+ # end
76
+
77
+ # end
78
+
79
+ # class Coupon
80
+ # include CloudSesame
81
+
82
+ # VALID_COUPON_RANK = 20
83
+
84
+ # define_cloudsearch do
85
+ # config.endpoint = ENV['AWS_ENDPOINT']
86
+ # config.region = ENV['AWS_REGION']
87
+
88
+ # default_size 10
89
+
90
+ # define_sloppiness 3
91
+
92
+ # define_fuzziness do
93
+ # max_fuzziness 3
94
+ # min_char_size 6
95
+ # fuzzy_percent 0.17
96
+ # end
97
+
98
+ # field :end_date, as: :date1
99
+ # field :rank, as: :num1, default: -> { gte VALID_COUPON_RANK }
100
+ # field :searchable_text, query: true
101
+ # field :affiliate_advertiser_search_ext_id, as: :string1, facet: { size: 50 }
102
+ # field :countries, as: :string_array1
103
+ # field :deal_types, as: :string_array2, facet: {}
104
+ # field :tags, as: :string_array3, facet: {}
105
+ # field :type, default: -> { 'Catalog::CouponSearchable' }
106
+ # end
107
+
108
+ # end
109
+
110
+ # @tags = [1, 2]
111
+ # q = nil
112
+ # profile 1 do
113
+ # q = Product.cloudsearch
114
+ # .query("black leather jacket")
115
+ # .sort(price: :asc, created_at: :desc)
116
+ # .page(3)
117
+ # .size(1000)
118
+ # .price { gt 1 }
119
+ # .tags { "2" }
120
+ # .and {
121
+ # or! {
122
+ # tags *@tags
123
+ # tags nil
124
+ # and! {
125
+ # tags.not "3", "4"
126
+ # }
127
+ # and!.not {
128
+ # tags.start_with "5", "6"
129
+ # tags.not.start_with("7")
130
+ # tags.not.near("8", distance: 7)
131
+ # tags start_with("9"), near("10")
132
+ # tags term("11", boost: 2)
133
+ # tags.not phrase "12"
134
+ # }
135
+ # or!.not {
136
+ # price(25..100)
137
+ # price 100...200
138
+ # price gte(200).lt(300)
139
+ # price gte(300)
140
+ # }
141
+ # or! {
142
+ # created_at Date.today - 7
143
+ # created_at gte(Date.today)
144
+ # created_at gte(Date.today).lt(Date.today + 3)
145
+ # }
146
+ # }
147
+ # }
148
+
149
+ # q.compile
150
+
151
+ # end
152
+
153
+ # binding.pry
154
+
155
+ # end
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.7.5
4
+ version: 0.7.7
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-03-15 00:00:00.000000000 Z
19
+ date: 2016-04-04 00:00:00.000000000 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  name: aws-sdk
@@ -167,8 +167,8 @@ files:
167
167
  - lib/cloud_sesame/query/ast/abstract/value.rb
168
168
  - lib/cloud_sesame/query/ast/and.rb
169
169
  - lib/cloud_sesame/query/ast/date_value.rb
170
- - lib/cloud_sesame/query/ast/field_array.rb
171
170
  - lib/cloud_sesame/query/ast/literal.rb
171
+ - lib/cloud_sesame/query/ast/multi_expression_operator_children.rb
172
172
  - lib/cloud_sesame/query/ast/near.rb
173
173
  - lib/cloud_sesame/query/ast/not.rb
174
174
  - lib/cloud_sesame/query/ast/numeric_value.rb
@@ -187,9 +187,9 @@ files:
187
187
  - lib/cloud_sesame/query/dsl/applied_filter_query.rb
188
188
  - lib/cloud_sesame/query/dsl/bind_caller.rb
189
189
  - lib/cloud_sesame/query/dsl/block_styled_operators.rb
190
- - lib/cloud_sesame/query/dsl/field_accessors.rb
191
- - lib/cloud_sesame/query/dsl/field_array_methods.rb
192
190
  - lib/cloud_sesame/query/dsl/inspect_method.rb
191
+ - lib/cloud_sesame/query/dsl/literal_chaining_methods.rb
192
+ - lib/cloud_sesame/query/dsl/literal_methods.rb
193
193
  - lib/cloud_sesame/query/dsl/operators.rb
194
194
  - lib/cloud_sesame/query/dsl/page_methods.rb
195
195
  - lib/cloud_sesame/query/dsl/query_methods.rb
@@ -231,16 +231,23 @@ files:
231
231
  - spec/cloud_sesame/query/ast/abstract/value_spec.rb
232
232
  - spec/cloud_sesame/query/ast/and_spec.rb
233
233
  - spec/cloud_sesame/query/ast/date_value_spec.rb
234
+ - spec/cloud_sesame/query/ast/field_array_spec.rb
235
+ - spec/cloud_sesame/query/ast/literal_spec.rb
236
+ - spec/cloud_sesame/query/ast/not_spec.rb
234
237
  - spec/cloud_sesame/query/ast/numeric_value_spec.rb
235
238
  - spec/cloud_sesame/query/ast/or_spec.rb
239
+ - spec/cloud_sesame/query/ast/phrase_spec.rb
236
240
  - spec/cloud_sesame/query/ast/range_value_spec.rb
237
241
  - spec/cloud_sesame/query/ast/root_spec.rb
242
+ - spec/cloud_sesame/query/ast/string_value_spec.rb
243
+ - spec/cloud_sesame/query/ast/term_spec.rb
244
+ - spec/cloud_sesame/query/ast/value_spec.rb
238
245
  - spec/cloud_sesame/query/builder_spec.rb
239
246
  - spec/cloud_sesame/query/domain/block_spec.rb
240
247
  - spec/cloud_sesame/query/dsl/applied_filter_query_spec.rb
241
248
  - spec/cloud_sesame/query/dsl/block_styled_operators_spec.rb
242
- - spec/cloud_sesame/query/dsl/field_accessors_spec.rb
243
- - spec/cloud_sesame/query/dsl/field_array_methods_spec.rb
249
+ - spec/cloud_sesame/query/dsl/literal_chaining_methods_spec.rb
250
+ - spec/cloud_sesame/query/dsl/literal_methods_spec.rb
244
251
  - spec/cloud_sesame/query/node/abstract_spec.rb
245
252
  - spec/cloud_sesame/query/node/facet_spec.rb
246
253
  - spec/cloud_sesame/query/node/filter_query_spec.rb
@@ -295,16 +302,23 @@ test_files:
295
302
  - spec/cloud_sesame/query/ast/abstract/value_spec.rb
296
303
  - spec/cloud_sesame/query/ast/and_spec.rb
297
304
  - spec/cloud_sesame/query/ast/date_value_spec.rb
305
+ - spec/cloud_sesame/query/ast/field_array_spec.rb
306
+ - spec/cloud_sesame/query/ast/literal_spec.rb
307
+ - spec/cloud_sesame/query/ast/not_spec.rb
298
308
  - spec/cloud_sesame/query/ast/numeric_value_spec.rb
299
309
  - spec/cloud_sesame/query/ast/or_spec.rb
310
+ - spec/cloud_sesame/query/ast/phrase_spec.rb
300
311
  - spec/cloud_sesame/query/ast/range_value_spec.rb
301
312
  - spec/cloud_sesame/query/ast/root_spec.rb
313
+ - spec/cloud_sesame/query/ast/string_value_spec.rb
314
+ - spec/cloud_sesame/query/ast/term_spec.rb
315
+ - spec/cloud_sesame/query/ast/value_spec.rb
302
316
  - spec/cloud_sesame/query/builder_spec.rb
303
317
  - spec/cloud_sesame/query/domain/block_spec.rb
304
318
  - spec/cloud_sesame/query/dsl/applied_filter_query_spec.rb
305
319
  - spec/cloud_sesame/query/dsl/block_styled_operators_spec.rb
306
- - spec/cloud_sesame/query/dsl/field_accessors_spec.rb
307
- - spec/cloud_sesame/query/dsl/field_array_methods_spec.rb
320
+ - spec/cloud_sesame/query/dsl/literal_chaining_methods_spec.rb
321
+ - spec/cloud_sesame/query/dsl/literal_methods_spec.rb
308
322
  - spec/cloud_sesame/query/node/abstract_spec.rb
309
323
  - spec/cloud_sesame/query/node/facet_spec.rb
310
324
  - spec/cloud_sesame/query/node/filter_query_spec.rb