class ReeMigrator::ApplyMigrations

def call(connection, migrations_yml_path, schema_migrations_path, data_migrations_path)

def call(connection, migrations_yml_path, schema_migrations_path, data_migrations_path)
  logger.info("Parsing migrations.yml from #{migrations_yml_path}")
  migrations = YAML.load(File.read(migrations_yml_path))
  return [] if is_blank(migrations)
  applied_schema_migrations = indexed_migrations(connection, SCHEMA)
  applied_data_migrations = indexed_migrations(connection, DATA)
  schema_migrations = Dir.glob(File.join(schema_migrations_path, RUBY_EXT))
  data_migrations  = Dir.glob(File.join(data_migrations_path, RUBY_EXT))
  migrations = migrations.map do |migration|
    if !migration.is_a?(Hash) || !(migration.keys - [SCHEMA, DATA]).empty?
      raise InvalidMigrationYmlErr.new(
        "Invalid migrations.yml. Example of valid format:\n- schema: SCHEMA_MIGRATION_FILE_NAME.rb\n- data: DATA_MIGRATION_FILE_NAME.rb"
      )
    end
    migration_path = if migration.has_key?(SCHEMA)
      run_migration(
        connection,
        :schema,
        migration[SCHEMA],
        applied_schema_migrations,
        schema_migrations,
        schema_migrations_path
      )
    elsif migration.has_key?(DATA)
      run_migration(
        connection,
        :data,
        migration[DATA],
        applied_data_migrations,
        data_migrations,
        data_migrations_path
      )
    end
    migration_path
  end.compact
  migrations
end