Module: Poly::Migration
- Defined in:
- lib/poly/migration.rb
Instance Method Summary collapse
-
#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.
- #poly_owner_index(table, type_column: :owner_type, id_column: :owner_id, unique: false, where: nil, index_name: nil) ⇒ Object
-
#poly_prime_index(table, name = :resource) ⇒ Object
Partial unique index enforcing exactly one prime per (resource, role).
-
#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.
- #poly_resource_index(table, name, unique: false, where: nil, index_name: nil, columns: nil) ⇒ Object
-
#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.
-
#poly_stack(table_or_builder, id_type: :string) ⇒ Object
Stack columns (golden-child history): the prime marker and the audit edge.
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 |