elastic_queue 0.0.2 → 0.0.3

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 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.