Sha256: 45dd3fc1736c11a2d3d94a418c8ad3eb0be5ad53041486a5d379dc2b564b577d

Contents?: true

Size: 1.11 KB

Versions: 15

Compression:

Stored size: 1.11 KB

Contents

require 'yaml'
require 'pre-commit/checks/plugin'

module PreCommit
  module Checks
    class Yaml < Plugin
      def call(staged_files)
        staged_files = staged_files.grep(/\.(yml|yaml)$/)
        return if staged_files.empty?

        errors = staged_files.map {|file| load_file(file)}.compact

        errors.join("\n") + "\n" unless errors.empty?
      end

      def load_file(file)
        if YAML.respond_to?(:safe_load)
          safe_load_file(file)
        else
          normal_load_file(file)
        end

      rescue Psych::SyntaxError => e
        e.message
      end

      def safe_load_file(file)
        YAML.safe_load(File.read(file), [], [], true, file)

        nil
      rescue Psych::DisallowedClass
        $stdout.puts "Warning: Skipping '#{file}' because it contains serialized ruby objects."
      end

      def normal_load_file(file)
        YAML.load_file(file)

        nil
      rescue ArgumentError
        $stdout.puts "Warning: Skipping '#{file}' because it contains serialized ruby objects."
      end

      def self.description
        'Runs yaml to detect errors.'
      end
    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
pre-commit-0.26.0 lib/plugins/pre_commit/checks/yaml.rb
pre-commit-0.25.0 lib/plugins/pre_commit/checks/yaml.rb
pre-commit-0.24.0 lib/plugins/pre_commit/checks/yaml.rb
pre-commit-0.23.0 lib/plugins/pre_commit/checks/yaml.rb
pre-commit-0.22.1 lib/plugins/pre_commit/checks/yaml.rb
pre-commit-0.22.0 lib/plugins/pre_commit/checks/yaml.rb
pre-commit-0.21.0 lib/plugins/pre_commit/checks/yaml.rb
pre-commit-0.20.0 lib/plugins/pre_commit/checks/yaml.rb
pre-commit-0.19.0 lib/plugins/pre_commit/checks/yaml.rb
pre-commit-0.18.0 lib/plugins/pre_commit/checks/yaml.rb
pre-commit-0.17.0 lib/plugins/pre_commit/checks/yaml.rb
pre-commit-0.16.3 lib/plugins/pre_commit/checks/yaml.rb
pre-commit-0.16.2 lib/plugins/pre_commit/checks/yaml.rb
pre-commit-0.16.1 lib/plugins/pre_commit/checks/yaml.rb
pre-commit-0.16.0 lib/plugins/pre_commit/checks/yaml.rb