# frozen_string_literal: true module Migrations::CLI class ConvertCommand def initialize(converter_type, options) @converter_type = converter_type.downcase @options = options end def execute validate_converter_type! settings = load_settings ::Migrations::Database.reset!(settings[:intermediate_db][:path]) if @options[:reset] converter = "migrations/converters/#{@converter_type}/converter".camelize.constantize converter.new(settings).run end private def validate_converter_type! converter_names = ::Migrations::Converters.names raise Thor::Error, <<~MSG if !converter_names.include?(@converter_type) Unknown converter name: #{@converter_type} Valid names are: #{converter_names.join(", ")} MSG end def validate_settings_path!(settings_path) raise Thor::Error, "Settings file not found: #{settings_path}" if !File.exist?(settings_path) end def load_settings settings_path = calculate_settings_path validate_settings_path!(settings_path) YAML.safe_load(File.read(settings_path), symbolize_names: true) end def calculate_settings_path settings_path = @options[:settings] || ::Migrations::Converters.default_settings_path(@converter_type) File.expand_path(settings_path, Dir.pwd) end end end