module EnumKit::ActiveRecordExtensions::ConnectionAdapters::PostgreSQLAdapter

Constants

ENUM_QUERY

@return [String] An SQL query that returns all available enum types in the database.

Public Instance Methods

add_enum_value(name, value, after: nil, before: nil) click to toggle source

Add a new value to an enum type in the database.

Note that you can't specify both :before and :after.

@param name [Symbol] The enum's name. @param value [String|Symbol] The value to add. @param after [String|Symbol] An existing value after which the new value should be inserted. @param before [String|Symbol] An existing value before which the new value should be inserted.

# File lib/enum_kit/active_record_extensions/connection_adapters/postgresql_adapter.rb, line 87
def add_enum_value(name, value, after: nil, before: nil)
  name  = EnumKit.sanitize_name!(name)
  value = EnumKit.sanitize_value!(value)

  statement = "ALTER TYPE #{name} ADD VALUE #{EnumKit.sqlize(value)}"

  raise ArgumentError, "You can't specify both :before and :after" if before && after

  statement += " AFTER #{EnumKit.sqlize(EnumKit.sanitize_value!(after))}"   if after
  statement += " BEFORE #{EnumKit.sqlize(EnumKit.sanitize_value!(before))}" if before

  enum_execute(statement)
end
clear_enum_cache!() click to toggle source

Clear the cached enums to force a refresh the next time they are accessed.

# File lib/enum_kit/active_record_extensions/connection_adapters/postgresql_adapter.rb, line 32
def clear_enum_cache!
  @enums = nil
end
create_enum(name, values) click to toggle source

Create a new enum type in the database.

@param name [Symbol] The enum's name. @param values [Array] The enum's acceptable values.

# File lib/enum_kit/active_record_extensions/connection_adapters/postgresql_adapter.rb, line 49
def create_enum(name, values)
  name   = EnumKit.sanitize_name!(name)
  values = EnumKit.sanitize_values!(values)

  enum_execute "CREATE TYPE #{name} AS ENUM #{EnumKit.sqlize(values)}"
end
drop_enum(name) click to toggle source

Drop an existing enum type from the database.

@param name [Symbol] The enum's name.

# File lib/enum_kit/active_record_extensions/connection_adapters/postgresql_adapter.rb, line 72
def drop_enum(name)
  name = EnumKit.sanitize_name!(name)

  enum_execute "DROP TYPE #{name}"
end
enums() click to toggle source

@return [Hash] The enum types available in the database.

# File lib/enum_kit/active_record_extensions/connection_adapters/postgresql_adapter.rb, line 38
def enums
  @enums ||= select_all(ENUM_QUERY.tr("\n", ' ').strip).each_with_object({}) do |row, enums|
    enums[row['typname'].to_sym] = row['values'].split("\t\t")
  end
end
rename_enum(current_name, new_name) click to toggle source

Rename an existing enum type.

@param current_name [Symbol] The enum's current name. @param new_name [Symbol] The enum's new name.

# File lib/enum_kit/active_record_extensions/connection_adapters/postgresql_adapter.rb, line 61
def rename_enum(current_name, new_name)
  current_name = EnumKit.sanitize_name!(current_name)
  new_name     = EnumKit.sanitize_name!(new_name)

  enum_execute "ALTER TYPE #{current_name} RENAME TO #{new_name}"
end
rename_enum_value(name, current_name, new_name) click to toggle source

Rename a value within an enum type in the database.

@param name [Symbol] The enum's name. @param current_value [String|Symbol] The enum value's current name. @param new_value [String|Symbol] The enum value's new name.

# File lib/enum_kit/active_record_extensions/connection_adapters/postgresql_adapter.rb, line 107
def rename_enum_value(name, current_name, new_name)
  ensure_renaming_enum_values_is_supported!

  name         = EnumKit.sanitize_name!(name)
  current_name = EnumKit.sanitize_value!(current_name)
  new_name     = EnumKit.sanitize_value!(new_name)

  enum_execute "ALTER TYPE #{name} RENAME VALUE #{EnumKit.sqlize(current_name)} TO #{EnumKit.sqlize(new_name)}"
end