class Fx::Definition

@api private

Constants

FUNCTION
TRIGGER

Public Class Methods

function(name:, version:) click to toggle source
# File lib/fx/definition.rb, line 7
def self.function(name:, version:)
  new(name: name, version: version, type: FUNCTION)
end
new(name:, version:, type:) click to toggle source
# File lib/fx/definition.rb, line 15
def initialize(name:, version:, type:)
  @name = name
  @version = version.to_i
  @type = type
end
trigger(name:, version:) click to toggle source
# File lib/fx/definition.rb, line 11
def self.trigger(name:, version:)
  new(name: name, version: version, type: TRIGGER)
end

Public Instance Methods

full_path() click to toggle source
# File lib/fx/definition.rb, line 28
def full_path
  Rails.root.join(path)
end
path() click to toggle source
# File lib/fx/definition.rb, line 32
def path
  @_path ||= File.join("db", @type.pluralize, filename)
end
to_sql() click to toggle source
# File lib/fx/definition.rb, line 21
def to_sql
  content = File.read(find_file || full_path)
  raise "Define #{@type} in #{path} before migrating." if content.empty?

  content
end
version() click to toggle source
# File lib/fx/definition.rb, line 36
def version
  @version.to_s.rjust(2, "0")
end

Private Instance Methods

filename() click to toggle source
# File lib/fx/definition.rb, line 42
def filename
  @_filename ||= "#{@name}_v#{version}.sql"
end
find_file() click to toggle source
# File lib/fx/definition.rb, line 46
def find_file
  migration_paths.lazy
    .map { |migration_path| File.expand_path(File.join("..", "..", path), migration_path) }
    .find { |definition_path| File.exist?(definition_path) }
end
migration_paths() click to toggle source
# File lib/fx/definition.rb, line 52
def migration_paths
  Rails.application.config.paths["db/migrate"].expanded
end