module Shioruby

SHIORI Protocol Parser / Builder

Public Class Methods

build_response(response) click to toggle source

build SHIORI/3.x Response @param [OpenStruct] response SHIORI/3.x Response object @return [String] SHIORI/3.x Response string

# File lib/shioruby.rb, line 45
def build_response(response)
  message = response.message || @@response_message[response.code]
  response.version
  lines = ["SHIORI/#{response.version} #{response.code} #{message}"]
  response.each_pair.reject {|key, _| ['code', 'message', 'version', :code, :message, :version].include?(key)}.each do |key, value|
    lines << "#{key}: #{value.gsub(/[\r\n]/, '')}"
  end
  lines.join("\n") + "\n\n"
end
parse_request(request_str) click to toggle source

parse SHIORI/3.x Request @param [String] request_str SHIORI/3.x Request string @return [OpenStruct] SHIORI/3.x Request object

# File lib/shioruby.rb, line 24
def parse_request(request_str)
  lines = request_str.each_line.map(&:chomp).reject(&:empty?)
  request_line = lines.shift
  unless request_line_result = request_line.match(/^(.+) SHIORI\/([\d.]+)$/)
    raise ParseError.new("invalid request line")
  end
  request = OpenStruct.new
  request.method = request_line_result[1]
  request.version = request_line_result[2]
  lines.each do |line|
    unless header_result = line.match(/^(.+?): (.*)$/)
      raise ParseError.new("invalid header")
    end
    request[header_result[1]] = header_result[2]
  end
  request
end