Sha256: 0819744160393b30c8a805339d7f4eee15e6f1753b673b97813ac30a9a15b19f

Contents?: true

Size: 1.65 KB

Versions: 1

Compression:

Stored size: 1.65 KB

Contents

# frozen_string_literals: true

module Jobshop
  module Helpers
    module Migration
      def idx_table_name_pkey(table_name)
        execute <<~SQL
          ALTER TABLE #{table_name}
            ADD PRIMARY KEY USING INDEX idx_#{table_name}_pkey;
        SQL
      end

      def fk_organization_id(table_name)
        foreign_key table_name, :jobshop_organizations, :organization_id
      end

      def fk_created_by_id(table_name)
        foreign_key table_name, :jobshop_people, {
          organization_id: :organization_id,
          created_by_id: :person_id
        }
      end

      def nested_set_attrs(table_name)
        reference_column = table_name.sub(/jobshop_/, "").singularize + "_id"
        add_column table_name, :parent_id, :uuid
        add_column table_name, :lft, :uuid
        add_column table_name, :rgt, :uuid

        foreign_key table_name, table_name, { organization_id: :organization_id,
                                              parent_id: reference_column }
      end

      def foreign_key(table_name, reference_table, columns, options = "")
        if columns.is_a?(Hash)
          keys = []
          references = []

          columns.each do |k, v|
            keys.push(k)
            references.push(v)
          end
        else
          keys = references = Array(columns)
        end

        constraint_name = "fk_#{table_name}_#{keys.join('_')}"

        execute <<~SQL
          ALTER TABLE #{table_name}
            ADD CONSTRAINT #{constraint_name}
              FOREIGN KEY (#{keys.join(", ")})
              REFERENCES #{reference_table} (#{references.join(", ")})
              #{options};
        SQL
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
jobshop-0.0.163 lib/jobshop/helpers/migration.rb