ministryofjustice/Claim-for-Crown-Court-Defence

View on GitHub
app/interfaces/api/custom_validations/standard_json_format.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
module API
  module CustomValidations
    class StandardJsonFormat < Grape::Validations::Validators::Base
      # ISO 8601 format
      #
      # Valid examples:
      #
      #   2016-12-01
      #   2016-12-01T00:00:00
      #   2016-12-01T00:00:00Z
      #   2016-12-01T19:20+01:00
      #
      # Invalid examples:
      #
      #   2016
      #   2016-12
      #   2016-14-01
      #   2016-12-01Z
      #
      def validate_param!(attr_name, params)
        date_str = params[attr_name]

        date_str =~ /^[0-9]{4}-[0-9]{2}-[0-9]{2}(.*)?$/ || (raise ArgumentError)
        Date.iso8601(date_str) # if date is not valid iso8601 it will raise an ArgumentError
      rescue ArgumentError
        raise Grape::Exceptions::Validation.new(params: [@scope.full_name(attr_name)],
                                                message: 'is not in an acceptable date format (YYYY-MM-DD[T00:00:00])')
      end
    end
  end
end