class Rack::Joint

Constants

VERSION

Attributes

app[R]
block[R]

Public Class Methods

new(app, &block) click to toggle source
# File lib/rack/joint.rb, line 11
def initialize(app, &block)
  @app = app
  @block = block if block_given?
end

Public Instance Methods

call(env) click to toggle source
# File lib/rack/joint.rb, line 16
def call(env)
  rack_request = Rack::Request.new(env)
  mappings = Context.new(rack_request).instance_exec(&block)
  env_host = rack_request.host
  responses = valid_mapping(mappings, env_host)

  if check_redirect?(rack_request, responses)
    redirect_info(rack_request, responses)
  else
    app.call(env)
  end
end

Private Instance Methods

check_redirect?(request, responses) click to toggle source

@param request [Rack::Request] Request env. @param responses [Array] Mapped redirect response information. @return [Boolean]

# File lib/rack/joint.rb, line 42
def check_redirect?(request, responses)
  current_url = request.url
  responses.map do |res|
    res[2].to_s.include?(current_url)
  end.include?(true)
end
redirect_info(request, responses) click to toggle source

@param request [Rack::Request] Request env. @param responses [Array] Mapped redirect response information. @return [Array] Return response corresponded request.

# File lib/rack/joint.rb, line 52
def redirect_info(request, responses)
  current_url = request.url
  responses.select do |res|
    res[2].to_s.include?(current_url)
  end.to_a.flatten(1)
end
valid_mapping(mappings, host) click to toggle source

@param mappings [Array] URI mappings for redirecting. @param host [String] Requested hostname(env). @return [Array] Return URL mapped responses.

# File lib/rack/joint.rb, line 34
def valid_mapping(mappings, host)
  return [] unless mappings
  mappings.select { |res| res[host] }.first.values.flatten(1)
end