CloudSesame 0.6.3 → 0.6.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4fdb2634b1b55f6cbaa96a600d51e02a3101375b
4
- data.tar.gz: 7cd0bdbd88008889545db507cfea3f7aa835badd
3
+ metadata.gz: d3467f2b1e4e4b6ac5a4184c022e9052d9225810
4
+ data.tar.gz: 1d404cb5f71818b8a9a64942f96b7734ccdbbbe0
5
5
  SHA512:
6
- metadata.gz: 27cc4302d367523be656a30dcbb178c2d0f11f1dbda8cb14f6055eaf84ba5e841f330654066946fa6d0c3ba1863be37cbd16d350eed7427ce3f30d4121294cbb
7
- data.tar.gz: d082a24dbd0be07160527a034be3b75955d45cf51d07055fc43411894d6a65f5dbfd6f5b821a7e5f1a1a1d72397138b924ccf44a0964f33bb8154267a146bca7
6
+ metadata.gz: 39169ff899d4396e439138edb1ba0315d3fcea1768346fa03d339df14cbbba13d8b0d98b58e3ac2283c5be727529a70ea8fb49f327bcd32b0acc5478549d9546
7
+ data.tar.gz: 18dbe204dcb25aa45664fe394d6d1bb99f7e18acc287bdfced8028447b80b19ba32c5f26e2373e7907e94811c8fdd527d9521d2fdb8056e1ce7deb00acd5e38b
data/Gemfile.lock CHANGED
@@ -1,18 +1,18 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- CloudSesame (0.6.3)
4
+ CloudSesame (0.6.4)
5
5
  aws-sdk (~> 2)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- aws-sdk (2.2.13)
11
- aws-sdk-resources (= 2.2.13)
12
- aws-sdk-core (2.2.13)
10
+ aws-sdk (2.2.16)
11
+ aws-sdk-resources (= 2.2.16)
12
+ aws-sdk-core (2.2.16)
13
13
  jmespath (~> 1.0)
14
- aws-sdk-resources (2.2.13)
15
- aws-sdk-core (= 2.2.13)
14
+ aws-sdk-resources (2.2.16)
15
+ aws-sdk-core (= 2.2.16)
16
16
  coderay (1.1.0)
17
17
  diff-lcs (1.2.5)
18
18
  ffi (1.9.10)
@@ -32,12 +32,12 @@ GEM
32
32
  guard-compat (~> 1.1)
33
33
  rspec (>= 2.99.0, < 4.0)
34
34
  jmespath (1.1.3)
35
- listen (3.0.5)
35
+ listen (3.0.6)
36
36
  rb-fsevent (>= 0.9.3)
37
- rb-inotify (>= 0.9)
37
+ rb-inotify (>= 0.9.7)
38
38
  lumberjack (1.0.10)
39
39
  method_source (0.8.2)
40
- nenv (0.2.0)
40
+ nenv (0.3.0)
41
41
  notiffany (0.0.8)
42
42
  nenv (~> 0.1)
43
43
  shellany (~> 0.0)
@@ -46,13 +46,13 @@ GEM
46
46
  method_source (~> 0.8.1)
47
47
  slop (~> 3.4)
48
48
  rb-fsevent (0.9.7)
49
- rb-inotify (0.9.5)
49
+ rb-inotify (0.9.7)
50
50
  ffi (>= 0.5.0)
51
51
  rspec (3.4.0)
52
52
  rspec-core (~> 3.4.0)
53
53
  rspec-expectations (~> 3.4.0)
54
54
  rspec-mocks (~> 3.4.0)
55
- rspec-core (3.4.1)
55
+ rspec-core (3.4.2)
56
56
  rspec-support (~> 3.4.0)
57
57
  rspec-expectations (3.4.0)
58
58
  diff-lcs (>= 1.2.0, < 2.0)
@@ -76,3 +76,6 @@ DEPENDENCIES
76
76
  pry (~> 0)
77
77
  rspec (~> 3)
78
78
  ruby-prof
79
+
80
+ BUNDLED WITH
81
+ 1.11.2
data/cloud_sesame.gemspec CHANGED
@@ -1,11 +1,20 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'CloudSesame'
3
- s.version = '0.6.3'
4
- s.date = '2016-02-09'
3
+ s.version = '0.6.4'
4
+ s.date = '2016-02-14'
5
5
  s.summary = "AWS CloudSearch Query DSL"
6
6
  s.description = "AWS CloudSearch Query DSL"
7
- s.authors = ['Scott Chu', 'Emily Fan', 'Greg Ward', 'David McHoull',
8
- 'Alishan Ladhani', 'Justine Jones', 'Gillian Chesnais', 'Jeff Li']
7
+ s.authors = [
8
+ 'Scott Chu',
9
+ 'Emily Fan',
10
+ 'Greg Ward',
11
+ 'David McHoull',
12
+ 'Alishan Ladhani',
13
+ 'Justine Jones',
14
+ 'Gillian Chesnais',
15
+ 'Jeff Li',
16
+ 'Nick Zhu'
17
+ ]
9
18
  s.email = 'dev@retailcommon.com'
10
19
  s.homepage = 'https://github.com/47colborne/cloud-sesame'
11
20
  s.platform = Gem::Platform::RUBY
data/lib/cloud_sesame.rb CHANGED
@@ -87,6 +87,7 @@ require 'cloud_sesame/context'
87
87
  require 'cloud_sesame/domain/base'
88
88
  require 'cloud_sesame/domain/client'
89
89
  require 'cloud_sesame/domain/config'
90
+ require 'cloud_sesame/domain/error/caching'
90
91
 
91
92
  # Public Interface
92
93
  # ===============================================
@@ -3,7 +3,7 @@ module CloudSesame
3
3
  class Base
4
4
  extend Forwardable
5
5
 
6
- def_delegator :client, :config
6
+ def_delegators :client, :config, :caching_with
7
7
 
8
8
  attr_accessor :_caller
9
9
  attr_reader :searchable
@@ -21,7 +21,7 @@ module CloudSesame
21
21
  end
22
22
 
23
23
  def client
24
- @client ||= Client.new
24
+ @client ||= Client.new searchable
25
25
  end
26
26
 
27
27
  def context
@@ -31,10 +31,6 @@ module CloudSesame
31
31
  # DEFAULT CONTEXT METHODS
32
32
  # =========================================
33
33
 
34
- def turn_on_cache
35
- context[:cache] = !!(Rails rescue nil)
36
- end
37
-
38
34
  def default_size(value)
39
35
  (context[:page] ||= {})[:size] = value
40
36
  end
@@ -1,9 +1,11 @@
1
+ require 'cloud_sesame/domain/client_module/caching'
2
+
1
3
  module CloudSesame
2
4
  module Domain
3
5
  class Client
4
- extend Forwardable
6
+ include ClientModule::Caching
5
7
 
6
- def_delegator :aws_client, :search
8
+ attr_reader :searchable
7
9
 
8
10
  def self.configure
9
11
  yield global_config if block_given?
@@ -13,10 +15,18 @@ module CloudSesame
13
15
  @global_config ||= Config.new
14
16
  end
15
17
 
18
+ def initialize(searchable)
19
+ @searchable = searchable
20
+ end
21
+
16
22
  def config
17
23
  @config ||= Config.new self.class.global_config
18
24
  end
19
25
 
26
+ def search(params)
27
+ executor.fetch params
28
+ end
29
+
20
30
  private
21
31
 
22
32
  def aws_client
@@ -0,0 +1,40 @@
1
+ require_relative './caching/base'
2
+ require_relative './caching/no_cache'
3
+ require_relative './caching/rails_cache'
4
+
5
+ module CloudSesame
6
+ module Domain
7
+ module ClientModule
8
+ module Caching
9
+
10
+ def caching_with(caching_module)
11
+ unrecognized_caching_module if !module_defined?(caching_module)
12
+ self.executor = module_get(caching_module)
13
+ end
14
+
15
+ def executor
16
+ @executor ||= Caching::NoCache.new(aws_client, @searchable)
17
+ end
18
+
19
+ def executor=(executor)
20
+ @executor = executor.new(aws_client, @searchable)
21
+ end
22
+
23
+ private
24
+
25
+ def module_defined?(caching_module)
26
+ ClientModule::Caching.const_defined? caching_module
27
+ end
28
+
29
+ def module_get(caching_module)
30
+ ClientModule::Caching.const_get caching_module
31
+ end
32
+
33
+ def unrecognized_caching_module
34
+ raise Error::Caching, "Unrecognized Caching Module"
35
+ end
36
+
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,26 @@
1
+ module CloudSesame
2
+ module Domain
3
+ module ClientModule
4
+ module Caching
5
+ class Base
6
+
7
+ def initialize(client, searchable)
8
+ @client = client
9
+ @searchable = searchable
10
+ end
11
+
12
+ def fetch(params)
13
+ raise Error::Caching, "Caching Module needs #fetch method and accepts params"
14
+ end
15
+
16
+ private
17
+
18
+ def search(params)
19
+ @client.search params
20
+ end
21
+
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,15 @@
1
+ module CloudSesame
2
+ module Domain
3
+ module ClientModule
4
+ module Caching
5
+ class NoCache < Base
6
+
7
+ def fetch(params)
8
+ search params
9
+ end
10
+
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,36 @@
1
+ module CloudSesame
2
+ module Domain
3
+ module ClientModule
4
+ module Caching
5
+ class RailsCache < Base
6
+
7
+ def initialize(client, searchable)
8
+ ensure_environment_exists
9
+ super
10
+ end
11
+
12
+ def fetch(params)
13
+ Rails.cache.fetch(hashify(params)) do
14
+ results = search params
15
+ OpenStruct.new(status: results.status, hits: results.hits, facets: results.facets)
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ def hashify(params)
22
+ searchable_params = params.merge(searchable: @searchable)
23
+ Digest::MD5.hexdigest Marshal.dump(searchable_params)
24
+ end
25
+
26
+ def ensure_environment_exists
27
+ unless RailsCache.const_defined?(:Rails)
28
+ raise Error::Caching, "Rails environment cannot be found"
29
+ end
30
+ end
31
+
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,9 @@
1
+ module CloudSesame
2
+ module Domain
3
+ module ClientModule
4
+ module Retry
5
+
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,8 @@
1
+ module CloudSesame
2
+ module Domain
3
+ module Error
4
+ class Caching < Exception
5
+ end
6
+ end
7
+ end
8
+ end
@@ -53,7 +53,10 @@ module CloudSesame
53
53
  end
54
54
 
55
55
  def range_to_array(range)
56
- ['[', range.begin, range.end, end_symbol(range)]
56
+ ['[',
57
+ Value.parse(range.begin),
58
+ Value.parse(range.end),
59
+ end_symbol(range)]
57
60
  end
58
61
 
59
62
  def end_symbol(value)
@@ -26,22 +26,10 @@ module CloudSesame
26
26
  results.map &block
27
27
  end
28
28
 
29
- def hash_key(compiled)
30
- Digest::MD5.hexdigest(JSON.generate(compiled.merge(searchable: searchable.to_s)))
31
- end
32
-
33
29
  def search
34
30
  compiled = request.compile
35
31
  raise Error::MissingQuery.new("Query or FilterQuery can not be empty!") if !compiled[:query] || compiled[:query].empty?
36
- if context[:cache]
37
- @response = Rails.cache.fetch(hash_key(compiled)) do
38
- results = searchable.cloudsearch.client.search compiled
39
- OpenStruct.new(status: results.status, hits: results.hits, facets: results.facets)
40
- end
41
- else
42
- @response = searchable.cloudsearch.client.search compiled
43
- end
44
- @response
32
+ @response = searchable.cloudsearch.client.search compiled
45
33
  end
46
34
 
47
35
  end
@@ -0,0 +1,21 @@
1
+ module CloudSesame
2
+ module Domain
3
+ module ClientModule
4
+ module Caching
5
+ describe Base do
6
+
7
+ class Searchable; end
8
+
9
+ subject { Base.new({}, Searchable) }
10
+
11
+ describe 'fetch' do
12
+ it 'should raise an error by default' do
13
+ expect{ subject.fetch({}) }.to raise_error(Error::Caching, "Caching Module needs #fetch method and accepts params")
14
+ end
15
+ end
16
+
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,25 @@
1
+ module CloudSesame
2
+ module Domain
3
+ module ClientModule
4
+ module Caching
5
+ describe NoCache do
6
+
7
+ class Searchable; end
8
+
9
+ let(:client) { OpenStruct.new(search: nil) }
10
+
11
+ subject { NoCache.new(client, Searchable) }
12
+
13
+ describe 'fetch' do
14
+ let(:params) {{}}
15
+ it 'should search with params using client' do
16
+ expect(client).to receive(:search).with(params)
17
+ subject.fetch(params)
18
+ end
19
+ end
20
+
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,85 @@
1
+ module CloudSesame
2
+ module Domain
3
+ module ClientModule
4
+ module Caching
5
+ describe RailsCache do
6
+
7
+ # FAKE RAILS AND RAILS CACHE
8
+ # =====================================
9
+ class ::Rails
10
+ def self.cache
11
+ @cache ||= FakeCache.new
12
+ end
13
+ end
14
+
15
+ class ::FakeCache
16
+ def table
17
+ @table ||= {}
18
+ end
19
+ def fetch(key, &block)
20
+ table[key] ||= (block.call if block_given?)
21
+ end
22
+ end
23
+
24
+ # FAKE SEARCHABLE CLASS
25
+ # =====================================
26
+ class Searchable; end
27
+
28
+ # HELPERS
29
+ # =====================================
30
+ def hashify(params)
31
+ subject.send(:hashify, params)
32
+ end
33
+
34
+ # TESTS
35
+ # =====================================
36
+
37
+ let(:client) { OpenStruct.new(search: nil) }
38
+ subject { RailsCache.new(client, Searchable) }
39
+
40
+ shared_examples 'cache stored' do
41
+ it 'should cache the result' do
42
+ expect{ subject.fetch(params) }.to change{ Rails.cache.table.keys.size }
43
+ expect(Rails.cache.table[hashify(params)]).to eq results
44
+ end
45
+ end
46
+
47
+ describe 'fetch' do
48
+ let(:params) {{ query: "test" }}
49
+ let(:results) { OpenStruct.new(status: {}, hits: [], facets: []) }
50
+
51
+ before do
52
+ Rails.cache.table.clear
53
+ allow(subject).to receive(:search).and_return(results)
54
+ end
55
+
56
+ it 'should use the hash key generated from params to fetch the cache from Rails' do
57
+ hash_key = hashify(params)
58
+ expect(Rails.cache).to receive(:fetch).with(hash_key)
59
+ subject.fetch(params)
60
+ end
61
+
62
+ context 'with non-cached search' do
63
+ include_examples "cache stored"
64
+ it 'should trigger search with params' do
65
+ expect(subject).to receive(:search).with(params)
66
+ subject.fetch(params)
67
+ end
68
+ end
69
+
70
+ context 'with cached search' do
71
+ include_examples "cache stored"
72
+ it 'should not trigger search with params' do
73
+ subject.fetch(params)
74
+ expect(subject).to_not receive(:search)
75
+ subject.fetch(params)
76
+ end
77
+ end
78
+
79
+ end
80
+
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,69 @@
1
+ module CloudSesame
2
+ module Domain
3
+ module ClientModule
4
+ describe Caching do
5
+
6
+ # SETUP
7
+ # =======================================
8
+
9
+ class Caching::GoodCache < Caching::Base
10
+ def fetch(params); end
11
+ end
12
+
13
+ class Caching::BadCache < Caching::Base
14
+ end
15
+
16
+ class TestClient
17
+ include Caching
18
+
19
+ def aws_client
20
+ nil
21
+ end
22
+
23
+ def searchable
24
+ nil
25
+ end
26
+ end
27
+
28
+ # TESTS
29
+ # =======================================
30
+
31
+ subject { TestClient.new }
32
+
33
+ describe '#caching_with' do
34
+ context 'when giving an existing caching module' do
35
+ context 'and caching_module respond to fetch' do
36
+ let(:caching_module) { Caching::GoodCache }
37
+ before {
38
+ subject.caching_with(:GoodCache) }
39
+ it 'should set executor to the caching module' do
40
+ expect(subject.send(:executor)).to be_kind_of caching_module
41
+ end
42
+ end
43
+ end
44
+ context 'when giving a non-existing caching module' do
45
+ it 'should raise Unrecognized Caching Module' do
46
+ expect{ subject.caching_with(:RedisCache) }.to raise_error(Error::Caching, "Unrecognized Caching Module")
47
+ end
48
+ end
49
+ end
50
+
51
+ describe 'executor getter' do
52
+ it 'should default to Caching::NoCache' do
53
+ expect(Caching::NoCache).to receive(:new).with(subject.aws_client, subject.searchable).and_call_original
54
+ expect(subject.executor).to be_kind_of Caching::NoCache
55
+ end
56
+ end
57
+
58
+ describe 'executor setter' do
59
+ it 'should accept a caching module' do
60
+ expect(Caching::GoodCache).to receive(:new).with(subject.aws_client, subject.searchable).and_call_original
61
+ subject.executor = Caching::GoodCache
62
+ expect(subject.executor).to be_kind_of Caching::GoodCache
63
+ end
64
+ end
65
+
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,77 @@
1
+ module CloudSesame
2
+ module Domain
3
+ describe Client do
4
+
5
+ class Searchable; end
6
+
7
+ subject { Client.new(Searchable) }
8
+
9
+ describe '.configure' do
10
+ context 'when block is given' do
11
+ it 'should yield back global config' do
12
+ global_config = Client.global_config
13
+ expect{ |b| Client.configure(&b) }.to yield_with_args(global_config)
14
+ end
15
+ end
16
+ end
17
+
18
+ describe '.global_config' do
19
+ context 'when calling it first time' do
20
+ before { Client.instance_variable_set(:@global_config, nil) }
21
+ it 'should initialize an config object on first call' do
22
+ config = Config.new
23
+ expect(Config).to receive(:new)
24
+ Client.global_config
25
+ end
26
+ end
27
+ context 'when calling it' do
28
+ before { Client.global_config }
29
+ it 'should not re-initialize an config object' do
30
+ expect(Config).to_not receive(:new)
31
+ Client.global_config
32
+ end
33
+ end
34
+ it 'should return an config object' do
35
+ expect(Client.global_config).to be_kind_of(Config)
36
+ end
37
+ end
38
+
39
+ describe '#config' do
40
+ context 'when calling it first time' do
41
+ it 'should initialize an config object from global config' do
42
+ global_config = Client.global_config
43
+ expect(Config).to receive(:new).with(global_config)
44
+ subject.config
45
+ end
46
+ end
47
+ context 'when calling it' do
48
+ before { subject.config }
49
+ it 'should no re-initialize an config object' do
50
+ expect(Config).to_not receive(:new)
51
+ subject.config
52
+ end
53
+ end
54
+ it 'should return an config object' do
55
+ expect(Client.global_config).to be_kind_of(Config)
56
+ end
57
+ end
58
+
59
+ describe '#search' do
60
+ let(:aws_client) { OpenStruct.new }
61
+ let(:params) { {} }
62
+ before { allow(subject).to receive(:aws_client).and_return(aws_client) }
63
+ it 'should call fetch on executor' do
64
+ expect(subject.send(:executor)).to receive(:fetch).with(params)
65
+ subject.search params
66
+ end
67
+ end
68
+
69
+ end
70
+ end
71
+ end
72
+
73
+
74
+
75
+
76
+
77
+
@@ -0,0 +1,60 @@
1
+ module CloudSesame
2
+ module Query
3
+ module AST
4
+ describe RangeValue do
5
+
6
+ describe 'initialize' do
7
+ shared_examples 'initialize with initial value' do
8
+ it 'should be an array' do
9
+ expect(subject.data).to be_kind_of(Array)
10
+ end
11
+ it 'should not be empty' do
12
+ expect(subject.data).to_not be_empty
13
+ end
14
+ it 'should capture the range information' do
15
+ expect(subject.data).to eq data
16
+ end
17
+ context 'when begin and end value exists' do
18
+ it 'should convert begin and end value to Value' do
19
+ expect(subject.data[1]).to be_kind_of(Value) if data[1]
20
+ expect(subject.data[2]).to be_kind_of(Value) if data[2]
21
+ end
22
+ end
23
+ end
24
+
25
+ context 'when given a range value' do
26
+ {
27
+ (0..10) => ['[', 0, 10, ']'],
28
+ (0...10) => ['[', 0, 10, '}'],
29
+ (Date.today..(Date.today + 3)) => ['[', Date.today, Date.today + 3, ']']
30
+ }.each do |before_value, after_value|
31
+ subject { RangeValue.new(before_value) }
32
+ let(:data) { after_value }
33
+ include_examples 'initialize with initial value'
34
+ end
35
+ end
36
+
37
+ context 'when given a range value in string format' do
38
+ {
39
+ "[0, nil}" => ['[', 0, nil, '}'],
40
+ "{, 100]" => ['{', nil, 100, ']'],
41
+ }.each do |before_value, after_value|
42
+ subject { RangeValue.new(before_value) }
43
+ let(:data) { after_value }
44
+ include_examples 'initialize with initial value'
45
+ end
46
+ end
47
+
48
+ context 'when value is not given' do
49
+ subject { RangeValue.new }
50
+ let(:data) { [] }
51
+ it 'should set the data to the default value' do
52
+ expect(subject.data).to eq ['{', nil, nil, '}']
53
+ end
54
+ end
55
+ end
56
+
57
+ end
58
+ end
59
+ end
60
+ end
@@ -4,6 +4,23 @@
4
4
 
5
5
  # describe CloudSesame do
6
6
 
7
+ # # FAKE RAILS AND RAILS CACHE
8
+ # # =====================================
9
+ # class ::Rails
10
+ # def self.cache
11
+ # @cache ||= FakeCache.new
12
+ # end
13
+ # end
14
+
15
+ # class ::FakeCache
16
+ # def table
17
+ # @table ||= {}
18
+ # end
19
+ # def fetch(key, &block)
20
+ # table[key] ||= (block.call if block_given?)
21
+ # end
22
+ # end
23
+
7
24
  # # AWS initializer
8
25
  # # =======================================================
9
26
  # require 'yaml'
@@ -34,7 +51,7 @@
34
51
  # config.endpoint = ENV['AWS_ENDPOINT']
35
52
  # config.region = ENV['AWS_REGION']
36
53
 
37
- # turn_on_cache
54
+ # caching_with :RailsCache
38
55
 
39
56
  # default_size 100
40
57
 
@@ -48,7 +65,7 @@
48
65
 
49
66
  # field :searchable_text, query: { weight: 2 }
50
67
  # field :description, query: true
51
- # field :tags , default: -> { "men" }
68
+ # field :tags
52
69
 
53
70
  # field :affiliate_advertiser_ext_id, facet: { size: 50 }
54
71
  # field :currency, facet: true
@@ -62,107 +79,80 @@
62
79
 
63
80
  # end
64
81
 
65
- # q = Product.cloudsearch.query("shoes").and{ price gte 100 }.page(2)
66
- # binding.pry
67
-
68
- # # @tags = [1, 2]
69
- # # n = 10_000
70
- # # q = nil
71
- # # result = RubyProf.profile do
72
- # # n.times do
73
- # # q = Product.cloudsearch.query("black jacket").sort(price: :asc).page(1).size(1000)
74
- # # .price { gt 100 }
75
- # # .and {
76
- # # or! {
77
- # # tags *@tags
78
- # # tags
79
- # # tags nil
80
- # # and! {
81
- # # tags.not "3", "4"
82
- # # }
83
- # # and!.not {
84
- # # tags.start_with "5", "6"
85
- # # tags.not.start_with("7")
86
- # # tags.not.near("8", distance: 7)
87
- # # tags start_with("9"), near("10")
88
- # # tags term("11", boost: 2)
89
- # # tags.not phrase "12"
90
- # # }
91
- # # or!.not {
92
- # # price(25..100)
93
- # # price 100...200
94
- # # price gte(200).lt(300)
95
- # # price gte(300)
96
- # # }
97
- # # or! {
98
- # # created_at Date.today - 7
99
- # # created_at gte(Date.today)
100
- # # created_at gte(Date.today).lt(Date.today + 3)
101
- # # }
102
- # # }
103
- # # }
104
-
105
- # # q.applied_filters
106
-
107
- # # end
108
- # # end
109
- # # printer = RubyProf::FlatPrinter.new(result)
110
- # # printer.print(STDOUT, {})
111
-
112
- # # class Coupon
113
- # # include CloudSesame
114
-
115
- # # VALID_COUPON_RANK = 20
116
-
117
- # # define_cloudsearch do
118
- # # config.endpoint = ENV['AWS_ENDPOINT']
119
- # # config.region = ENV['AWS_REGION']
120
-
121
- # # default_size 10
122
-
123
- # # define_sloppiness 3
124
-
125
- # # define_fuzziness do
126
- # # max_fuzziness 3
127
- # # min_char_size 6
128
- # # fuzzy_percent 0.17
129
- # # end
130
-
131
- # # field :end_date, as: :date1
132
- # # field :rank, as: :num1, default: -> { gte VALID_COUPON_RANK }
133
- # # field :searchable_text, query: true
134
- # # field :affiliate_advertiser_search_ext_id, as: :string1, facet: { size: 50 }
135
- # # field :countries, as: :string_array1
136
- # # field :deal_types, as: :string_array2, facet: {}
137
- # # field :tags, as: :string_array3, facet: {}
138
- # # field :type, default: -> { 'Catalog::CouponSearchable' }
139
- # # end
140
-
141
- # # end
142
-
143
- # # q = Coupon.cloudsearch.builder
144
-
145
- # # binding.pry
146
-
147
- # # class ProductController
148
-
149
- # # def load_userq
150
- # # @name = "scott"
151
- # # end
152
-
153
- # # def greeting
154
- # # "hello world!"
155
- # # end
156
-
157
- # # def search
158
- # # load_user
159
- # # q = Product.cloudsearch.and {
160
- # # binding.pry
161
- # # }
162
- # # end
163
-
164
- # # end
165
-
166
- # # test = ProductController.new
167
- # # test.search
82
+ # class Coupon
83
+ # include CloudSesame
84
+
85
+ # VALID_COUPON_RANK = 20
86
+
87
+ # define_cloudsearch do
88
+ # config.endpoint = ENV['AWS_ENDPOINT']
89
+ # config.region = ENV['AWS_REGION']
90
+
91
+ # default_size 10
92
+
93
+ # define_sloppiness 3
94
+
95
+ # define_fuzziness do
96
+ # max_fuzziness 3
97
+ # min_char_size 6
98
+ # fuzzy_percent 0.17
99
+ # end
100
+
101
+ # field :end_date, as: :date1
102
+ # field :rank, as: :num1, default: -> { gte VALID_COUPON_RANK }
103
+ # field :searchable_text, query: true
104
+ # field :affiliate_advertiser_search_ext_id, as: :string1, facet: { size: 50 }
105
+ # field :countries, as: :string_array1
106
+ # field :deal_types, as: :string_array2, facet: {}
107
+ # field :tags, as: :string_array3, facet: {}
108
+ # field :type, default: -> { 'Catalog::CouponSearchable' }
109
+ # end
110
+
111
+ # end
112
+
113
+ # @tags = [1, 2]
114
+ # n = 10_000
115
+ # q = nil
116
+ # result = RubyProf.profile do
117
+ # n.times do
118
+ # q = Product.cloudsearch.query("black jacket").sort(price: :asc).page(1).size(1000)
119
+ # .price { gt 100 }
120
+ # .and {
121
+ # or! {
122
+ # tags *@tags
123
+ # tags
124
+ # tags nil
125
+ # and! {
126
+ # tags.not "3", "4"
127
+ # }
128
+ # and!.not {
129
+ # tags.start_with "5", "6"
130
+ # tags.not.start_with("7")
131
+ # tags.not.near("8", distance: 7)
132
+ # tags start_with("9"), near("10")
133
+ # tags term("11", boost: 2)
134
+ # tags.not phrase "12"
135
+ # }
136
+ # or!.not {
137
+ # price(25..100)
138
+ # price 100...200
139
+ # price gte(200).lt(300)
140
+ # price gte(300)
141
+ # }
142
+ # or! {
143
+ # created_at Date.today - 7
144
+ # created_at gte(Date.today)
145
+ # created_at gte(Date.today).lt(Date.today + 3)
146
+ # }
147
+ # }
148
+ # }
149
+
150
+ # end
151
+ # end
152
+ # printer = RubyProf::FlatPrinter.new(result)
153
+ # printer.print(STDOUT, {})
154
+
155
+ # binding.pry
156
+
157
+
168
158
  # 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.6.3
4
+ version: 0.6.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Chu
@@ -12,10 +12,11 @@ authors:
12
12
  - Justine Jones
13
13
  - Gillian Chesnais
14
14
  - Jeff Li
15
+ - Nick Zhu
15
16
  autorequire:
16
17
  bindir: bin
17
18
  cert_chain: []
18
- date: 2016-02-09 00:00:00.000000000 Z
19
+ date: 2016-02-14 00:00:00.000000000 Z
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
21
22
  name: aws-sdk
@@ -122,8 +123,14 @@ files:
122
123
  - lib/cloud_sesame/context.rb
123
124
  - lib/cloud_sesame/domain/base.rb
124
125
  - lib/cloud_sesame/domain/client.rb
126
+ - lib/cloud_sesame/domain/client_module/caching.rb
127
+ - lib/cloud_sesame/domain/client_module/caching/base.rb
128
+ - lib/cloud_sesame/domain/client_module/caching/no_cache.rb
129
+ - lib/cloud_sesame/domain/client_module/caching/rails_cache.rb
130
+ - lib/cloud_sesame/domain/client_module/retry.rb
125
131
  - lib/cloud_sesame/domain/config.rb
126
132
  - lib/cloud_sesame/domain/context.rb
133
+ - lib/cloud_sesame/domain/error/caching.rb
127
134
  - lib/cloud_sesame/query/ast/and.rb
128
135
  - lib/cloud_sesame/query/ast/date_value.rb
129
136
  - lib/cloud_sesame/query/ast/field_array.rb
@@ -178,11 +185,17 @@ files:
178
185
  - profiler.rb
179
186
  - spec/abstract_object_spec.rb
180
187
  - spec/cloud_sesame/domain/base_spec.rb
188
+ - spec/cloud_sesame/domain/client_module/caching/base_spec.rb
189
+ - spec/cloud_sesame/domain/client_module/caching/no_cache_spec.rb
190
+ - spec/cloud_sesame/domain/client_module/caching/rails_cache_spec.rb
191
+ - spec/cloud_sesame/domain/client_module/caching_spec.rb
192
+ - spec/cloud_sesame/domain/client_spec.rb
181
193
  - spec/cloud_sesame/query/ast/and_spec.rb
182
194
  - spec/cloud_sesame/query/ast/multi_expression_operator_spec.rb
183
195
  - spec/cloud_sesame/query/ast/numeric_value_spec.rb
184
196
  - spec/cloud_sesame/query/ast/operator_spec.rb
185
197
  - spec/cloud_sesame/query/ast/or_spec.rb
198
+ - spec/cloud_sesame/query/ast/range_value_spec.rb
186
199
  - spec/cloud_sesame/query/ast/root_spec.rb
187
200
  - spec/cloud_sesame/query/ast/single_expression_operator_spec.rb
188
201
  - spec/cloud_sesame/query/builder_spec.rb
@@ -229,11 +242,17 @@ summary: AWS CloudSearch Query DSL
229
242
  test_files:
230
243
  - spec/abstract_object_spec.rb
231
244
  - spec/cloud_sesame/domain/base_spec.rb
245
+ - spec/cloud_sesame/domain/client_module/caching/base_spec.rb
246
+ - spec/cloud_sesame/domain/client_module/caching/no_cache_spec.rb
247
+ - spec/cloud_sesame/domain/client_module/caching/rails_cache_spec.rb
248
+ - spec/cloud_sesame/domain/client_module/caching_spec.rb
249
+ - spec/cloud_sesame/domain/client_spec.rb
232
250
  - spec/cloud_sesame/query/ast/and_spec.rb
233
251
  - spec/cloud_sesame/query/ast/multi_expression_operator_spec.rb
234
252
  - spec/cloud_sesame/query/ast/numeric_value_spec.rb
235
253
  - spec/cloud_sesame/query/ast/operator_spec.rb
236
254
  - spec/cloud_sesame/query/ast/or_spec.rb
255
+ - spec/cloud_sesame/query/ast/range_value_spec.rb
237
256
  - spec/cloud_sesame/query/ast/root_spec.rb
238
257
  - spec/cloud_sesame/query/ast/single_expression_operator_spec.rb
239
258
  - spec/cloud_sesame/query/builder_spec.rb