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