module Jobshop::Helpers::Migration
Public Instance Methods
create_table_with_auditing(table_name, *args) { |t| ... }
click to toggle source
# File lib/jobshop/helpers/migration.rb, line 43 def create_table_with_auditing(table_name, *args) # rubocop: disable Metrics/MethodLength options = args.extract_options! primary_key_columns = options.delete(:primary_key) id_column = options.delete(:id) id_column = :uuid if id_column == nil if primary_key_columns.is_a?(Hash) primary_key = [] types = [] primary_key_columns.each do |name, type| primary_key.push(name) types.push(type) end else primary_key = Array(primary_key_columns) types = Array.new(primary_key.count, :uuid) end primary_key_hash = Hash[primary_key.zip(types)] auditing_table_name = table_name.to_s.concat("_history") trigger_name = table_name.to_s.concat("_trigger") # Create primary table to hold presently valid data create_table table_name, id: id_column do |t| if primary_key_columns primary_key_hash.each do |name, type| next if :id == name t.send(type, name, null: false) end t.index primary_key, unique: true, name: :"index_jobshop_#{table_name}" end yield t end execute <<~SQL ALTER TABLE #{table_name} ADD COLUMN sys_period tstzrange NOT NULL DEFAULT tstzrange(current_timestamp, NULL); CREATE TABLE #{auditing_table_name} (LIKE #{table_name}); CREATE TRIGGER #{trigger_name} BEFORE INSERT OR UPDATE OR DELETE ON #{table_name} FOR EACH ROW EXECUTE PROCEDURE versioning('sys_period', '#{auditing_table_name}', true); SQL end
fk_organization(table_name)
click to toggle source
# File lib/jobshop/helpers/migration.rb, line 6 def fk_organization(table_name) foreign_key table_name, :jobshop_organizations, { organization_id: :id } end
foreign_key(table_name, reference_table, columns, options = "")
click to toggle source
# File lib/jobshop/helpers/migration.rb, line 19 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
nested_set_attrs(table_name)
click to toggle source
# File lib/jobshop/helpers/migration.rb, line 10 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, { parent_id: reference_column } end