Class: ActiveRecord::Migration
- Inherits:
-
Object
- Object
- ActiveRecord::Migration
- Defined in:
- lib/pg_searchable/active_record/migration.rb
Instance Method Summary collapse
- #add_pg_searchable_dictionary(dictionary, options = {}) ⇒ Object
- #add_pg_searchable_dmetaphone_trigger(table_name, column_name, options = {}) ⇒ Object
- #add_pg_searchable_tsearch_trigger(table_name, column_name, options = {}) ⇒ Object
- #remove_pg_searchable_dictionary(dictionary) ⇒ Object
- #remove_pg_searchable_dmetaphone_trigger(table_name, column_name) ⇒ Object
- #remove_pg_searchable_tsearch_trigger(table_name, column_name) ⇒ Object
Instance Method Details
#add_pg_searchable_dictionary(dictionary, options = {}) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/pg_searchable/active_record/migration.rb', line 33 def add_pg_searchable_dictionary(dictionary, = {}) remove_pg_searchable_dictionary(dictionary) = { catalog: 'english', template: 'ispell', dict_file: 'english', aff_file: 'english', stop_words: 'english', mappings: 'asciiword, asciihword, hword_asciipart, word, hword, hword_part' }.merge() execute <<-EOS CREATE TEXT SEARCH CONFIGURATION #{dictionary} ( COPY = pg_catalog.#{[:catalog]} ); CREATE TEXT SEARCH DICTIONARY #{dictionary}_dict ( TEMPLATE = #{[:template]}, DictFile = #{[:dict_file]}, AffFile = #{[:aff_file]}, StopWords = #{[:stop_words]} ); ALTER TEXT SEARCH CONFIGURATION #{dictionary} ALTER MAPPING FOR #{[:mappings]} WITH unaccent, #{dictionary}_dict, english_stem; EOS end |
#add_pg_searchable_dmetaphone_trigger(table_name, column_name, options = {}) ⇒ Object
19 20 21 22 23 24 25 26 27 |
# File 'lib/pg_searchable/active_record/migration.rb', line 19 def (table_name, column_name, = {}) .reverse_merge({ dictionary: 'simple', columns: nil }) column_data = case [:columns] when Array then "to_tsvector('#{['dictionary']}', #{[:columns].map {|column_name| "pg_searchable_dmetaphone(coalesce(new.#{column_name}, ''))" }.join(" || ' ' || ") });" when Hash then "#{[:columns].map {|column_name, weight| "setweight(to_tsvector('#{[:dictionary]}', pg_searchable_dmetaphone(coalesce(new.#{column_name}, ''))), '#{weight}')" }.join(" || ")};" end _add_pg_searchable_trigger(table_name, column_name, :dmetaphone, column_data) end |
#add_pg_searchable_tsearch_trigger(table_name, column_name, options = {}) ⇒ Object
5 6 7 8 9 10 11 12 13 |
# File 'lib/pg_searchable/active_record/migration.rb', line 5 def add_pg_searchable_tsearch_trigger(table_name, column_name, = {}) .reverse_merge({ dictionary: 'simple', columns: nil }) column_data = case [:columns] when Array then "to_tsvector('#{['dictionary']}', #{[:columns].map {|column_name| "coalesce(new.#{column_name}, '')" }.join(" || ' ' || ") });" when Hash then "#{[:columns].map {|column_name, weight| "setweight(to_tsvector('#{[:dictionary]}', coalesce(new.#{column_name}, '')), '#{weight}')" }.join(" || ")};" end _add_pg_searchable_trigger(table_name, column_name, :tsearch, column_data) end |
#remove_pg_searchable_dictionary(dictionary) ⇒ Object
60 61 62 63 64 65 |
# File 'lib/pg_searchable/active_record/migration.rb', line 60 def remove_pg_searchable_dictionary(dictionary) execute <<-SQL DROP TEXT SEARCH CONFIGURATION IF EXISTS #{dictionary}; DROP TEXT SEARCH DICTIONARY IF EXISTS #{dictionary}_dict; SQL end |
#remove_pg_searchable_dmetaphone_trigger(table_name, column_name) ⇒ Object
29 30 31 |
# File 'lib/pg_searchable/active_record/migration.rb', line 29 def (table_name, column_name) _remove_pg_searchable_trigger(table_name, column_name, :dmetaphone) end |
#remove_pg_searchable_tsearch_trigger(table_name, column_name) ⇒ Object
15 16 17 |
# File 'lib/pg_searchable/active_record/migration.rb', line 15 def remove_pg_searchable_tsearch_trigger(table_name, column_name) _remove_pg_searchable_trigger(table_name, column_name, :tsearch) end |