class Sana

Ukagaka SHIORI submodule ‘Sana’

Constants

Charset
Sender

Attributes

charset[RW]

default Charset header value

dirpath[R]

the ghost/master path

events[R]

events object

sender[RW]

default Sender header value

Public Class Methods

new(events = Kernel) click to toggle source

initialize Sana @param [Object] events event definitions

# File lib/sana.rb, line 16
def initialize(events = Kernel)
  @events = events
  @charset = 'UTF-8'
  @sender = 'Sana'
end

Public Instance Methods

load(dirpath) click to toggle source

SHIORI load() @param [String] dirpath the ghost/master directory path

# File lib/sana.rb, line 24
def load(dirpath)
  @dirpath = dirpath
  events.public_send(:_load, dirpath)
end
request(request_str) click to toggle source

SHIORI request() @param [String] request_str SHIORI Request @return [String] SHIORI Response

# File lib/sana.rb, line 37
def request(request_str)
  request = Shioruby.parse_request(request_str)
  if request.version[0] == '2'
    return build_response Sana::ResponseHelper.bad_request
  end
  begin
    response = events.public_send(request.ID, request)
  rescue => error
    raise unless error.is_a?(NoMethodError) && error.name.to_s == request.ID
  end
  case response
  when OpenStruct
    build_response response
  else
    build_response Sana::ResponseHelper.ok response
  end
rescue => error
  case error
  when Shioruby::ParseError
    build_response Sana::ResponseHelper.bad_request
  else
    build_response Sana::ResponseHelper.internal_server_error
  end
end
unload() click to toggle source

SHIORI unload()

# File lib/sana.rb, line 30
def unload
  events.public_send(:_unload)
end

Private Instance Methods

build_response(response) click to toggle source
# File lib/sana.rb, line 63
def build_response(response)
  response.version ||= '3.0'
  response.code ||= response.Value.to_s.empty? ? 204 : 200
  response.Charset = response.Charset || charset
  response.Sender = response.Sender || sender
  Shioruby.build_response(response)
end