Class: ASIR::Transport::Rack

Inherits:
HTTP show all
Defined in:
lib/asir/transport/rack.rb

Overview

!SLIDE Rack Transport

Defined Under Namespace

Classes: App

Constant Summary

Constants inherited from HTTP

HTTP::APPLICATION_BINARY, HTTP::CONTENT_TYPE

Constants included from ASIR::ThreadVariable

ASIR::ThreadVariable::DEBUG, ASIR::ThreadVariable::EMPTY_HASH, ASIR::ThreadVariable::SETTER

Instance Attribute Summary

Attributes inherited from HTTP

#debug, #server, #uri

Attributes inherited from ASIR::Transport

#after_invoke_message, #after_receive_message, #before_send_message, #coder_needs_result_message, #decoder, #encoder, #invoker, #message_count, #needs_message_identifier, #needs_message_timestamp, #on_exception, #on_result_exception, #one_way, #running, #verbose

Attributes included from Log

#_logger

Instance Method Summary collapse

Methods inherited from HTTP

#_receive_result, #_send_message, #client, #close

Methods inherited from ASIR::Transport

#_subclass_responsibility, #initialize, #invoke_message!, #needs_message_identifier?, #needs_message_timestamp?, #receive_message, #receive_result, #send_message, #send_result, #serve_message!, #stop!, #with_server_signals!

Methods included from Log

#_log, #_log_enabled=, #_log_enabled?, #_log_format, #_log_result, enabled, enabled=, included

Methods included from Initialization

#initialize

Methods included from AdditionalData

#[], #[]=, #_additional_data, #additional_data, #additional_data!, #additional_data=, included

Methods included from Message::Delay

#relative_message_delay!, #wait_for_delay!

Methods included from ASIR::ThreadVariable

included, setter

Constructor Details

This class inherits a constructor from ASIR::Transport

Instance Method Details

#_receive_message(rack_req_res, additional_data) ⇒ Object

Receive the Message payload String from the Rack::Request object. Returns the [ Rack::Request, Rack::Response ] as the message_state.



11
12
13
14
# File 'lib/asir/transport/rack.rb', line 11

def _receive_message rack_req_res, additional_data
  body = rack_req_res.first.body.read
  [ body, rack_req_res ]
end

#_send_result(message, result, result_payload, rack_rq_rs, message_state) ⇒ Object

Send the Result payload String in the Rack::Response object as application/binary.



17
18
19
20
21
# File 'lib/asir/transport/rack.rb', line 17

def _send_result message, result, result_payload, rack_rq_rs, message_state
  rack_response = rack_rq_rs[1]
  rack_response[CONTENT_TYPE] = APPLICATION_BINARY
  rack_response.write result_payload
end

#call(env) ⇒ Object

Rack application handler.



41
42
43
44
45
46
47
# File 'lib/asir/transport/rack.rb', line 41

def call(env)
  rq = ::Rack::Request.new(env)
  rs = ::Rack::Response.new
  rack_rq_rs = [ rq, rs ]
  serve_message! rack_rq_rs, rack_rq_rs
  rs.finish # => [ status, header, rbody ]
end

#prepare_server!(opts = { }) ⇒ Object

Dummy server.



52
53
54
# File 'lib/asir/transport/rack.rb', line 52

def prepare_server! opts = { }
  self
end

#rack_app(&blk) ⇒ Object

Constructs a Rackable App from this Transport.



24
25
26
# File 'lib/asir/transport/rack.rb', line 24

def rack_app &blk
  App.new(self, &blk)
end

#run_server!Object

WEBrick under Rack.



57
58
59
60
61
62
63
64
# File 'lib/asir/transport/rack.rb', line 57

def run_server!
  #require 'rack/handler'
  u = URI.parse(uri); port = u.port # <= REFACTOR
  ::Rack::Handler::WEBrick.run \
    ::Rack::ShowExceptions.new(::Rack::Lint.new(self.rack_app)),
    :Port => port
  self
end

#stop_server!Object



66
67
68
69
# File 'lib/asir/transport/rack.rb', line 66

def stop_server!
  # NOT IMPLEMENTED
  self
end