full_search 0.3.1 → 0.3.2

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: 866994a5c7f55cea4237fb2edcbf59f1f7c8c32772c6830df737bcbea4a6f1c6
4
- data.tar.gz: 5a11ccf1c48abd1050288bbb7107b8ade82132e009ac23ed5803ed153675f535
3
+ metadata.gz: 540d8604b539de87bf3d8448c33319a80853132d5d1911d8d0c12bbc35f87ea0
4
+ data.tar.gz: 63d7304396d67181ed0b35d35b37996801b901c7c9998d08945b6be88754d09f
5
5
  SHA512:
6
- metadata.gz: 35eb2afacd021899e68eb808b65a6f323db3d66770940471aa94d9c3238e41c409c678ac79d82dc609dcafaf3117d937895fa8effc9a8e665790a8625ef1f231
7
- data.tar.gz: 5f1f25fe9e2c268e4f6b95c988ddb7958c34649fcf53aa941d0b19d1b605a5b4345864bb7206b597fc509b9802a110db6c3900a40fe1ab3d3ce1468db28aef85
6
+ metadata.gz: aeb01d6b88bcf617d83f273dbdbb3ace5bb1f12fa8094ad978d96f88f31ab058d12000e6964454d8f6630bd1f6fe70b6debe5ed3937445e8e07ac8de091e0fd7
7
+ data.tar.gz: ba24e0621fcf6ebb6857cc820a96b0a2a9fde6c43953602dd9a295592fdb5e162a8e63dd91bcdca17ec8e63d913d08fd475b77402dac2a7f0b17f232996cfabd
data/README.md CHANGED
@@ -6,7 +6,7 @@ SQLite FTS5 full-text search for Rails/ActiveRecord. A lightweight, self-contain
6
6
 
7
7
  ## Requirements
8
8
 
9
- - Ruby 3.1+
9
+ - Ruby 3.2+
10
10
  - Rails 8.0+
11
11
  - SQLite 3.34+ (if using typo tolerance)
12
12
 
@@ -59,12 +59,16 @@ module FullSearch
59
59
  conn.execute(
60
60
  "UPDATE #{table} SET #{qc(field.name)} = #{q(value.to_s)} WHERE rowid = #{q(record.id)}"
61
61
  )
62
+ rescue => e
63
+ raise unless e.message.include?("no such table")
62
64
  end
63
65
 
64
66
  def self.remove_record!(record)
65
67
  table = qt(FullSearch::Index.fts_table_name(record.class))
66
68
  conn = ActiveRecord::Base.connection
67
69
  conn.execute("DELETE FROM #{table} WHERE rowid = #{q(record.id)}")
70
+ rescue => e
71
+ raise unless e.message.include?("no such table")
68
72
  end
69
73
 
70
74
  def self.reindex_dependents!(parent_record, dependent_model, field)
@@ -14,7 +14,13 @@ end
14
14
  module FullSearch
15
15
  class Index
16
16
  class << self
17
+ def verified_tables
18
+ @verified_tables ||= Set.new
19
+ end
20
+
17
21
  def ensure_table!(model)
22
+ return if model.respond_to?(:table_name) && verified_tables.include?(model.table_name)
23
+
18
24
  sqlite!(model)
19
25
 
20
26
  conn = connection
@@ -44,6 +50,8 @@ module FullSearch
44
50
 
45
51
  store_config_hash!(model)
46
52
  ensure_triggers!(model) if model_table_exists?(model)
53
+
54
+ verified_tables.add(model.table_name)
47
55
  end
48
56
 
49
57
  def rebuild!(model)
@@ -70,6 +78,7 @@ module FullSearch
70
78
  create_triggers!(model)
71
79
  optimize!(model)
72
80
  store_config_hash!(model, rebuilt_at: Time.current)
81
+ verified_tables.add(model.table_name)
73
82
  end
74
83
  end
75
84
 
@@ -103,6 +112,7 @@ module FullSearch
103
112
  end
104
113
 
105
114
  def drop!(model)
115
+ verified_tables.delete(model.table_name)
106
116
  sqlite!(model)
107
117
  drop_triggers!(model)
108
118
  connection.execute("DROP TABLE IF EXISTS #{qt(fts_table_name(model))};")
@@ -10,8 +10,8 @@ module FullSearch
10
10
  @full_search_dsl ||= FullSearch::Dsl.new(self)
11
11
  @full_search_dsl.tokenize(query_or_options[:tokenize]) if query_or_options.is_a?(Hash) && query_or_options.key?(:tokenize)
12
12
  @full_search_dsl.instance_eval(&block) if block_given?
13
- FullSearch::Index.ensure_table!(self)
14
13
  FullSearch::Callbacks.install!(self)
14
+ FullSearch::Index.ensure_table!(self)
15
15
  include InstanceMethods
16
16
 
17
17
  FullSearch.register_model(self)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module FullSearch
4
- VERSION = "0.3.1"
4
+ VERSION = "0.3.2"
5
5
  end
data/lib/full_search.rb CHANGED
@@ -47,6 +47,13 @@ module FullSearch
47
47
  def optimize!
48
48
  models.each { |model| Index.optimize!(model) }
49
49
  end
50
+
51
+ def setup!
52
+ models.each do |model|
53
+ Index.ensure_table!(model)
54
+ Callbacks.install!(model)
55
+ end
56
+ end
50
57
  end
51
58
  end
52
59
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: full_search
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben D'Angelo
@@ -176,7 +176,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
176
176
  requirements:
177
177
  - - ">="
178
178
  - !ruby/object:Gem::Version
179
- version: 3.1.0
179
+ version: 3.2.0
180
180
  required_rubygems_version: !ruby/object:Gem::Requirement
181
181
  requirements:
182
182
  - - ">="