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.
- checksums.yaml +4 -4
- data/Gemfile.lock +14 -12
- data/Guardfile +2 -2
- data/cloud_sesame.gemspec +2 -2
- data/coverage/.last_run.json +1 -1
- data/coverage/.resultset.json +1363 -248
- data/lib/cloud_sesame/domain/base.rb +1 -1
- data/lib/cloud_sesame/query/ast/abstract/multi_expression_operator.rb +3 -4
- data/lib/cloud_sesame/query/ast/abstract/value.rb +10 -2
- data/lib/cloud_sesame/query/ast/date_value.rb +1 -4
- data/lib/cloud_sesame/query/ast/literal.rb +20 -12
- data/lib/cloud_sesame/query/ast/{field_array.rb → multi_expression_operator_children.rb} +8 -2
- data/lib/cloud_sesame/query/ast/not.rb +1 -7
- data/lib/cloud_sesame/query/ast/range_value.rb +43 -28
- data/lib/cloud_sesame/query/ast/root.rb +2 -4
- data/lib/cloud_sesame/query/ast/value.rb +1 -9
- data/lib/cloud_sesame/query/builder.rb +9 -11
- data/lib/cloud_sesame/query/domain/block.rb +1 -3
- data/lib/cloud_sesame/query/domain/chaining_block.rb +3 -4
- data/lib/cloud_sesame/query/domain/literal.rb +1 -3
- data/lib/cloud_sesame/query/dsl/bind_caller.rb +13 -6
- data/lib/cloud_sesame/query/dsl/{field_array_methods.rb → literal_chaining_methods.rb} +1 -6
- data/lib/cloud_sesame/query/dsl/{field_accessors.rb → literal_methods.rb} +1 -1
- data/lib/cloud_sesame/query/node/fuzziness.rb +1 -1
- data/lib/cloud_sesame.rb +4 -3
- data/spec/cloud_sesame/query/ast/abstract/multi_expression_operator_spec.rb +5 -1
- data/spec/cloud_sesame/query/ast/field_array_spec.rb +57 -0
- data/spec/cloud_sesame/query/ast/literal_spec.rb +136 -0
- data/spec/cloud_sesame/query/ast/not_spec.rb +30 -0
- data/spec/cloud_sesame/query/ast/phrase_spec.rb +20 -0
- data/spec/cloud_sesame/query/ast/range_value_spec.rb +245 -30
- data/spec/cloud_sesame/query/ast/string_value_spec.rb +39 -0
- data/spec/cloud_sesame/query/ast/term_spec.rb +20 -0
- data/spec/cloud_sesame/query/ast/value_spec.rb +109 -0
- data/spec/cloud_sesame/query/builder_spec.rb +4 -4
- data/spec/cloud_sesame/query/domain/block_spec.rb +3 -3
- data/spec/cloud_sesame/query/dsl/{field_array_methods_spec.rb → literal_chaining_methods_spec.rb} +1 -1
- data/spec/cloud_sesame/query/dsl/{field_accessors_spec.rb → literal_methods_spec.rb} +3 -3
- data/spec/cloud_sesame/query/node/query_spec.rb +22 -0
- data/spec/profiling_spec.rb +155 -155
- metadata +23 -9
@@ -1,5 +1,5 @@
|
|
1
1
|
require_relative '../dsl/applied_filter_query_spec'
|
2
|
-
require_relative '../dsl/
|
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::
|
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::
|
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
|
-
shared_examples_for
|
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::
|
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::
|
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) }
|
data/spec/profiling_spec.rb
CHANGED
@@ -1,155 +1,155 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
fdescribe CloudSesame do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
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.
|
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-
|
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/
|
243
|
-
- spec/cloud_sesame/query/dsl/
|
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/
|
307
|
-
- spec/cloud_sesame/query/dsl/
|
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
|