class Fx::Generators::TriggerGenerator

@api private

Public Class Methods

next_migration_number(dir) click to toggle source
# File lib/generators/fx/trigger/trigger_generator.rb, line 36
def self.next_migration_number(dir)
  ::ActiveRecord::Generators::Base.next_migration_number(dir)
end

Public Instance Methods

activerecord_migration_class() click to toggle source
# File lib/generators/fx/trigger/trigger_generator.rb, line 59
def activerecord_migration_class
  if ActiveRecord::Migration.respond_to?(:current_version)
    "ActiveRecord::Migration[5.0]"
  else
    "ActiveRecord::Migration"
  end
end
create_migration_file() click to toggle source
# File lib/generators/fx/trigger/trigger_generator.rb, line 22
def create_migration_file
  if updating_existing_trigger?
    migration_template(
      "db/migrate/update_trigger.erb",
      "db/migrate/update_trigger_#{file_name}_to_version_#{version}.rb"
    )
  else
    migration_template(
      "db/migrate/create_trigger.erb",
      "db/migrate/create_trigger_#{file_name}.rb"
    )
  end
end
create_trigger_definition() click to toggle source
# File lib/generators/fx/trigger/trigger_generator.rb, line 18
def create_trigger_definition
  create_file definition.path
end
create_triggers_directory() click to toggle source
# File lib/generators/fx/trigger/trigger_generator.rb, line 12
def create_triggers_directory
  unless trigger_definition_path.exist?
    empty_directory(trigger_definition_path)
  end
end
formatted_name() click to toggle source
# File lib/generators/fx/trigger/trigger_generator.rb, line 67
def formatted_name
  if singular_name.include?(".")
    "\"#{singular_name}\""
  else
    ":#{singular_name}"
  end
end
formatted_table_name() click to toggle source
# File lib/generators/fx/trigger/trigger_generator.rb, line 75
def formatted_table_name
  name = table_name["table_name"] || table_name["on"]

  if name.nil?
    raise(
      ArgumentError,
      "Either `table_name:NAME` or `on:NAME` must be specified",
    )
  end

  if name.include?(".")
    "\"#{name}\""
  else
    ":#{name}"
  end
end
migration_class_name() click to toggle source
Calls superclass method
# File lib/generators/fx/trigger/trigger_generator.rb, line 51
def migration_class_name
  if updating_existing_trigger?
    "UpdateTrigger#{class_name}ToVersion#{version}"
  else
    super
  end
end
previous_version() click to toggle source
# File lib/generators/fx/trigger/trigger_generator.rb, line 41
def previous_version
  @_previous_version ||= Dir.entries(trigger_definition_path).
    map { |name| version_regex.match(name).try(:[], "version").to_i }.
    max
end
version() click to toggle source
# File lib/generators/fx/trigger/trigger_generator.rb, line 47
def version
  @_version ||= previous_version.next
end

Private Instance Methods

definition() click to toggle source
# File lib/generators/fx/trigger/trigger_generator.rb, line 103
def definition
  Fx::Definition.new(
    name: file_name,
    version: version,
    type: "trigger",
  )
end
trigger_definition_path() click to toggle source
# File lib/generators/fx/trigger/trigger_generator.rb, line 111
def trigger_definition_path
  @_trigger_definition_path ||= Rails.root.join(*["db", "triggers"])
end
updating_existing_trigger?() click to toggle source
# File lib/generators/fx/trigger/trigger_generator.rb, line 99
def updating_existing_trigger?
  previous_version > 0
end
version_regex() click to toggle source
# File lib/generators/fx/trigger/trigger_generator.rb, line 95
def version_regex
  /\A#{file_name}_v(?<version>\d+)\.sql\z/
end