PHP 8.2.31
Preview: mock_response.rb Size: 3.28 KB
//proc/thread-self/root/opt/alt/ruby31/share/gems/gems/rack-3.0.8/lib/rack/mock_response.rb

# frozen_string_literal: true

require 'cgi/cookie'
require 'time'

require_relative 'response'

module Rack
  # Rack::MockResponse provides useful helpers for testing your apps.
  # Usually, you don't create the MockResponse on your own, but use
  # MockRequest.

  class MockResponse < Rack::Response
    class << self
      alias [] new
    end

    # Headers
    attr_reader :original_headers, :cookies

    # Errors
    attr_accessor :errors

    def initialize(status, headers, body, errors = nil)
      @original_headers = headers

      if errors
        @errors = errors.string if errors.respond_to?(:string)
      else
        @errors = ""
      end

      super(body, status, headers)

      @cookies = parse_cookies_from_header
      buffered_body!
    end

    def =~(other)
      body =~ other
    end

    def match(other)
      body.match other
    end

    def body
      return @buffered_body if defined?(@buffered_body)

      # FIXME: apparently users of MockResponse expect the return value of
      # MockResponse#body to be a string.  However, the real response object
      # returns the body as a list.
      #
      # See spec_showstatus.rb:
      #
      #   should "not replace existing messages" do
      #     ...
      #     res.body.should == "foo!"
      #   end
      buffer = @buffered_body = String.new

      @body.each do |chunk|
        buffer << chunk
      end

      return buffer
    end

    def empty?
      [201, 204, 304].include? status
    end

    def cookie(name)
      cookies.fetch(name, nil)
    end

    private

    def parse_cookies_from_header
      cookies = Hash.new
      if headers.has_key? 'set-cookie'
        set_cookie_header = headers.fetch('set-cookie')
        Array(set_cookie_header).each do |header_value|
          header_value.split("\n").each do |cookie|
            cookie_name, cookie_filling = cookie.split('=', 2)
            cookie_attributes = identify_cookie_attributes cookie_filling
            parsed_cookie = CGI::Cookie.new(
              'name' => cookie_name.strip,
              'value' => cookie_attributes.fetch('value'),
              'path' => cookie_attributes.fetch('path', nil),
              'domain' => cookie_attributes.fetch('domain', nil),
              'expires' => cookie_attributes.fetch('expires', nil),
              'secure' => cookie_attributes.fetch('secure', false)
            )
            cookies.store(cookie_name, parsed_cookie)
          end
        end
      end
      cookies
    end

    def identify_cookie_attributes(cookie_filling)
      cookie_bits = cookie_filling.split(';')
      cookie_attributes = Hash.new
      cookie_attributes.store('value', cookie_bits[0].strip)
      cookie_bits.drop(1).each do |bit|
        if bit.include? '='
          cookie_attribute, attribute_value = bit.split('=', 2)
          cookie_attributes.store(cookie_attribute.strip.downcase, attribute_value.strip)
        end
        if bit.include? 'secure'
          cookie_attributes.store('secure', true)
        end
      end

      if cookie_attributes.key? 'max-age'
        cookie_attributes.store('expires', Time.now + cookie_attributes['max-age'].to_i)
      elsif cookie_attributes.key? 'expires'
        cookie_attributes.store('expires', Time.httpdate(cookie_attributes['expires']))
      end

      cookie_attributes
    end

  end
end

Directory Contents

Dirs: 2 × Files: 44

Name Size Perms Modified Actions
auth DIR
- drwxr-xr-x 2024-03-06 04:26:10
Edit Download
multipart DIR
- drwxr-xr-x 2024-03-06 04:26:10
Edit Download
1.30 KB lrw-r--r-- 2024-02-12 21:28:33
Edit Download
8.56 KB lrw-r--r-- 2024-02-12 21:28:33
Edit Download
2.25 KB lrw-r--r-- 2024-02-12 21:28:33
Edit Download
3.30 KB lrw-r--r-- 2024-02-12 21:28:33
Edit Download
3.12 KB lrw-r--r-- 2024-02-12 21:28:33
Edit Download
2.99 KB lrw-r--r-- 2024-02-12 21:28:33
Edit Download
410 B lrw-r--r-- 2024-02-12 21:28:33
Edit Download
2.47 KB lrw-r--r-- 2024-02-12 21:28:33
Edit Download
806 B lrw-r--r-- 2024-02-12 21:28:33
Edit Download
695 B lrw-r--r-- 2024-02-12 21:28:33
Edit Download
5.51 KB lrw-r--r-- 2024-02-12 21:28:33
Edit Download
6.02 KB lrw-r--r-- 2024-02-12 21:28:33
Edit Download
1.87 KB lrw-r--r-- 2024-02-12 21:28:33
Edit Download
4.80 KB lrw-r--r-- 2024-02-12 21:28:33
Edit Download
167 B lrw-r--r-- 2024-02-12 21:28:33
Edit Download
5.66 KB lrw-r--r-- 2024-02-12 21:28:33
Edit Download
524 B lrw-r--r-- 2024-02-12 21:28:33
Edit Download
2.96 KB lrw-r--r-- 2024-02-12 21:28:33
Edit Download
36.09 KB lrwxr-xr-x 2024-02-12 21:28:33
Edit Download
573 B lrw-r--r-- 2024-02-12 21:28:33
Edit Download
414 B lrw-r--r-- 2024-02-12 21:28:33
Edit Download
1.40 KB lrw-r--r-- 2024-02-12 21:28:33
Edit Download
1.45 KB lrw-r--r-- 2024-02-12 21:28:33
Edit Download
32.69 KB lrw-r--r-- 2024-02-12 21:28:33
Edit Download
63 B lrw-r--r-- 2024-02-12 21:28:33
Edit Download
5.37 KB lrw-r--r-- 2024-02-12 21:28:33
Edit Download
3.28 KB lrw-r--r-- 2024-02-12 21:28:33
Edit Download
1.17 KB lrw-r--r-- 2024-02-12 21:28:33
Edit Download
1.18 KB lrw-r--r-- 2024-02-12 21:28:33
Edit Download
8.37 KB lrw-r--r-- 2024-02-12 21:28:33
Edit Download
1.78 KB lrw-r--r-- 2024-02-12 21:28:33
Edit Download
3.02 KB lrw-r--r-- 2024-02-12 21:28:33
Edit Download
24.57 KB lrw-r--r-- 2024-02-12 21:28:33
Edit Download
10.72 KB lrw-r--r-- 2024-02-12 21:28:33
Edit Download
3.12 KB lrw-r--r-- 2024-02-12 21:28:33
Edit Download
870 B lrw-r--r-- 2024-02-12 21:28:33
Edit Download
5.55 KB lrw-r--r-- 2024-02-12 21:28:33
Edit Download
13.73 KB lrw-r--r-- 2024-02-12 21:28:33
Edit Download
3.58 KB lrw-r--r-- 2024-02-12 21:28:33
Edit Download
6.00 KB lrw-r--r-- 2024-02-12 21:28:33
Edit Download
778 B lrw-r--r-- 2024-02-12 21:28:33
Edit Download
2.81 KB lrw-r--r-- 2024-02-12 21:28:33
Edit Download
21.10 KB lrw-r--r-- 2024-02-12 21:28:33
Edit Download
958 B lrw-r--r-- 2024-02-12 21:28:33
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).