Sha256: 5cf7b441efa7aa1bca3214ede05ec311dcf0576a9638c08ae935277c441bd5cd

Contents?: true

Size: 1.12 KB

Versions: 6

Compression:

Stored size: 1.12 KB

Contents

module Gris
  class Middleware
    class ErrorHandlers
      def initialize(app)
        @app = app
      end

      def call(env)
        response = @app.call env
        case response[0]
        when 400..500
          format_error_response response
        else
          response
        end
      rescue RuntimeError => e
        error = { status: 500, message: e.message }
        error_response error.to_json, 500
      rescue ::ActiveRecord::RecordNotFound => e
        error = { status: 404, message: e.message }
        error_response error.to_json, 404
      rescue ::ActiveRecord::RecordInvalid => e
        error = { status: 409, message: e.message }
        error_response error.to_json, 409
      end

      private

      def format_error_response(response)
        if response[2].respond_to? :body
          response
        else
          error = { status: response[0], message: response[2] }
          error_response(error.to_json, response[0], response[1])
        end
      end

      def error_response(message, status, headers = {})
        Rack::Response.new([message], status, headers).finish
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
gris-0.6.8 lib/gris/middleware/error_handlers.rb
gris-0.6.7 lib/gris/middleware/error_handlers.rb
gris-0.6.6 lib/gris/middleware/error_handlers.rb
gris-0.6.5 lib/gris/middleware/error_handlers.rb
gris-0.6.2 lib/gris/middleware/error_handlers.rb
gris-0.6.1 lib/gris/middleware/error_handlers.rb