Module: AR::Enum::Adapter
- Defined in:
- lib/ar/enum/adapter.rb
Instance Method Summary collapse
- #add_enum_label(name, value, options = {}) ⇒ Object
- #create_enum(name, values) ⇒ Object
- #drop_enum(name, options = {}) ⇒ Object
- #enum_exists?(name) ⇒ Boolean
- #enum_types ⇒ Object
- #rename_enum_label(name, from, to) ⇒ Object
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, = {}) sql = "ALTER TYPE #{name} ADD VALUE #{quote(value.to_s)}" if [:before] sql = "#{sql} BEFORE #{quote([:before].to_s)}" elsif [:after] sql = "#{sql} AFTER #{quote([: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, = {}) sql = "DROP TYPE IF EXISTS #{name}" sql = "#{sql} CASCADE" if [:cascade] execute(sql) end |
#enum_exists?(name) ⇒ 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_types ⇒ 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 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 |