textacular 5.1.0 → 5.2.0

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
- SHA1:
3
- metadata.gz: 3bd98a4fec2d72714909b49059a7f8b50298d734
4
- data.tar.gz: 9b3fc608d5192296392da8323048c65440146cbd
2
+ SHA256:
3
+ metadata.gz: f9a8ae35c8edfea5bfe856e76614e2689eed90d4c41beee8a3271d1c3749586e
4
+ data.tar.gz: 4e88e50d311cdbccf5aae2fc71f0c3ef2d0af22b284a5bb772c7687f311eb50b
5
5
  SHA512:
6
- metadata.gz: 7e1cd1fdce05d21df1e9803ca0bd1db66fc18ba371a4980175824ad5c46df5eb1e4cfd1aed857e5cea384887734f7f563ce498cc860c8c8827873f669a9ca584
7
- data.tar.gz: 6237664f59c95a81b48283b3f761289a8c63199c908fba347e3931be9f93c59f5be897c971434266a7d1a203dfc3aa11af217736ca2e3313cea180c73c0d16c3
6
+ metadata.gz: 3c5f2531575beb68748b2c4458ea7e4e57af212f901270c45e08c359c7e535c81f18a785ea95c8679e8a0be688472f4d798bdec0329212cb89d52789fae785ff
7
+ data.tar.gz: '0811ce97f78f63a84d41f4576115a07b8b2f01896e8a2d3d9904ff293cf8b95235919a83c66ab02c3f81a9c48653f798bb59d1cd7facb03d0d1f7ba24a97ef1c'
@@ -2,6 +2,10 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 5.2.0
6
+
7
+ * Active Record 6.0 compatibility
8
+
5
9
  ## 5.1.0
6
10
 
7
11
  * ActiveRecord 5.2 compatibility by wrapping string queries with `Arel.sql()`
data/Gemfile CHANGED
@@ -2,4 +2,6 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
5
- gem 'activerecord', '~> 5.2.x'
5
+ git 'git://github.com/rails/rails.git', branch: 'master' do
6
+ gem 'activerecord'
7
+ end
data/README.md CHANGED
@@ -33,7 +33,7 @@ In the project's Gemfile add
33
33
  gem 'textacular', '~> 4.0'
34
34
  ```
35
35
 
36
- #### Rails 5.0 and Rails 5.1!
36
+ #### Rails > 5.0
37
37
 
38
38
  In the project's Gemfile add
39
39
 
data/Rakefile CHANGED
@@ -43,12 +43,18 @@ namespace :db do
43
43
 
44
44
  desc 'Run the test database migrations'
45
45
  task :up => :'db:connect' do
46
- migrations = if ActiveRecord.version.version >= '5.2'
47
- ActiveRecord::Migration.new.migration_context.migrations
46
+ if ActiveRecord.version >= Gem::Version.new('6.0.0')
47
+ context = ActiveRecord::Migration.new.migration_context
48
+ migrations = context.migrations
49
+ schema_migration = context.schema_migration
50
+ elsif ActiveRecord.version >= Gem::Version.new('5.2')
51
+ migrations = ActiveRecord::Migration.new.migration_context.migrations
52
+ schema_migration = nil
48
53
  else
49
- ActiveRecord::Migrator.migrations('db/migrate')
54
+ migrations = ActiveRecord::Migrator.migrations('db/migrate')
55
+ schema_migration = nil
50
56
  end
51
- ActiveRecord::Migrator.new(:up, migrations, nil).migrate
57
+ ActiveRecord::Migrator.new(:up, migrations, schema_migration).migrate
52
58
  end
53
59
 
54
60
  desc 'Reverse the test database migrations'
@@ -12,29 +12,29 @@ module Textacular
12
12
  'english'
13
13
  end
14
14
 
15
- def search(query = "", exclusive = true)
16
- basic_search(query, exclusive)
15
+ def search(query = "", exclusive = true, rank_alias = nil)
16
+ basic_search(query, exclusive, rank_alias)
17
17
  end
18
18
 
19
- def basic_search(query = "", exclusive = true)
19
+ def basic_search(query = "", exclusive = true, rank_alias = nil)
20
20
  exclusive, query = munge_exclusive_and_query(exclusive, query)
21
21
  parsed_query_hash = parse_query_hash(query)
22
22
  similarities, conditions = basic_similarities_and_conditions(parsed_query_hash)
23
- assemble_query(similarities, conditions, exclusive)
23
+ assemble_query(similarities, conditions, exclusive, rank_alias)
24
24
  end
25
25
 
26
- def advanced_search(query = "", exclusive = true)
26
+ def advanced_search(query = "", exclusive = true, rank_alias = nil)
27
27
  exclusive, query = munge_exclusive_and_query(exclusive, query)
28
28
  parsed_query_hash = parse_query_hash(query)
29
29
  similarities, conditions = advanced_similarities_and_conditions(parsed_query_hash)
30
- assemble_query(similarities, conditions, exclusive)
30
+ assemble_query(similarities, conditions, exclusive, rank_alias)
31
31
  end
32
32
 
33
- def fuzzy_search(query = '', exclusive = true)
33
+ def fuzzy_search(query = '', exclusive = true, rank_alias = nil)
34
34
  exclusive, query = munge_exclusive_and_query(exclusive, query)
35
35
  parsed_query_hash = parse_query_hash(query)
36
36
  similarities, conditions = fuzzy_similarities_and_conditions(parsed_query_hash)
37
- assemble_query(similarities, conditions, exclusive)
37
+ assemble_query(similarities, conditions, exclusive, rank_alias)
38
38
  end
39
39
 
40
40
  private
@@ -113,15 +113,16 @@ module Textacular
113
113
  end
114
114
 
115
115
  def fuzzy_similarity_string(table_name, column, search_term)
116
- "COALESCE(similarity(#{table_name}.#{column}, #{search_term}), 0)"
116
+ "COALESCE(similarity(#{table_name}.#{column}::text, #{search_term}), 0)"
117
117
  end
118
118
 
119
119
  def fuzzy_condition_string(table_name, column, search_term)
120
- "(#{table_name}.#{column} % #{search_term})"
120
+ "(#{table_name}.#{column}::text % #{search_term})"
121
121
  end
122
122
 
123
- def assemble_query(similarities, conditions, exclusive)
124
- rank = connection.quote_column_name('rank' + rand(100000000000000000).to_s)
123
+ def assemble_query(similarities, conditions, exclusive, rank_alias)
124
+ rank_alias ||= 'rank' + rand(100000000000000000).to_s
125
+ rank = connection.quote_column_name(rank_alias)
125
126
 
126
127
  select(Arel.sql("#{quoted_table_name + '.*,' if select_values.empty?} #{similarities.join(" + ")} AS #{rank}")).
127
128
  where(conditions.join(exclusive ? " AND " : " OR ")).
@@ -1,5 +1,5 @@
1
1
  module Textacular
2
- VERSION = '5.1.0'
2
+ VERSION = '5.2.0'
3
3
 
4
4
  def self.version
5
5
  VERSION
@@ -190,5 +190,34 @@ RSpec.describe "Searchable" do
190
190
  ).to eq([penny_arcade])
191
191
  end
192
192
  end
193
+
194
+ context 'custom rank' do
195
+ let!(:questionable_content) do
196
+ WebComicWithSearchableName.create(
197
+ name: 'Questionable Content',
198
+ author: nil,
199
+ )
200
+ end
201
+
202
+ it "is selected for search" do
203
+ search_result = WebComicWithSearchableNameAndAuthor.search('Questionable Content', true, 'my_rank')
204
+ expect(search_result.first.attributes['my_rank']).to be_truthy
205
+ end
206
+
207
+ it "is selected for basic_search" do
208
+ search_result = WebComicWithSearchableNameAndAuthor.basic_search('Questionable Content', true, 'my_rank')
209
+ expect(search_result.first.attributes['my_rank']).to be_truthy
210
+ end
211
+
212
+ it "is selected for advanced_search" do
213
+ search_result = WebComicWithSearchableNameAndAuthor.advanced_search('Questionable Content', true, 'my_rank')
214
+ expect(search_result.first.attributes['my_rank']).to be_truthy
215
+ end
216
+
217
+ it "is selected for fuzzy_search" do
218
+ search_result = WebComicWithSearchableNameAndAuthor.fuzzy_search('Questionable Content', true, 'my_rank')
219
+ expect(search_result.first.attributes['my_rank']).to be_truthy
220
+ end
221
+ end
193
222
  end
194
223
  end
@@ -181,6 +181,13 @@ RSpec.describe Textacular do
181
181
  expect(GameExtendedWithTextacular).to respond_to(:search)
182
182
  end
183
183
 
184
+ describe "#fuzzy_search" do
185
+ it 'searches non-text columns' do
186
+ expect(GameExtendedWithTextacular.fuzzy_search(id: mario.id)
187
+ ).to eq([mario])
188
+ end
189
+ end
190
+
184
191
  describe "#advanced_search" do
185
192
  context "with a String argument" do
186
193
  it "searches across all :string columns (if not indexes have been specified)" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: textacular
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.1.0
4
+ version: 5.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Hamill
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2018-05-12 00:00:00.000000000 Z
14
+ date: 2019-08-20 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: pg
@@ -97,6 +97,20 @@ dependencies:
97
97
  - - ">="
98
98
  - !ruby/object:Gem::Version
99
99
  version: '0'
100
+ - !ruby/object:Gem::Dependency
101
+ name: byebug
102
+ requirement: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ type: :development
108
+ prerelease: false
109
+ version_requirements: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
100
114
  - !ruby/object:Gem::Dependency
101
115
  name: activerecord
102
116
  requirement: !ruby/object:Gem::Requirement
@@ -106,7 +120,7 @@ dependencies:
106
120
  version: '5.0'
107
121
  - - "<"
108
122
  - !ruby/object:Gem::Version
109
- version: '6.0'
123
+ version: '6.1'
110
124
  type: :runtime
111
125
  prerelease: false
112
126
  version_requirements: !ruby/object:Gem::Requirement
@@ -116,7 +130,7 @@ dependencies:
116
130
  version: '5.0'
117
131
  - - "<"
118
132
  - !ruby/object:Gem::Version
119
- version: '6.0'
133
+ version: '6.1'
120
134
  description: |-
121
135
  Textacular exposes full text search capabilities from PostgreSQL, extending
122
136
  ActiveRecord with scopes making search easy and fun!
@@ -181,7 +195,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
181
195
  version: '0'
182
196
  requirements: []
183
197
  rubyforge_project:
184
- rubygems_version: 2.6.8
198
+ rubygems_version: 2.7.6
185
199
  signing_key:
186
200
  specification_version: 4
187
201
  summary: Textacular exposes full text search capabilities from PostgreSQL
@@ -207,4 +221,3 @@ test_files:
207
221
  - spec/textacular/migration_generator_spec.rb
208
222
  - spec/textacular/searchable_spec.rb
209
223
  - spec/textacular/trigram_installer_spec.rb
210
- has_rdoc: