Module: AR::Enum::Adapter

Defined in:
lib/ar/enum/adapter.rb

Instance Method Summary collapse

Instance Method Details

#add_enum_label(name, value, options = {}) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
# File 'lib/ar/enum/adapter.rb', line 51

def add_enum_label(name, value, options = {})
  sql = "ALTER TYPE #{name} ADD VALUE #{quote(value.to_s)}"

  if options[:before]
    sql = "#{sql} BEFORE #{quote(options[:before].to_s)}"
  elsif options[:after]
    sql = "#{sql} AFTER #{quote(options[:after].to_s)}"
  end

  execute(sql)
end

#create_enum(name, values) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/ar/enum/adapter.rb', line 32

def create_enum(name, values)
  return if enum_exists?(name)

  values = values.map do |value|
    quote(value.to_s)
  end

  sql = <<-SQL
    CREATE TYPE #{name}
    AS ENUM (#{values.join(', ')})
  SQL

  execute(sql)
end

#drop_enum(name, options = {}) ⇒ Object



69
70
71
72
73
74
# File 'lib/ar/enum/adapter.rb', line 69

def drop_enum(name, options = {})
  sql = "DROP TYPE IF EXISTS #{name}"
  sql = "#{sql} CASCADE" if options[:cascade]

  execute(sql)
end

#enum_exists?(name) ⇒ Boolean

Returns:

  • (Boolean)


47
48
49
# File 'lib/ar/enum/adapter.rb', line 47

def enum_exists?(name)
  enum_types.any? {|type| type["name"] == name.to_s }
end

#enum_typesObject



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/ar/enum/adapter.rb', line 6

def enum_types
  execute <<~SQL
    with
    sorted_enums as (
      select
        t.typname,
        e.enumlabel
      from
        pg_type t,
        pg_enum e
      where
        t.oid = e.enumtypid
      order by
        e.enumsortorder
    )

    select
      typname as name,
      string_agg(enumlabel, ',') as labels
    from
      sorted_enums
    group by
      typname
  SQL
end

#rename_enum_label(name, from, to) ⇒ Object



63
64
65
66
67
# File 'lib/ar/enum/adapter.rb', line 63

def rename_enum_label(name, from, to)
  sql = "ALTER TYPE #{name} RENAME VALUE #{quote(from.to_s)}" \
        " TO #{quote(to.to_s)}"
  execute(sql)
end