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_point_index(table_name, longitude_column, latitude_column) ⇒ 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_point_index(table_name, longitude_column, latitude_column) ⇒ 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 " CREATE TEXT SEARCH CONFIGURATION \#{dictionary} ( COPY = pg_catalog.\#{options[:catalog]} );\n CREATE TEXT SEARCH DICTIONARY \#{dictionary}_dict (\n TEMPLATE = \#{options[:template]},\n DictFile = \#{options[:dict_file]},\n AffFile = \#{options[:aff_file]},\n StopWords = \#{options[:stop_words]}\n );\n ALTER TEXT SEARCH CONFIGURATION \#{dictionary}\n ALTER MAPPING FOR \#{options[:mappings]}\n WITH unaccent, \#{dictionary}_dict, english_stem;\n\n EOS\nend\n" |
#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('#{options['dictionary']}', #{options[:columns].map {|column_name| "pg_searchable_dmetaphone(coalesce(new.#{column_name}, ''))" }.join(" || ' ' || ") });" when Hash then "#{options[:columns].map {|column_name, weight| "setweight(to_tsvector('#{options[: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_point_index(table_name, longitude_column, latitude_column) ⇒ Object
67 68 69 70 71 72 73 74 |
# File 'lib/pg_searchable/active_record/migration.rb', line 67 def add_pg_searchable_point_index(table_name, longitude_column, latitude_column) execute %{CREATE INDEX index_#{table_name}_on_#{longitude_column}_#{latitude_column}_point ON #{table_name} using gist ( ST_GeographyFromText( 'SRID=4326;POINT(' || #{table_name}.#{longitude_column} || ' ' || #{table_name}.#{latitude_column} || ')' ) ) } 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('#{options['dictionary']}', #{options[:columns].map {|column_name| "coalesce(new.#{column_name}, '')" }.join(" || ' ' || ") });" when Hash then "#{options[:columns].map {|column_name, weight| "setweight(to_tsvector('#{options[: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 " DROP TEXT SEARCH CONFIGURATION IF EXISTS \#{dictionary};\n DROP TEXT SEARCH DICTIONARY IF EXISTS \#{dictionary}_dict;\n SQL\nend\n" |
#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_point_index(table_name, longitude_column, latitude_column) ⇒ Object
76 77 78 79 80 |
# File 'lib/pg_searchable/active_record/migration.rb', line 76 def remove_pg_searchable_point_index(table_name, longitude_column, latitude_column) execute %{ DROP INDEX index_#{table_name}_on_#{longitude_column}_#{latitude_column}_point } 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 |