class Gack::Request

Parse a Gemini request into a friendly object

Constants

PROTOCOL

Attributes

request[R]

Public Class Methods

new(request) click to toggle source
# File lib/gack/request.rb, line 10
def initialize(request)
  @request = request
end

Public Instance Methods

input() click to toggle source
# File lib/gack/request.rb, line 18
def input
  @input ||= parse_input
end
location() click to toggle source
# File lib/gack/request.rb, line 14
def location
  @location ||= parse_location
end

Private Instance Methods

clean_request() click to toggle source

`.chomp` to drop the trailing rn and `.gsub` to remove the protocol

# File lib/gack/request.rb, line 50
def clean_request
  @clean_request ||= request.chomp.gsub(PROTOCOL, '')
end
parse_input() click to toggle source
# File lib/gack/request.rb, line 39
def parse_input
  split_input = clean_request.split('?')

  if split_input.size > 2
    CGI.unescape(split_input[1..].join('?'))
  else
    CGI.unescape(split_input.last)
  end
end
parse_location() click to toggle source
# File lib/gack/request.rb, line 24
def parse_location
  # ignore input
  location_only = clean_request.split('?').first

  return unless location_only

  split_request = location_only.split('/')

  return '/' if split_request.size == 1

  return "/#{split_request.last}" if split_request.size == 2

  "/#{split_request[1..].join('/')}"
end