Sha256: acb2fcc1af40b5af25722090100d033212860f9514c6181c5139c2311534f1b2

Contents?: true

Size: 1.36 KB

Versions: 9

Compression:

Stored size: 1.36 KB

Contents

require 'pre-commit/checks/plugin'

module PreCommit
  module Checks
    class Migration < Plugin
      def self.aliases
        [:migrations]
      end

      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

      def self.description
        "Detects rails database migrations and schema incompatibilities."
      end

    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
pre-commit-0.17.0 lib/plugins/pre_commit/checks/migration.rb
pre-commit-0.16.3 lib/plugins/pre_commit/checks/migration.rb
pre-commit-0.16.2 lib/plugins/pre_commit/checks/migration.rb
pre-commit-0.16.1 lib/plugins/pre_commit/checks/migration.rb
pre-commit-0.16.0 lib/plugins/pre_commit/checks/migration.rb
pre-commit-0.15.0 lib/plugins/pre_commit/checks/migration.rb
pre-commit-0.14.1 lib/plugins/pre_commit/checks/migration.rb
pre-commit-0.14.0 lib/plugins/pre_commit/checks/migration.rb
pre-commit-0.13.0 lib/plugins/pre_commit/checks/migration.rb