logo

mastofe

My custom branche(s) on git.pleroma.social/pleroma/mastofe
commit: c2753fdfb471209fe7f2cdb8844e049207af8ba3
parent: c29c20ab3cda3d4b752c67868925c1fe99d0ac71
Author: unarist <m.unarist@gmail.com>
Date:   Fri, 14 Jul 2017 02:31:33 +0900

Make tag search case insensitive again (#4184)


Diffstat:

Mapp/models/tag.rb2+-
Adb/migrate/20170713112503_make_tag_search_case_insensitive.rb11+++++++++++
Mdb/schema.rb4++--
Mspec/models/tag_spec.rb9+++++++++
4 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/app/models/tag.rb b/app/models/tag.rb @@ -23,7 +23,7 @@ class Tag < ApplicationRecord class << self def search_for(term, limit = 5) pattern = sanitize_sql_like(term) + '%' - Tag.where('name like ?', pattern).order(:name).limit(limit) + Tag.where('lower(name) like lower(?)', pattern).order(:name).limit(limit) end end end diff --git a/db/migrate/20170713112503_make_tag_search_case_insensitive.rb b/db/migrate/20170713112503_make_tag_search_case_insensitive.rb @@ -0,0 +1,11 @@ +class MakeTagSearchCaseInsensitive < ActiveRecord::Migration[5.1] + def up + remove_index :tags, name: :hashtag_search_index + execute 'CREATE INDEX hashtag_search_index ON tags (lower(name) text_pattern_ops);' + end + + def down + remove_index :tags, name: :hashtag_search_index + execute 'CREATE INDEX hashtag_search_index ON tags (name text_pattern_ops);' + end +end diff --git a/db/schema.rb b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20170711225116) do +ActiveRecord::Schema.define(version: 20170713112503) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -332,7 +332,7 @@ ActiveRecord::Schema.define(version: 20170711225116) do t.string "name", default: "", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.index "name text_pattern_ops", name: "hashtag_search_index" + t.index "lower((name)::text) text_pattern_ops", name: "hashtag_search_index" t.index ["name"], name: "index_tags_on_name", unique: true end diff --git a/spec/models/tag_spec.rb b/spec/models/tag_spec.rb @@ -27,6 +27,15 @@ RSpec.describe Tag, type: :model do expect(results).to eq [tag] end + it 'finds tag records in case insensitive' do + tag = Fabricate(:tag, name: "MATCH") + _miss_tag = Fabricate(:tag, name: "miss") + + results = Tag.search_for("match") + + expect(results).to eq [tag] + end + it 'finds the exact matching tag as the first item' do similar_tag = Fabricate(:tag, name: "matchlater") tag = Fabricate(:tag, name: "match")