plok 1.1.1 → 1.1.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
  SHA256:
3
- metadata.gz: 7801b68f7ae1a30624a95fcf9713bb1251f2e7831960ddd173e64b152ba24f94
4
- data.tar.gz: 057c7d13a8922bdeba6150e6d2df6ecec65d0f8af169a50b879ccadbee3688b3
3
+ metadata.gz: 6267c2e65f2bdf7db8fcefb866007f1dbfa6f283ad481facb47017bad424a05d
4
+ data.tar.gz: ded3e9ac5159983bd1560b693ba02b312ae7b5f3fce0b100774df30e5e42a18a
5
5
  SHA512:
6
- metadata.gz: '087677f2caccca0fc4d2e342790860f8514aa002447f2555e018aa4e60e5bb817111209c7cea3c84452ec24b717291fe1e05dc061623cc7b5dd2cd5791271f4b'
7
- data.tar.gz: 394542cf38ab37c5740622fee0fc6de8c0b9bd9697e91b94323a3b0edd84ce60aa750af2daf14ccdaaa5782282d548c5ac7a9a77fd56567e936f9164c9a631c2
6
+ metadata.gz: 540e8f264ea10b8448edd0547edf00bdd1e807b85182be10c8f5a9a0543c83ca00ed3f56371ee5c34ff6fb268caf287f00673b994c2fc8e093c7fa5eaf7aab05
7
+ data.tar.gz: 895fb179a873f3789959a36f65c9b0cfddfe83f9003d3320e372545d020baf340ff0464184f6922428748e4a7213c6b2a364dfed4248ebd9ddd04b428f8be643
@@ -16,17 +16,17 @@ module Plok::Searchable
16
16
  end
17
17
 
18
18
  def trigger_indices_save!
19
- self.class.searchable_fields_list.each do |namespace, keys|
20
- keys.each do |key|
21
- if key == :flexible_content
19
+ self.class.searchable_fields_list.each do |namespace, fields|
20
+ fields.each do |field|
21
+ if field[:name] == :flexible_content
22
22
  save_flexible_content_search_indices!(namespace) && next
23
23
  end
24
24
 
25
- if respond_to?(:translatable?) && self.class.translatable_fields_list.include?(key)
26
- save_translatable_search_index!(namespace, key) && next
25
+ if respond_to?(:translatable?) && self.class.translatable_fields_list.include?(field[:name])
26
+ save_translatable_search_index!(namespace, field[:name]) && next
27
27
  end
28
28
 
29
- save_search_index!(namespace, key)
29
+ save_search_index!(namespace, field[:name], conditions: field[:conditions])
30
30
  end
31
31
  end
32
32
  end
@@ -51,7 +51,11 @@ module Plok::Searchable
51
51
  end
52
52
  end
53
53
 
54
- def save_search_index!(namespace, key, value: nil, locale: nil)
54
+ def save_search_index!(namespace, key, value: nil, locale: nil, conditions: [])
55
+ if conditions.any?
56
+ return unless conditions.map { |c| send(c) }.all?
57
+ end
58
+
55
59
  value = if value.present?
56
60
  value
57
61
  elsif ActiveRecord::Base.connection.column_exists?(self.class.table_name, key)
@@ -81,18 +85,23 @@ module Plok::Searchable
81
85
  end
82
86
 
83
87
  module ClassMethods
84
- def searchable_field(namespace, key)
85
- return if searchable_fields_list.dig(namespace.to_sym)&.include?(key.to_sym)
88
+ def searchable_field(namespace, key, conditions)
89
+ return if !!searchable_fields_list.dig(namespace.to_sym)&.detect do |field|
90
+ field[:name] == key.to_sym
91
+ end
86
92
 
87
93
  if searchable_fields_list[namespace.to_sym].blank?
88
94
  searchable_fields_list[namespace.to_sym] = []
89
95
  end
90
96
 
91
- searchable_fields_list[namespace.to_sym] << key.to_sym
97
+ searchable_fields_list[namespace.to_sym] << {
98
+ name: key.to_sym,
99
+ conditions: conditions
100
+ }
92
101
  end
93
102
 
94
103
  def plok_searchable(namespace: nil, fields: [], conditions: [])
95
- fields.each { |key| searchable_field(namespace, key) }
104
+ fields.each { |key| searchable_field(namespace, key, conditions) }
96
105
  end
97
106
 
98
107
  def searchable_fields_list
data/lib/plok/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Plok
2
- VERSION = '1.1.1'
2
+ VERSION = '1.1.3'
3
3
  end
@@ -9,10 +9,18 @@ shared_examples_for :searchable do
9
9
  # Because this is a spec/support included through it_behaves_like,
10
10
  # we have to mock the entry points of the data used in
11
11
  # Plok::Searchable.
12
- allow(described_class).to receive(:searchable_fields_list) { [:foo] }
12
+ allow(described_class).to receive(:searchable_fields_list) do
13
+ {
14
+ backend: [
15
+ { name: :foo, conditions: [] }
16
+ ]
17
+ }
18
+ end
19
+
13
20
  if described_class.respond_to?(:translatable_fields_list)
14
21
  allow(described_class).to receive(:translatable_fields_list) { [] }
15
22
  end
23
+
16
24
  described_class.define_method(:foo) { 'bar' }
17
25
  end
18
26
 
@@ -27,7 +35,13 @@ shared_examples_for :searchable do
27
35
 
28
36
  if described_class.respond_to?(:translatable_fields)
29
37
  before do
30
- allow(described_class).to receive(:searchable_fields_list) { [:foo] }
38
+ allow(described_class).to receive(:searchable_fields_list) do
39
+ {
40
+ backend: [
41
+ { name: :foo, conditions: [] }
42
+ ]
43
+ }
44
+ end
31
45
  end
32
46
 
33
47
  context 'translatable model' do
@@ -62,7 +76,14 @@ shared_examples_for :searchable do
62
76
  # Because this is a spec/support included through it_behaves_like,
63
77
  # we have to mock the entry points of the data used in
64
78
  # Plok::Searchable.
65
- allow(described_class).to receive(:searchable_fields_list) { [:foo] }
79
+ allow(described_class).to receive(:searchable_fields_list) do
80
+ {
81
+ backend: [
82
+ { name: :foo, conditions: [] }
83
+ ]
84
+ }
85
+ end
86
+
66
87
  allow_any_subject_of(described_class).to receive(:foo) { 'bar' }
67
88
  allow_any_subject_of(Concerns::Storable::Collection).to receive(:foo) { 'bar' }
68
89
 
@@ -90,7 +111,7 @@ shared_examples_for :searchable do
90
111
 
91
112
  it '.respond_to?' do
92
113
  expect(described_class).to respond_to(
93
- :searchable_field, :searchable_fields, :searchable_fields_list
114
+ :plok_searchable, :searchable_field, :searchable_fields_list
94
115
  )
95
116
  end
96
117
 
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.1
4
+ version: 1.1.3
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-05 00:00:00.000000000 Z
12
+ date: 2022-11-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails