module AR::Enum::Adapter
Public Instance Methods
add_enum_label(name, value, options = {})
click to toggle source
# 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)
click to toggle source
# 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 = {})
click to toggle source
# File lib/ar/enum/adapter.rb, line 68 def drop_enum(name, options = {}) sql = "DROP TYPE IF EXISTS #{name}" sql = "#{sql} CASCADE" if options[:cascade] execute(sql) end
enum_exists?(name)
click to toggle source
# File lib/ar/enum/adapter.rb, line 47 def enum_exists?(name) enum_types.any? {|type| type["name"] == name.to_s } end
enum_types()
click to toggle source
# 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)
click to toggle source
# 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