Module: DynamicMigrations::Postgres::Server::Database::Schema::Enums

Included in:
DynamicMigrations::Postgres::Server::Database::Schema
Defined in:
lib/dynamic_migrations/postgres/server/database/schema/enums.rb

Defined Under Namespace

Classes: EnumAlreadyExistsError, EnumDoesNotExistError

Instance Method Summary collapse

Instance Method Details

#add_enum(enum_name, values, description: nil) ⇒ Object

create and add a new enum



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/dynamic_migrations/postgres/server/database/schema/enums.rb', line 16

def add_enum enum_name, values, description: nil
  raise ExpectedSymbolError, enum_name unless enum_name.is_a? Symbol
  if has_enum? enum_name
    raise(EnumAlreadyExistsError, "Enum #{enum_name} already exists")
  end
  included_target = self
  if included_target.is_a? Schema
    new_enum = @enums[enum_name] = Enum.new source, included_target, enum_name, values, description: description
  else
    raise ModuleIncludedIntoUnexpectedTargetError, included_target
  end
  # sort the hash so that the enums are in alphabetical order by name
  sorted_enums = {}
  @enums.keys.sort.each do |enum_name|
    sorted_enums[enum_name] = @enums[enum_name]
  end
  @enums = sorted_enums
  # return the new enum
  new_enum
end

#enum(enum_name) ⇒ Object

return a enum by its name, raises an error if the enum does not exist



38
39
40
41
42
43
44
# File 'lib/dynamic_migrations/postgres/server/database/schema/enums.rb', line 38

def enum enum_name
  raise ExpectedSymbolError, enum_name unless enum_name.is_a? Symbol
  unless has_enum? enum_name
    raise EnumDoesNotExistError, "Enum `#{enum_name}` does not exist"
  end
  @enums[enum_name]
end

#enumsObject

returns an array of all enums in the schema



53
54
55
# File 'lib/dynamic_migrations/postgres/server/database/schema/enums.rb', line 53

def enums
  @enums.values
end

#enums_hashObject



57
58
59
# File 'lib/dynamic_migrations/postgres/server/database/schema/enums.rb', line 57

def enums_hash
  @enums
end

#has_enum?(enum_name) ⇒ Boolean

returns true/false representing if a enum with the provided name exists

Returns:

  • (Boolean)

Raises:



47
48
49
50
# File 'lib/dynamic_migrations/postgres/server/database/schema/enums.rb', line 47

def has_enum? enum_name
  raise ExpectedSymbolError, enum_name unless enum_name.is_a? Symbol
  @enums.key? enum_name
end