Sha256: c923f2262d2371dfc5e4daeb0734e2ed6dfb7c6bd2fce166f4f186ce6b07692f

Contents?: true

Size: 1.09 KB

Versions: 6

Compression:

Stored size: 1.09 KB

Contents

module CopyleaksApi
  module Validators
    class CustomFieldsValidator
      KEY_MAX_LENGTH = 128
      VALUE_MAX_LENGTH = 512
      OVERALL_MAX_LENGTH = 8192

      class << self
        # raises appropriate error if any length is too large
        def validate!(fields)
          raise BadCustomFieldError.new('Key is too long') unless keys_valid?(fields)
          raise BadCustomFieldError.new('Value is too long') unless values_valid?(fields)
          raise BadCustomFieldError.new('Overall size is too large') unless overall_valid?(fields)
        end

        private

        # checks custom keys for length
        def keys_valid?(hash)
          hash.keys.map(&:to_s).all? { |s| s.size <= KEY_MAX_LENGTH }
        end

        # checks values for length
        def values_valid?(hash)
          hash.values.map(&:to_s).all? { |s| s.size <= VALUE_MAX_LENGTH }
        end

        # checks overall length
        def overall_valid?(hash)
          hash.reduce(0) { |a, e| a + e[0].to_s.size + e[1].to_s.size } <= OVERALL_MAX_LENGTH
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 2 rubygems

Version Path
plagiarism-checker-2.1.2 lib/copyleaks_api/validators/custom_fields_validator.rb
plagiarism-checker-2.1.1 lib/copyleaks_api/validators/custom_fields_validator.rb
plagiarism-checker-2.1.0 lib/copyleaks_api/validators/custom_fields_validator.rb
plagiarism-checker-2.0.0 lib/copyleaks_api/validators/custom_fields_validator.rb
plagiarism-checker-1.0.0 lib/copyleaks_api/validators/custom_fields_validator.rb
mkisilenko-test-0.1.0 lib/copyleaks_api/validators/custom_fields_validator.rb