Module: SchemaPlus::Enums::ActiveRecord::ConnectionAdapters::PostgresqlAdapter
- Defined in:
- lib/schema_plus/enums/active_record.rb
Instance Method Summary collapse
- #alter_enum(name, value, options = {}) ⇒ Object
- #create_enum(name, *values) ⇒ Object
- #drop_enum(name, options = {}) ⇒ Object
- #enums ⇒ Object
Instance Method Details
#alter_enum(name, value, options = {}) ⇒ Object
37 38 39 40 41 42 43 44 45 |
# File 'lib/schema_plus/enums/active_record.rb', line 37 def alter_enum(name, value, = {}) opts = case when [:before] then "BEFORE #{escape_enum_value([:before])}" when [:after] then "AFTER #{escape_enum_value([:after])}" else '' end execute "ALTER TYPE #{enum_name(name, [:schema])} ADD VALUE #{escape_enum_value(value)} #{opts}" end |
#create_enum(name, *values) ⇒ Object
31 32 33 34 35 |
# File 'lib/schema_plus/enums/active_record.rb', line 31 def create_enum(name, *values) = values. list = values.map { |value| escape_enum_value(value) } execute "CREATE TYPE #{enum_name(name, [:schema])} AS ENUM (#{list.join(',')})" end |
#drop_enum(name, options = {}) ⇒ Object
47 48 49 |
# File 'lib/schema_plus/enums/active_record.rb', line 47 def drop_enum(name, = {}) execute "DROP TYPE #{enum_name(name, [:schema])}" end |
#enums ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/schema_plus/enums/active_record.rb', line 6 def enums result = query(<<-SQL) SELECT N.nspname AS schema_name, T.typname AS enum_name, E.enumlabel AS enum_label, E.enumsortorder AS enum_sort_order --array_agg(E.enumlabel ORDER BY enumsortorder) AS labels FROM pg_type T JOIN pg_enum E ON E.enumtypid = T.oid JOIN pg_namespace N ON N.oid = T.typnamespace ORDER BY 1, 2, 4 SQL result.reduce([]) do |res, row| last = res.last if last && last[0] == row[0] && last[1] == row[1] last[2] << row[2] else res << (row[0..1] << [row[2]]) end res end end |