Module: ActiveRecord::PostgresEnum::PostgreSQLAdapter
- Defined in:
- lib/active_record/postgres_enum/postgresql_adapter.rb
Constant Summary collapse
- DEFINED_ENUMS_QUERY =
<<~SQL SELECT t.OID, t.typname, t.typtype, array_agg(e.enumlabel) as enumlabels FROM pg_type t INNER JOIN pg_enum e ON e.enumtypid = t.oid WHERE typtype = 'e' GROUP BY t.OID, t.typname, t.typtype ORDER BY t.typname SQL
Instance Method Summary collapse
- #add_enum_value(name, value) ⇒ Object
- #create_enum(name, values) ⇒ Object
- #drop_enum(name) ⇒ Object
- #enums ⇒ Object
- #migration_keys ⇒ Object
- #prepare_column_options(column, types) ⇒ Object
- #rename_enum(name, new_name) ⇒ Object
- #rename_enum_value(name, existing_value, new_value) ⇒ Object
Instance Method Details
#add_enum_value(name, value) ⇒ Object
34 35 36 |
# File 'lib/active_record/postgres_enum/postgresql_adapter.rb', line 34 def add_enum_value(name, value) execute "ALTER TYPE #{name} ADD VALUE '#{value}'" end |
#create_enum(name, values) ⇒ Object
21 22 23 24 |
# File 'lib/active_record/postgres_enum/postgresql_adapter.rb', line 21 def create_enum(name, values) values = values.map { |v| "'#{v}'" } execute "CREATE TYPE #{name} AS ENUM (#{values.join(', ')})" end |
#drop_enum(name) ⇒ Object
26 27 28 |
# File 'lib/active_record/postgres_enum/postgresql_adapter.rb', line 26 def drop_enum(name) execute "DROP TYPE #{name}" end |
#enums ⇒ Object
15 16 17 18 19 |
# File 'lib/active_record/postgres_enum/postgresql_adapter.rb', line 15 def enums select_all(DEFINED_ENUMS_QUERY).each_with_object({}) do |row, memo| memo[row["typname"].to_sym] = row['enumlabels'].gsub(/[{}]/, '').split(',') end end |
#migration_keys ⇒ Object
42 43 44 |
# File 'lib/active_record/postgres_enum/postgresql_adapter.rb', line 42 def migration_keys super + [:enum_name] end |
#prepare_column_options(column, types) ⇒ Object
46 47 48 49 50 |
# File 'lib/active_record/postgres_enum/postgresql_adapter.rb', line 46 def (column, types) spec = super(column, types) spec[:enum_name] = column.cast_type.enum_name.inspect if column.type == :enum spec end |
#rename_enum(name, new_name) ⇒ Object
30 31 32 |
# File 'lib/active_record/postgres_enum/postgresql_adapter.rb', line 30 def rename_enum(name, new_name) execute "ALTER TYPE #{name} RENAME TO #{new_name}" end |
#rename_enum_value(name, existing_value, new_value) ⇒ Object
38 39 40 |
# File 'lib/active_record/postgres_enum/postgresql_adapter.rb', line 38 def rename_enum_value(name, existing_value, new_value) execute "ALTER TYPE #{name} RENAME VALUE '#{existing_value}' TO '#{new_value}'" end |