Sha256: 0631f0986e2460d02f05c374cbfb2335366466db923f568fb521840006326b99

Contents?: true

Size: 959 Bytes

Versions: 4

Compression:

Stored size: 959 Bytes

Contents

require 'rack/utils'

class RequestInterceptor::Status < Struct.new(:value, :description)
  STATUSES = Rack::Utils::HTTP_STATUS_CODES

  def self.from_code(code, description = nil)
    description = STATUSES.fetch(code.to_i, "Unknown") if description.nil?
    new(code.to_s, description)
  end

  def response_class
    self.class.response_class(value)
  end

  def self.response_class(code)
    @response_classes ||=
      begin
        wrapped_classes = Hash.new {  Net::HTTPUnknownResponse }
        Net::HTTPResponse::CODE_TO_OBJ.inject(wrapped_classes) do |classes, (code, original_class)|
          new_class = Class.new(original_class) do
            attr_accessor :body
          end

          new_class.define_singleton_method(:name) { original_class.name }
          new_class.define_singleton_method(:to_s) { original_class.name }

          classes[code] = new_class
          classes
        end
      end

    @response_classes[code]
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
request_interceptor-0.2.1 lib/request_interceptor/status.rb
request_interceptor-0.2.0 lib/request_interceptor/status.rb
request_interceptor-0.1.1 lib/request_interceptor/status.rb
request_interceptor-0.1.0 lib/request_interceptor/status.rb