Module: SchemaPlus::Enums::ActiveRecord::ConnectionAdapters::PostgresqlAdapter

Defined in:
lib/schema_plus/enums/active_record.rb

Instance Method Summary collapse

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, options = {})
  opts = case
         when options[:before] then "BEFORE #{escape_enum_value(options[:before])}"
         when options[:after] then "AFTER #{escape_enum_value(options[:after])}"
         else
           ''
         end
  execute "ALTER TYPE #{enum_name(name, options[: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)
  options = values.extract_options!
  list = values.map { |value| escape_enum_value(value) }
  execute "CREATE TYPE #{enum_name(name, options[: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, options = {})
  execute "DROP TYPE #{enum_name(name, options[:schema])}"
end

#enumsObject



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("    SELECT\n      N.nspname AS schema_name,\n      T.typname AS enum_name,\n      E.enumlabel AS enum_label,\n      E.enumsortorder AS enum_sort_order\n      --array_agg(E.enumlabel ORDER BY enumsortorder) AS labels\n    FROM pg_type T\n    JOIN pg_enum E ON E.enumtypid = T.oid\n    JOIN pg_namespace N ON N.oid = T.typnamespace\n    ORDER BY 1, 2, 4\n  SQL\n\n  result.reduce([]) do |res, row|\n    last = res.last\n    if last && last[0] == row[0] && last[1] == row[1]\n      last[2] << row[2]\n    else\n      res << (row[0..1] << [row[2]])\n    end\n    res\n  end\nend\n")