Module: ND::PG::Enum::Migrations::Concern
- Included in:
- ActiveRecord::Migration
- Defined in:
- lib/nd/pg/enum/migrations.rb
Instance Method Summary collapse
- #add_enum_value(name, *values) ⇒ Object (also: #add_enum_values)
- #change_enum_values(name, add: [], remove: []) ⇒ Object
- #columns_from_type(type) ⇒ Object
- #create_enum(name, values) ⇒ Object
- #drop_enum(name, values = nil) ⇒ Object
- #enum_values(name) ⇒ Object
- #remove_enum_value(name, *values) ⇒ Object (also: #remove_enum_values)
- #rename_enum(from, to) ⇒ Object
Instance Method Details
#add_enum_value(name, *values) ⇒ Object Also known as: add_enum_values
26 27 28 |
# File 'lib/nd/pg/enum/migrations.rb', line 26 def add_enum_value(name, *values) change_enum_values(name, add: values.flatten) end |
#change_enum_values(name, add: [], remove: []) ⇒ Object
36 37 38 39 40 41 |
# File 'lib/nd/pg/enum/migrations.rb', line 36 def change_enum_values(name, add: [], remove: []) reversible do |direction| direction.up { _change_enum_values(name, add: add, remove: remove) } direction.down { _change_enum_values(name, add: remove, remove: add) } end end |
#columns_from_type(type) ⇒ Object
58 59 60 61 62 63 64 |
# File 'lib/nd/pg/enum/migrations.rb', line 58 def columns_from_type(type) values = ActiveRecord::Base.connection.execute(<<~SQL.squish) SELECT table_name, column_name FROM information_schema.columns WHERE table_schema = 'public' AND udt_name = '#{type}'; SQL values.to_a.map(&:symbolize_keys) end |
#create_enum(name, values) ⇒ Object
7 8 9 10 11 12 |
# File 'lib/nd/pg/enum/migrations.rb', line 7 def create_enum(name, values) reversible do |direction| direction.up { _create_enum(name, values) } direction.down { _drop_enum(name) } end end |
#drop_enum(name, values = nil) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/nd/pg/enum/migrations.rb', line 14 def drop_enum(name, values = nil) if values reversible do |direction| direction.up { _drop_enum(name) } direction.down { _create_enum(name, values) } end else # If reverted, an ActiveRecord::IrreversibleMigration error will be raised. _drop_enum(name) end end |
#enum_values(name) ⇒ Object
50 51 52 53 54 55 56 |
# File 'lib/nd/pg/enum/migrations.rb', line 50 def enum_values(name) values = ActiveRecord::Base.connection.execute(<<~SQL.squish) SELECT unnest(enum_range(null, null::#{name})) AS value; SQL values.map { |value| value['value'] } end |
#remove_enum_value(name, *values) ⇒ Object Also known as: remove_enum_values
31 32 33 |
# File 'lib/nd/pg/enum/migrations.rb', line 31 def remove_enum_value(name, *values) change_enum_values(name, remove: values.flatten) end |
#rename_enum(from, to) ⇒ Object
43 44 45 46 47 48 |
# File 'lib/nd/pg/enum/migrations.rb', line 43 def rename_enum(from, to) reversible do |direction| direction.up { _rename_enum(from, to) } direction.down { _rename_enum(to, from) } end end |