search_and_resque 0.3.3 → 0.3.4
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/lib/search_and_resque/callbacks.rb +4 -10
- data/lib/search_and_resque/version.rb +1 -1
- data/lib/search_and_resque.rb +15 -3
- data/test/search_and_resque_test.rb +20 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8575aca9094955ecb328163636e194afe5c44aab
|
4
|
+
data.tar.gz: d5fff4dda4b734eb3c520b8d7cdfc591546e11f5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dc66289fcd27861e15e201efbbfb879f79435cdf909578e3baac2a78961de84249cbd0ef9578d9ed25968961863e185282f0538de2d61b2cd88c61677813b686
|
7
|
+
data.tar.gz: dd0033c82068f3fc4ac43f62f8f6fa3bc7d649f3ea7b75927df001d2fc34a588c4cca0712e9f5e23d702cf92cfd859bfa9979c8d7240e71c7b5fc56a93263ed6
|
@@ -2,14 +2,6 @@ module SearchAndResque
|
|
2
2
|
module Callbacks
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
|
-
included do
|
6
|
-
class << self
|
7
|
-
attr_accessor :elastic_search_type
|
8
|
-
end
|
9
|
-
after_save :enqueue_elastic_search_update
|
10
|
-
after_destroy :enqueue_elastic_search_delete
|
11
|
-
end
|
12
|
-
|
13
5
|
module ClassMethods
|
14
6
|
def enqueue_elastic_search_update(ids)
|
15
7
|
ids = Array(ids).map{ |x| x.is_a?(ActiveRecord::Base) ? x.id : x }
|
@@ -23,11 +15,13 @@ module SearchAndResque
|
|
23
15
|
end
|
24
16
|
|
25
17
|
def enqueue_elastic_search_update
|
26
|
-
|
18
|
+
if should_update_elastic_search?
|
19
|
+
self.class.enqueue_elastic_search_update(elastic_search_id)
|
20
|
+
end
|
27
21
|
end
|
28
22
|
|
29
23
|
def enqueue_elastic_search_delete
|
30
|
-
self.class.enqueue_elastic_search_delete(
|
24
|
+
self.class.enqueue_elastic_search_delete(elastic_search_id)
|
31
25
|
end
|
32
26
|
|
33
27
|
# e.g.
|
data/lib/search_and_resque.rb
CHANGED
@@ -31,12 +31,24 @@ module SearchAndResque
|
|
31
31
|
module ClassMethods
|
32
32
|
def search_and_resque(type_name, options={})
|
33
33
|
unless included_modules.include?(SearchAndResque::Callbacks)
|
34
|
-
options[:if] ||= ->{ true }
|
35
|
-
define_method(:should_update_elastic_search?, &options[:if])
|
36
|
-
|
37
34
|
@elastic_search_type = "#{type_name}"
|
35
|
+
class << self
|
36
|
+
attr_accessor :elastic_search_type
|
37
|
+
end
|
38
38
|
|
39
39
|
include SearchAndResque::Callbacks
|
40
|
+
after_save :enqueue_elastic_search_update
|
41
|
+
if options[:id]
|
42
|
+
after_destroy :enqueue_elastic_search_update
|
43
|
+
else
|
44
|
+
after_destroy :enqueue_elastic_search_delete
|
45
|
+
end
|
46
|
+
|
47
|
+
options[:if] ||= ->{ true }
|
48
|
+
define_method(:should_update_elastic_search?, &options[:if])
|
49
|
+
|
50
|
+
options[:id] ||= ->{ id }
|
51
|
+
define_method(:elastic_search_id, &options[:id])
|
40
52
|
end
|
41
53
|
end
|
42
54
|
end
|
@@ -20,8 +20,9 @@ end
|
|
20
20
|
|
21
21
|
def setup!
|
22
22
|
connect!
|
23
|
-
ActiveRecord::Base.connection.execute 'CREATE TABLE books (id INTEGER NOT NULL PRIMARY KEY,
|
24
|
-
ActiveRecord::Base.connection.execute 'CREATE TABLE films (id INTEGER NOT NULL PRIMARY KEY,
|
23
|
+
ActiveRecord::Base.connection.execute 'CREATE TABLE books (id INTEGER NOT NULL PRIMARY KEY, title STRING)'
|
24
|
+
ActiveRecord::Base.connection.execute 'CREATE TABLE films (id INTEGER NOT NULL PRIMARY KEY, title STRING, director STRING)'
|
25
|
+
ActiveRecord::Base.connection.execute 'CREATE TABLE scores (id INTEGER NOT NULL PRIMARY KEY, film_id INTEGER NOT NULL, composer STRING)'
|
25
26
|
end
|
26
27
|
|
27
28
|
setup!
|
@@ -31,9 +32,15 @@ class Book < ActiveRecord::Base
|
|
31
32
|
end
|
32
33
|
|
33
34
|
class Film < ActiveRecord::Base
|
35
|
+
has_one :score
|
34
36
|
search_and_resque :films, :if => ->{ title_changed? }
|
35
37
|
end
|
36
38
|
|
39
|
+
class Score < ActiveRecord::Base
|
40
|
+
belongs_to :film
|
41
|
+
search_and_resque :films, id: ->{ film_id }
|
42
|
+
end
|
43
|
+
|
37
44
|
class SearchAndResqueTestIndex < Chewy::Index
|
38
45
|
define_type Book, :name => 'books' do
|
39
46
|
field :title
|
@@ -42,6 +49,7 @@ class SearchAndResqueTestIndex < Chewy::Index
|
|
42
49
|
define_type Film, :name => 'films' do
|
43
50
|
field :title
|
44
51
|
field :director
|
52
|
+
field :score_composer, value: ->{ score.try(:composer) }
|
45
53
|
end
|
46
54
|
end
|
47
55
|
|
@@ -91,4 +99,14 @@ class SearchAndResqueTest < test_framework
|
|
91
99
|
film.update_attributes(:title => 'three', :director => 'four')
|
92
100
|
assert_equal 'four', SearchAndResqueTestIndex::Films.filter(:ids => {:values => [film.id]}).first.director
|
93
101
|
end
|
102
|
+
|
103
|
+
def test_cross_type_update_and_delete
|
104
|
+
film = Film.create(:title => 'one', :director => 'two')
|
105
|
+
|
106
|
+
score = film.create_score(composer: 'Howard Shore')
|
107
|
+
assert_equal 'Howard Shore', SearchAndResqueTestIndex::Films.filter(:ids => {values: [film.id]}).first.score_composer
|
108
|
+
|
109
|
+
score.destroy
|
110
|
+
assert_equal nil, SearchAndResqueTestIndex::Films.filter(:ids => {values: [film.id]}).first.score_composer
|
111
|
+
end
|
94
112
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: search_and_resque
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Woo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-05-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|