elastic_queue 0.0.2 → 0.0.3

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: 5fba6995c9fb76fcb3b2f7e0e204bf5c955e243b
4
- data.tar.gz: a47b1f04bf521b2a4c42f1fee5f2be4feee51256
3
+ metadata.gz: fdf43269d558684715697697975c108d4d11f31d
4
+ data.tar.gz: 43ce25310c882bee9ac73d5bf978c0f3657b2679
5
5
  SHA512:
6
- metadata.gz: f7e36b7ac21298dd00e897b1f7c4e16f02a0b20c3bd21b33d4e68fded773acb9ebd712dba768bd73ea216f2f3b52ccc85989168997c27f57dd821f6b8044866e
7
- data.tar.gz: 16409af91a7ae6020d5844a68b4ceddfbe0a53283d1bb3e7cb066210d400c40e0963ba7082a0ecaa17700a46cade6ecaa404ee585f6063dd39675c8895b23b1c
6
+ metadata.gz: 7ec73971d3c7452b12a21c0bdde935f52f78e0f5bf93265edd15b1be0bcb3c8a0291d40236a604e3b09aa49db2cd60eda5b51e865b6a9618dd22d6de9176e639
7
+ data.tar.gz: e568ab3b5c296b870fe5f7cb47b813169ef25eba80d91d10cc66d16c9b1ad1d70aac50346ee72dd98696c91c4ebcac3f7ed8629ecc0015548975a4a7ebb7d1f6
@@ -1,11 +1,12 @@
1
1
  require 'elasticsearch'
2
2
  require 'elastic_queue/persistence'
3
+ require 'elastic_queue/percolation'
3
4
  require 'elastic_queue/query'
4
5
 
5
6
  module ElasticQueue
6
7
  class Base
7
8
  include Persistence
8
- # include Percolation
9
+ include Percolation
9
10
 
10
11
  def self.search_client
11
12
  Elasticsearch::Client.new
@@ -16,7 +17,7 @@ module ElasticQueue
16
17
  end
17
18
 
18
19
  def self.model_names
19
- raise NotImplementedError, "No models defined in #{self.class}" unless defined?(@models)
20
+ fail NotImplementedError, "No models defined in #{self.class}" unless defined?(@models)
20
21
  @models
21
22
  end
22
23
 
@@ -47,6 +48,5 @@ module ElasticQueue
47
48
  def self.count
48
49
  query.count
49
50
  end
50
-
51
51
  end
52
52
  end
@@ -42,6 +42,5 @@ module ElasticQueue
42
42
  def range_filter(term, value, comparator)
43
43
  { range: { term => { comparator => value } } }
44
44
  end
45
-
46
45
  end
47
46
  end
@@ -3,40 +3,38 @@ module ElasticQueue
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  module ClassMethods
6
-
7
- # def percolator_queries
8
- # queries = {}
9
- # query = { 'query' => {'match_all' => {}} }
10
- # search = search_client.search index: '_percolator', body: query.to_json, size: 1000
11
- # debugger
12
- # search['hits']['hits'].each { |hit| queries[hit['_id']] = hit['_source'] }
13
- # queries
14
- # end
15
-
6
+ def percolator_queries
7
+ queries = {}
8
+ search = search_client.search index: '_percolator', body: { 'query' => { 'match_all' => {} } }, size: 1000
9
+ search['hits']['hits'].each { |hit| queries[hit['_id']] = hit['_source'] }
10
+ queries
11
+ end
12
+
13
+ def reverse_search(model)
14
+ percolation = search_client.percolate index: index_name, body: { 'doc' => model.indexed_for_queue }
15
+ percolation['matches']
16
+ end
17
+
18
+ def unregister_percolator_query(name)
19
+ search_client.delete index: '_percolator', type: index_name, id: name
20
+ end
21
+
22
+ def register_percolator_query(name, body)
23
+ search_client.index index: '_percolator', type: index_name, id: name, body: body
24
+ end
16
25
  end
17
26
 
18
- # def reverse_search(instance)
19
- # body = { 'doc' => instance.indexed_for_queue }
20
- # search_client.percolate index: index_name, body: body.to_json
21
- # end
22
-
23
- # def register_percolator_query(name, opts)
24
- # search_client.index index: '_percolator', type: index_name, id: name, body: translate_opts_to_query_for_percolator(opts)
25
- # end
26
-
27
- # def unregister_percolator_query(name)
28
- # SEARCH_CLIENT.delete index: '_percolator', type: index_name, id: name
29
- # end
30
-
31
- # def model_in_queue?(model, queue_opts)
32
- # return false unless model_names.include?(model.class.to_s.underscore.to_sym)
33
- # search_id = SecureRandom.uuid
34
- # body = { 'doc' => model.indexed_for_queue, 'query' => {'term' => {'_id' => search_id}} }
35
- # SEARCH_CLIENT.index index: '_percolator', type: 'dynamic_percolator', id: search_id, body: translate_opts_to_query_for_percolator(queue_opts), refresh: true
36
- # search = SEARCH_CLIENT.percolate index: 'dynamic_percolator', body: body.to_json
37
- # SEARCH_CLIENT.delete index: '_percolator', type: 'dynamic_percolator', id: search_id
38
- # search['matches'].length == 1
39
- # end
27
+ def in_queue?(model)
28
+ return false unless self.class.model_names.include?(model.class.to_s.underscore.to_sym)
29
+ search_id = SecureRandom.uuid
30
+ self.class.search_client.index index: '_percolator', type: 'dynamic_percolator', id: search_id, body: @query.percolator_body, refresh: true
31
+ search = self.class.search_client.percolate index: 'dynamic_percolator', body: { 'doc' => model.indexed_for_queue, 'query' => { 'term' => { '_id' => search_id } } }
32
+ self.class.search_client.delete index: '_percolator', type: 'dynamic_percolator', id: search_id
33
+ search['matches'].length == 1
34
+ end
40
35
 
36
+ def register_as_percolator_query(name)
37
+ self.class.register_percolator_query(name, @query.percolator_body)
38
+ end
41
39
  end
42
40
  end
@@ -3,7 +3,6 @@ module ElasticQueue
3
3
  module Persistence
4
4
  extend ActiveSupport::Concern
5
5
  module ClassMethods
6
-
7
6
  def index_exists?
8
7
  search_client.indices.exists index: index_name
9
8
  end
@@ -61,8 +60,6 @@ module ElasticQueue
61
60
  def remove_model(instance)
62
61
  search_client.delete index: index_name, id: instance.id, type: instance.class.to_s.underscore
63
62
  end
64
-
65
63
  end
66
-
67
64
  end
68
65
  end
@@ -3,7 +3,6 @@ require 'elastic_queue/results'
3
3
 
4
4
  module ElasticQueue
5
5
  class Query
6
-
7
6
  def initialize(queue, options = {})
8
7
  @queue = queue
9
8
  @options = QueryOptions.new(options)
@@ -27,11 +26,23 @@ module ElasticQueue
27
26
  @options.sorts
28
27
  end
29
28
 
29
+ def body
30
+ @options.body
31
+ end
32
+
33
+ def percolator_body
34
+ @options.percolator_body
35
+ end
36
+
30
37
  def paginate(options = {})
31
38
  options.each { |k, v| @options.send("#{k}=", v) }
32
39
  all.paginate
33
40
  end
34
41
 
42
+ def page=(page)
43
+ @options.page = (page)
44
+ end
45
+
35
46
  def all
36
47
  @results ||= Results.new(@queue, execute, @options)
37
48
  end
@@ -44,7 +55,7 @@ module ElasticQueue
44
55
  def execute(count: false)
45
56
  search_type = count ? 'count' : 'query_then_fetch'
46
57
  begin
47
- search = @queue.search_client.search index: @queue.index_name, body: @options.body, search_type: search_type, from: @options.from, size: @options.per_page
58
+ search = @queue.search_client.search index: @queue.index_name, body: body, search_type: search_type, from: @options.from, size: @options.per_page
48
59
  # search[:page] = @page
49
60
  # search = substitute_page(opts, search) if !count && opts[:page_substitution_ok] && search['hits']['hits'].length == 0 && search['hits']['total'] != 0
50
61
  rescue Elasticsearch::Transport::Transport::Errors::BadRequest
@@ -56,7 +67,5 @@ module ElasticQueue
56
67
  def failed_search
57
68
  { page: 0, hits: { hits: [], total: 0 } }
58
69
  end
59
-
60
70
  end
61
-
62
71
  end
@@ -6,7 +6,7 @@ module ElasticQueue
6
6
  include Filters
7
7
  include Sorts
8
8
 
9
- attr_reader :filters, :sorts
9
+ attr_reader :filters, :sorts, :page
10
10
  attr_accessor :per_page
11
11
 
12
12
  def initialize(options = {})
@@ -33,10 +33,6 @@ module ElasticQueue
33
33
  @page = num.to_i unless num.blank?
34
34
  end
35
35
 
36
- def page
37
- @page
38
- end
39
-
40
36
  def body
41
37
  b = {}
42
38
  b[:filter] = @filters unless @filters[:and].blank?
@@ -44,5 +40,10 @@ module ElasticQueue
44
40
  b
45
41
  end
46
42
 
43
+ def percolator_body
44
+ b = {}
45
+ b[:filter] = @filters unless @filters[:and].blank?
46
+ { 'query' => { 'constant_score' => b } }
47
+ end
47
48
  end
48
49
  end
@@ -9,7 +9,6 @@ module ElasticQueue
9
9
  end
10
10
 
11
11
  module ClassMethods
12
-
13
12
  def queues(*queues)
14
13
  @queues ||= queues
15
14
  end
@@ -39,9 +38,8 @@ module ElasticQueue
39
38
  @not_analyzed_queue_attributes.each do |a|
40
39
  properties[a.to_sym] = { type: :string, index: :not_analyzed }
41
40
  end
42
- { self.to_s.underscore.to_sym => { properties: properties } }
41
+ { to_s.underscore.to_sym => { properties: properties } }
43
42
  end
44
-
45
43
  end
46
44
 
47
45
  def indexed_for_queue
@@ -61,6 +59,5 @@ module ElasticQueue
61
59
  def remove_from_queue_indices
62
60
  self.class.queue_classes.each { |q| q.send(:remove_model, self) }
63
61
  end
64
-
65
62
  end
66
63
  end
@@ -1,26 +1,21 @@
1
1
  require 'will_paginate/collection'
2
2
 
3
3
  module ElasticQueue
4
-
5
4
  class Results
5
+ attr_reader :paginate
6
6
 
7
- attr_reader :results
8
-
7
+ delegate :empty?, :each, :total_entries, :total_pages, :current_page, to: :paginate
9
8
  def initialize(queue, search_results, query_options)
10
9
  @queue = queue
11
10
  @instantiated_queue_items = instantiate_queue_items(search_results)
12
11
  @start = query_options.page
13
12
  @per_page = query_options.per_page
14
13
  @total = search_results[:hits][:total]
15
- @results = WillPaginate::Collection.create(@start, @per_page, @total) do |pager|
14
+ @paginate = WillPaginate::Collection.create(@start, @per_page, @total) do |pager|
16
15
  pager.replace(@instantiated_queue_items)
17
16
  end
18
17
  end
19
18
 
20
- def paginate
21
- @results
22
- end
23
-
24
19
  def instantiate_queue_items(search_results)
25
20
  grouped_results, sort_order = group_sorted_results(search_results)
26
21
  records = fetch_records(grouped_results)
@@ -62,6 +57,5 @@ module ElasticQueue
62
57
  sort_order["#{a.class.name.underscore}_#{a.id}"] <=> sort_order["#{b.class.name.underscore}_#{b.id}"]
63
58
  end
64
59
  end
65
-
66
60
  end
67
61
  end
@@ -2,9 +2,6 @@ module ElasticQueue
2
2
  module Sorts
3
3
  extend ActiveSupport::Concern
4
4
 
5
- module ClassMethods
6
- end
7
-
8
5
  def options_to_sorts(options)
9
6
  options.map { |k, v| option_to_sort(k, v) }
10
7
  end
@@ -18,6 +15,5 @@ module ElasticQueue
18
15
  def single_sort(order_by, order)
19
16
  { order_by => { order: order, ignore_unmapped: true } }
20
17
  end
21
-
22
18
  end
23
19
  end
@@ -1,3 +1,3 @@
1
1
  module ElasticQueue
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.3'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elastic_queue
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ruth Thompson
@@ -9,104 +9,104 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-02-04 00:00:00.000000000 Z
12
+ date: 2014-02-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - '>='
18
+ - - ">="
19
19
  - !ruby/object:Gem::Version
20
20
  version: '0'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - '>='
25
+ - - ">="
26
26
  - !ruby/object:Gem::Version
27
27
  version: '0'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: elasticsearch
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - '>='
32
+ - - ">="
33
33
  - !ruby/object:Gem::Version
34
34
  version: '0'
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - '>='
39
+ - - ">="
40
40
  - !ruby/object:Gem::Version
41
41
  version: '0'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: will_paginate
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - '>='
46
+ - - ">="
47
47
  - !ruby/object:Gem::Version
48
48
  version: '0'
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - '>='
53
+ - - ">="
54
54
  - !ruby/object:Gem::Version
55
55
  version: '0'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: bundler
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
- - - '>='
60
+ - - ">="
61
61
  - !ruby/object:Gem::Version
62
62
  version: 1.0.0
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
- - - '>='
67
+ - - ">="
68
68
  - !ruby/object:Gem::Version
69
69
  version: 1.0.0
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: rspec
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
- - - ~>
74
+ - - "~>"
75
75
  - !ruby/object:Gem::Version
76
76
  version: '2.6'
77
77
  type: :development
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
- - - ~>
81
+ - - "~>"
82
82
  - !ruby/object:Gem::Version
83
83
  version: '2.6'
84
84
  - !ruby/object:Gem::Dependency
85
85
  name: factory_girl
86
86
  requirement: !ruby/object:Gem::Requirement
87
87
  requirements:
88
- - - '>='
88
+ - - ">="
89
89
  - !ruby/object:Gem::Version
90
90
  version: '0'
91
91
  type: :development
92
92
  prerelease: false
93
93
  version_requirements: !ruby/object:Gem::Requirement
94
94
  requirements:
95
- - - '>='
95
+ - - ">="
96
96
  - !ruby/object:Gem::Version
97
97
  version: '0'
98
98
  - !ruby/object:Gem::Dependency
99
99
  name: rake
100
100
  requirement: !ruby/object:Gem::Requirement
101
101
  requirements:
102
- - - '>='
102
+ - - ">="
103
103
  - !ruby/object:Gem::Version
104
104
  version: '0'
105
105
  type: :development
106
106
  prerelease: false
107
107
  version_requirements: !ruby/object:Gem::Requirement
108
108
  requirements:
109
- - - '>='
109
+ - - ">="
110
110
  - !ruby/object:Gem::Version
111
111
  version: '0'
112
112
  description: A library for storing and filtering documents on elastic search with
@@ -118,8 +118,8 @@ executables: []
118
118
  extensions: []
119
119
  extra_rdoc_files: []
120
120
  files:
121
- - .gitignore
122
- - .rubocop.yml
121
+ - ".gitignore"
122
+ - ".rubocop.yml"
123
123
  - Gemfile
124
124
  - Gemfile.lock
125
125
  - LICENSE
@@ -153,17 +153,17 @@ require_paths:
153
153
  - lib
154
154
  required_ruby_version: !ruby/object:Gem::Requirement
155
155
  requirements:
156
- - - '>='
156
+ - - ">="
157
157
  - !ruby/object:Gem::Version
158
158
  version: 1.9.2
159
159
  required_rubygems_version: !ruby/object:Gem::Requirement
160
160
  requirements:
161
- - - '>='
161
+ - - ">="
162
162
  - !ruby/object:Gem::Version
163
163
  version: '0'
164
164
  requirements: []
165
165
  rubyforge_project:
166
- rubygems_version: 2.0.6
166
+ rubygems_version: 2.2.0.preview.1
167
167
  signing_key:
168
168
  specification_version: 4
169
169
  summary: A queueing system built on top of elasticsearch.