Sha256: 68065a1598bea012aa6472acd3e75d9f2c53dea435bd5cbe4afbda0b19b3d3f4

Contents?: true

Size: 1.15 KB

Versions: 2

Compression:

Stored size: 1.15 KB

Contents

module PreCommit
  class MigrationCheck
    class << self
      def call(staged_files)
        migration_files = migration_files(staged_files)
        schema_files = schema_files(staged_files)

        if migration_files.any? && schema_files.none?
          "It looks like you're adding a migration, but did not update the schema file"
        elsif migration_files.none? && schema_files.any?
          "You're trying to change the schema without adding a migration file"
        elsif migration_files.any? && schema_files.any?
          versions = migration_files.map { |f| f[/\d+/] }
          schema = schema_files.map { |f| File.read(f) }.join
          missing_versions = versions.select { |version| !schema.include?(version) }
          if missing_versions.any?
            "You did not add the schema versions for #{versions.join(', ')} to #{schema_files.join(' or ')}"
          end
        end
      end

      private

      def migration_files(staged_files)
        staged_files.grep(/db\/migrate\/.*\.rb/)
      end

      def schema_files(staged_files)
        staged_files.select { |f| File.basename(f) =~ /schema\.rb|structure.*\.sql/ }
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
pre-commit-0.11.0 lib/pre-commit/checks/migration_check.rb
pre-commit-0.10.0 lib/pre-commit/checks/migration_check.rb