Module: Poly::Migration

Defined in:
lib/poly/migration.rb

Instance Method Summary collapse

Instance Method Details

#poly_owner(table_or_builder, type_column: :owner_type, id_column: :owner_id, id_type: :string, null: true) ⇒ Object

Table-builder helper (create_table/change_table):

poly_owner t

Direct helper (add_column style):

poly_owner :coins


33
34
35
36
37
38
39
40
41
# File 'lib/poly/migration.rb', line 33

def poly_owner(table_or_builder, type_column: :owner_type, id_column: :owner_id, id_type: :string, null: true)
  if table_builder?(table_or_builder)
    table_or_builder.string type_column, null: null
    table_or_builder.public_send(id_type, id_column, null: null)
  else
    add_column table_or_builder, type_column, :string, null: null
    add_column table_or_builder, id_column, id_type, null: null
  end
end

#poly_owner_index(table, type_column: :owner_type, id_column: :owner_id, unique: false, where: nil, index_name: nil) ⇒ Object



71
72
73
74
# File 'lib/poly/migration.rb', line 71

def poly_owner_index(table, type_column: :owner_type, id_column: :owner_id, unique: false, where: nil,
                     index_name: nil)
  add_index table, [type_column, id_column], unique: unique, where: where, name: index_name
end

#poly_prime_index(table, name = :resource) ⇒ Object

Partial unique index enforcing exactly one prime per (resource, role).



64
65
66
67
68
69
# File 'lib/poly/migration.rb', line 64

def poly_prime_index(table, name = :resource)
  poly_resource_index table, name,
                      unique: true, where: 'is_prime',
                      index_name: "index_#{table}_prime",
                      columns: [:"#{name}_type", :"#{name}_id", :"#{name}_role"]
end

#poly_resource(table_or_builder, name, null: true, id_type: :string) ⇒ Object

Table-builder helper (create_table/change_table):

poly_resource t, :resource

Direct helper (add_column style):

poly_resource :coins, :resource


8
9
10
11
12
13
14
15
# File 'lib/poly/migration.rb', line 8

def poly_resource(table_or_builder, name, null: true, id_type: :string)
  if table_builder?(table_or_builder)
    table_or_builder.references name, polymorphic: true, null: null, type: id_type
  else
    add_column table_or_builder, :"#{name}_type", :string, null: null
    add_column table_or_builder, :"#{name}_id", id_type, null: null
  end
end

#poly_resource_index(table, name, unique: false, where: nil, index_name: nil, columns: nil) ⇒ Object



58
59
60
61
# File 'lib/poly/migration.rb', line 58

def poly_resource_index(table, name, unique: false, where: nil, index_name: nil, columns: nil)
  add_index table, columns || [:"#{name}_type", :"#{name}_id"],
            unique: unique, where: where, name: index_name
end

#poly_role(table_or_builder, name, null: true) ⇒ Object

Table-builder helper (create_table/change_table):

poly_role t, :resource

Direct helper (add_column style):

poly_role :coins, :resource


21
22
23
24
25
26
27
# File 'lib/poly/migration.rb', line 21

def poly_role(table_or_builder, name, null: true)
  if table_builder?(table_or_builder)
    table_or_builder.string :"#{name}_role", null: null
  else
    add_column table_or_builder, :"#{name}_role", :string, null: null
  end
end

#poly_stack(table_or_builder, id_type: :string) ⇒ Object

Stack columns (golden-child history): the prime marker and the audit edge. Table-builder helper (create_table/change_table):

poly_stack t

Direct helper (add_column style):

poly_stack :statuses


48
49
50
51
52
53
54
55
56
# File 'lib/poly/migration.rb', line 48

def poly_stack(table_or_builder, id_type: :string)
  if table_builder?(table_or_builder)
    table_or_builder.boolean :is_prime, null: false, default: false
    table_or_builder.public_send(id_type, :superseded_by_id, null: true)
  else
    add_column table_or_builder, :is_prime, :boolean, null: false, default: false
    add_column table_or_builder, :superseded_by_id, id_type, null: true
  end
end