plok 1.1.3 → 1.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6267c2e65f2bdf7db8fcefb866007f1dbfa6f283ad481facb47017bad424a05d
4
- data.tar.gz: ded3e9ac5159983bd1560b693ba02b312ae7b5f3fce0b100774df30e5e42a18a
3
+ metadata.gz: 1f3ad1b023f6d523f5766b822fcc60d26cccb4983a46ec6e7efcc75d88fce4d0
4
+ data.tar.gz: 6ab0505a105e0534a15470b3b161ef23d6b49161ea2962af3dd34ff3c5819318
5
5
  SHA512:
6
- metadata.gz: 540e8f264ea10b8448edd0547edf00bdd1e807b85182be10c8f5a9a0543c83ca00ed3f56371ee5c34ff6fb268caf287f00673b994c2fc8e093c7fa5eaf7aab05
7
- data.tar.gz: 895fb179a873f3789959a36f65c9b0cfddfe83f9003d3320e372545d020baf340ff0464184f6922428748e4a7213c6b2a364dfed4248ebd9ddd04b428f8be643
6
+ metadata.gz: 418a0736b07848ff337b82ce1207ab4904810e6fd643ff15a93a44a125d7e35e676f981991e4d7f129f92d667d8602f976e3eddd72fb78c5b6c2d9d7b26e9b32
7
+ data.tar.gz: 9cac24540be3eafc2335cbb9b36e6bef87b65c80fcf9d3ea1850070b890cbd6840ea83e8b353ab977c73837049e93affbbbd1b96dcb77bfe3594ec6b50af3a22
@@ -3,7 +3,7 @@ module Plok::Searchable
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  included do
6
- has_many :search_indices, as: :searchable
6
+ has_many :search_indices, as: :searchable, dependent: :destroy
7
7
 
8
8
  # The after_save block creates or saves indices for every indicated
9
9
  # searchable field. Takes both translations and flexible content into
data/lib/plok/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Plok
2
- VERSION = '1.1.3'
2
+ VERSION = '1.1.4'
3
3
  end
@@ -0,0 +1,47 @@
1
+ namespace 'plok:search' do
2
+ # The official Rails way to pass arguments to Rake tasks is this:
3
+ #
4
+ # task :rebuild_indices, [:modules] => :environment do |_t, args|
5
+ # args.with_defaults(modules: SearchModule.searchable.pluck(:klass))
6
+ # end
7
+ #
8
+ # The problem with that is that you can't comma-separate multiple modules
9
+ # unless you escape them. This is because commas denote multiple arguments.
10
+ #
11
+ # In short, this wouldn't work:
12
+ #
13
+ # bin/rails plok:search:rebuild_indices[EmailTemplate,Article]
14
+ #
15
+ # And you'd need to do this:
16
+ #
17
+ # bin/rails plok:search:rebuild_indices["EmailTemplate\,Article"]
18
+ #
19
+ # I don't agree with that notation, so instead I opted for ENV vars instead:
20
+ #
21
+ # bin/rails plok:search:rebuild_indices modules=EmailTemplate,Article
22
+ #
23
+ desc 'Rebuild select search indices (or all of them without additional arguments).'
24
+ task rebuild_indices: :environment do
25
+ # Default to all searchable modules
26
+ modules = ENV['modules']&.split(',') || SearchModule.searchable.pluck(:klass)
27
+
28
+ # A safeguard to prevent mishaps
29
+ modules.select! do |m|
30
+ SearchModule.exists?(klass: m) && # Only known modules
31
+ Plok::Engine.class_exists?(m.constantize) # Only existing classes
32
+ end
33
+
34
+ SearchModule.where(klass: modules).each do |m|
35
+ puts "Removing existing #{m.klass} indices..."
36
+ # Faster than SearchIndex.where(searchable_type: modules).destroy_all
37
+ ActiveRecord::Base
38
+ .connection
39
+ .execute("DELETE FROM search_indices WHERE searchable_type = '#{m.klass}'")
40
+
41
+ puts "Rebuilding #{m.klass} indices..."
42
+ m.klass.constantize.all.each(&:trigger_indices_save!)
43
+ end
44
+
45
+ puts "Done."
46
+ end
47
+ end
@@ -1,46 +0,0 @@
1
- namespace 'plok:search' do
2
- # The official Rails way to pass arguments to Rake tasks is this:
3
- #
4
- # task :rebuild_indices, [:modules] => :environment do |_t, args|
5
- # args.with_defaults(modules: SearchModule.searchable.pluck(:klass))
6
- # end
7
- #
8
- # The problem with that is that you can't comma-separate multiple modules
9
- # unless you escape them. This is because commas denote multiple arguments.
10
- #
11
- # In short, this wouldn't work:
12
- #
13
- # bin/rails plok:search:rebuild_indices[EmailTemplate,Article]
14
- #
15
- # And you'd need to do this:
16
- #
17
- # bin/rails plok:search:rebuild_indices["EmailTemplate\,Article"]
18
- #
19
- # I don't agree with that notation, so instead I opted for ENV vars instead:
20
- #
21
- # bin/rails plok:search:rebuild_indices modules=EmailTemplate,Article
22
- #
23
- desc 'Rebuild select search indices (or all of them without additional arguments).'
24
- task rebuild_indices: :environment do
25
- # Default to all searchable modules
26
- modules = ENV['modules']&.split(',') || SearchModule.searchable.pluck(:klass)
27
-
28
- # A safeguard to prevent mishaps
29
- modules.select! do |m|
30
- SearchModule.exists?(klass: m) && # Only known modules
31
- Plok::Engine.class_exists?(m.constantize) # Only existing classes
32
- end
33
-
34
- # Faster than SearchIndex.where(searchable_type: modules).destroy_all
35
- ActiveRecord::Base
36
- .connection
37
- .execute("DELETE FROM search_indices WHERE searchable_type in ('#{modules.join("','")}')")
38
-
39
- SearchModule.where(klass: modules).each do |m|
40
- puts "Rebuilding #{m.klass} indices..."
41
- m.klass.constantize.all.each(&:trigger_indices_save!)
42
- end
43
-
44
- puts "Done."
45
- end
46
- end
@@ -3,6 +3,16 @@ require 'rails_helper'
3
3
  shared_examples_for :searchable do
4
4
  let(:klass) { described_class.to_s.underscore.to_sym }
5
5
 
6
+ describe 'relations' do
7
+ context 'when destroying a searchable model' do
8
+ it 'deletes all linked SearchIndex records' do
9
+ subject = create(klass)
10
+ index = create(:search_index, searchable: subject)
11
+ expect { subject.destroy }.to change(SearchIndex, :count)
12
+ end
13
+ end
14
+ end
15
+
6
16
  describe 'after_save' do
7
17
  context 'non-translatable model' do
8
18
  before do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: plok
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.3
4
+ version: 1.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Davy Hellemans
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-11-09 00:00:00.000000000 Z
12
+ date: 2023-02-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -67,6 +67,20 @@ dependencies:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
69
  version: '6.0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: database_cleaner-active_record
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '2.0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: '2.0'
70
84
  description: Some basics used for setting up rails projects
71
85
  email:
72
86
  - davy@blimp.be
@@ -125,6 +139,7 @@ files:
125
139
  - lib/plok/search/result_objects/base.rb
126
140
  - lib/plok/search/term.rb
127
141
  - lib/plok/version.rb
142
+ - lib/tasks/plok/search.rake
128
143
  - lib/tasks/plok_tasks.rake
129
144
  - spec/factories/logs.rb
130
145
  - spec/factories/queued_tasks.rb