CloudSesame 0.7.5 → 0.7.7

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