Sha256: c8d64b2e9ee42acb0f11227ebe01b256f7076fabe204979de764a1b4fed0882f

Contents?: true

Size: 1.06 KB

Versions: 41

Compression:

Stored size: 1.06 KB

Contents

# frozen_string_literal: true
package_require("ree_errors/error")
package_require("ree_actions/errors")

class ReeRoda::App < Roda
  include Ree::LinkDSL

  link :logger, from: :ree_logger
  link :status_from_error
  link :to_json, from: :ree_json

  plugin :error_handler
  plugin :json_parser
  plugin :type_routing, default_type: :json

  error do |e|
    response["Content-Type"] = "application/json"

    if e.is_a?(ReeErrors::Error)
      body = {
        code: e.code,
        message: e.message,
        type: e.type,
      }

      response.status = status_from_error(e.type)
      response.write(to_json(body))
      response.finish
    elsif e.is_a?(ReeActions::ParamError)
      body = {
        code: "param",
        message: e.message,
        type: :invalid_param,
      }

      response.status = 400
      response.write(to_json(body))
      response.finish
    else
      logger.error(e.message, {}, e)
      response["Content-Type"] = "text/plain"
      response.status = 500
      response.write("unhandled server error")
      response.finish
    end
  end
end

Version data entries

41 entries across 41 versions & 1 rubygems

Version Path
ree_lib-1.1.1 lib/ree_lib/packages/ree_roda/package/ree_roda/app.rb
ree_lib-1.1.0 lib/ree_lib/packages/ree_roda/package/ree_roda/app.rb
ree_lib-1.0.124 lib/ree_lib/packages/ree_roda/package/ree_roda/app.rb
ree_lib-1.0.123 lib/ree_lib/packages/ree_roda/package/ree_roda/app.rb
ree_lib-1.0.122 lib/ree_lib/packages/ree_roda/package/ree_roda/app.rb
ree_lib-1.0.121 lib/ree_lib/packages/ree_roda/package/ree_roda/app.rb
ree_lib-1.0.120 lib/ree_lib/packages/ree_roda/package/ree_roda/app.rb
ree_lib-1.0.119 lib/ree_lib/packages/ree_roda/package/ree_roda/app.rb
ree_lib-1.0.118 lib/ree_lib/packages/ree_roda/package/ree_roda/app.rb
ree_lib-1.0.117 lib/ree_lib/packages/ree_roda/package/ree_roda/app.rb
ree_lib-1.0.116 lib/ree_lib/packages/ree_roda/package/ree_roda/app.rb
ree_lib-1.0.115 lib/ree_lib/packages/ree_roda/package/ree_roda/app.rb
ree_lib-1.0.114 lib/ree_lib/packages/ree_roda/package/ree_roda/app.rb
ree_lib-1.0.113 lib/ree_lib/packages/ree_roda/package/ree_roda/app.rb
ree_lib-1.0.112 lib/ree_lib/packages/ree_roda/package/ree_roda/app.rb
ree_lib-1.0.111 lib/ree_lib/packages/ree_roda/package/ree_roda/app.rb
ree_lib-1.0.110 lib/ree_lib/packages/ree_roda/package/ree_roda/app.rb
ree_lib-1.0.109 lib/ree_lib/packages/ree_roda/package/ree_roda/app.rb
ree_lib-1.0.108 lib/ree_lib/packages/ree_roda/package/ree_roda/app.rb
ree_lib-1.0.107 lib/ree_lib/packages/ree_roda/package/ree_roda/app.rb