Sha256: 29d1e0a295157029ea32b48aac98e55a57f394fd2978ab76baae37503bfb567c
Contents?: true
Size: 1.29 KB
Versions: 2
Compression:
Stored size: 1.29 KB
Contents
require "sinatra/validation/version" require "dry-validation" module Sinatra module Validation class InvalidParameterError < StandardError attr_accessor :params, :messages end class Result < Struct.new("Result", :params, :messages) end module Helpers def validates(options = {}, &block) schema = Dry::Validation.Schema(&block) validation = schema.call(params) if validation.success? return Result.new(validation.output) end errors = validation.messages(full: true).values.flatten; if options[:silent] || settings.silent_validation return Result.new(validation.output, errors) end raise InvalidParameterError.new(params: validation.output, messages: errors) rescue InvalidParameterError => exception if options[:raise] || settings.raise_sinatra_validation_exception raise exception end error = exception.to_s if content_type && content_type.match(mime_type(:json)) error = { errors: errors }.to_json end halt 400, error end end def self.registered(app) app.helpers Validation::Helpers app.set :silent_validation, false app.set :raise_sinatra_validation_exception, false end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
sinatra-validation-0.2.0 | lib/sinatra/validation.rb |
sinatra-validation-0.1.0 | lib/sinatra/validation.rb |