module Rack::App::Test

Attributes

last_response[R]

Public Class Methods

included(klass) click to toggle source
# File lib/rack/app/test.rb, line 7
def self.included(klass)
  klass.__send__(:extend, self::SingletonMethods)
end

Public Instance Methods

__send_rack_app_request__(request_method, *args) click to toggle source
# File lib/rack/app/test.rb, line 13
def __send_rack_app_request__(request_method, *args)
  properties = args.select { |e| e.is_a?(Hash) }.reduce({}, &:merge!)
  url = args.detect { |e| e.is_a?(String) } || properties.delete(:url)
  mock_request = Rack::MockRequest.new(rack_app)
  request_env = Rack::App::Test::Utils.env_by(url, properties)
  @last_response = mock_request.request(request_method.to_s.upcase, url, request_env)
end
mount(app_class, options) click to toggle source
# File lib/rack/app/test.rb, line 40
def mount(app_class, options)
  path_prefix = options.fetch(:to)

  selector = lambda do |e|
    if e.config.type == :endpoint
      e.config.app_class == app_class
    else
      e.config.callable == app_class
    end
  end

  endpoints = rack_app.router.endpoints.select(&selector)

  request_paths_that_has_prefix = lambda do |e|
    e.request_path.start_with?(path_prefix)
  end

  matching_endpoints = endpoints.select(&request_paths_that_has_prefix)

  if matching_endpoints.empty?
    raise("Can't find any path that fullfill the requirement")
  end

  return unless app_class.is_a?(Class) && app_class <= Rack::App
  app_owned_endpoints = app_class.router.endpoints.select(&selector)

  if matching_endpoints.length != app_owned_endpoints.length
    raise('endpoint count not matching')
  end
end
rack_app(&block) click to toggle source
# File lib/rack/app/test.rb, line 27
def rack_app(&block)
  @rack_app ||= lambda do
    if defined?(__rack_app_class__)
      __rack_app_class__
    elsif defined?(described_class) && described_class.respond_to?(:call)
      described_class
    else
      raise('missing class definition')
    end
  end.call
  block.is_a?(Proc) ? @rack_app.instance_exec(&block) : @rack_app
end