Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
uoy-faculty-sinatra / lib / sinatra / http_status.rb
Size: Mime:
# frozen_string_literal: true

require 'net/http'

# Top-level module documentation comment goes here...
module Sinatra
  # Module to contain rescuable HTTP status exceptions
  module HTTPStatus
    class AnyStatus < StandardError
    end

    # Helpers for HTTP status exceptions
    module Helpers
      def http_status(code, message = nil)
        Sinatra::HTTPStatus[code.to_i].new message
      end
    end

    # Top-level functions
    module Functions
      def error_handler(klass, template)
        error klass do |e|
          erb template, locals: { error: e } unless request.xhr? || content_type == mime_type(:json)
        end
      end
    end

    module_function

    def [](code)
      BY_CODE.fetch(code)
    end

    def constant_definition(name)
      return Sinatra::HTTPStatus.const_get(name) if Sinatra::HTTPStatus.const_defined?(name)

      Sinatra::HTTPStatus.const_set(name, yield)
    end

    def status_range_class(name)
      constant_definition(name) { Class.new(AnyStatus) }
    end

    def status_class(name, range_name, code)
      range_class = status_range_class(range_name)

      constant_definition(name) do
        Class.new(range_class) do
          define_method(:code) do
            warn '[DEPRECATION] `code` is deprecated.  Please use `http_status` instead.'
            http_status
          end
          define_method(:http_status) { code.to_i }
        end
      end
    end

    mapping = {}
    Net::HTTPResponse::CODE_TO_OBJ.each do |code, response|
      range = response.superclass

      name = response.name.gsub(/^Net::HTTP/, '')
      range_name = range.name.gsub(/^Net::HTTP/, '')

      mapping[code.to_i] = status_class(name, range_name, code)
    end

    Sinatra::HTTPStatus.const_set(:BY_CODE, mapping)
  end

  helpers HTTPStatus::Helpers
  register HTTPStatus::Functions
end