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 39
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 62
def activerecord_migration_class
  if ActiveRecord::Migration.respond_to?(:current_version)
    "ActiveRecord::Migration[#{ActiveRecord::Migration.current_version}]"
  else
    "ActiveRecord::Migration"
  end
end
create_migration_file() click to toggle source
# File lib/generators/fx/trigger/trigger_generator.rb, line 24
def create_migration_file
  return if skip_migration_creation?
  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 20
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 14
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 70
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 78
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 54
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 44
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 50
def version
  @_version ||= previous_version.next
end

Private Instance Methods

definition() click to toggle source
# File lib/generators/fx/trigger/trigger_generator.rb, line 106
def definition
  Fx::Definition.new(
    name: file_name,
    version: version,
    type: "trigger"
  )
end
migration() click to toggle source

True unless explicitly false

# File lib/generators/fx/trigger/trigger_generator.rb, line 125
def migration
  options[:migration] != false
end
skip_migration_creation?() click to toggle source

Skip creating migration file if:

- migrations option is nil or false
# File lib/generators/fx/trigger/trigger_generator.rb, line 120
def skip_migration_creation?
  !migration
end
trigger_definition_path() click to toggle source
# File lib/generators/fx/trigger/trigger_generator.rb, line 114
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 102
def updating_existing_trigger?
  previous_version > 0
end
version_regex() click to toggle source
# File lib/generators/fx/trigger/trigger_generator.rb, line 98
def version_regex
  /\A#{file_name}_v(?<version>\d+)\.sql\z/
end