class Skyline::AbstractAction

Constants

AsyncResponse

Public Class Methods

call(env) click to toggle source
# File lib/skyline/abstract_action.rb, line 16
def call(env)
  new(env).process
end
new(env) click to toggle source
# File lib/skyline/abstract_action.rb, line 21
def initialize(env)
  @env = env
  @finished = false

  @_state = :init
end

Public Instance Methods

process() click to toggle source
# File lib/skyline/abstract_action.rb, line 28
def process
  EM.next_tick { before_start }
  AsyncResponse
end

Protected Instance Methods

build_headers() click to toggle source
# File lib/skyline/abstract_action.rb, line 58
def build_headers
  status, headers = respond_to?(:respond_with, true) ? respond_with.dup : [200, {'Content-Type' => 'text/html'}]
  headers['Connection'] ||= 'keep-alive'
  [status, headers]
end
continue() click to toggle source
# File lib/skyline/abstract_action.rb, line 43
def continue
  init_async_body
  send_headers

  @_state = :started
  EM.next_tick { on_start }
end
encode(string, encoding = 'UTF-8') click to toggle source
# File lib/skyline/abstract_action.rb, line 39
def encode(string, encoding = 'UTF-8')
  string.respond_to?(:force_encoding) ? string.force_encoding(encoding) : string
end
finish() click to toggle source
# File lib/skyline/abstract_action.rb, line 77
def finish
  @_state = :finishing
  @body.succeed if is_finishable?
ensure
  @_state = :finished
  @finished = true
end
finished?() click to toggle source
# File lib/skyline/abstract_action.rb, line 73
def finished?
  !!@finished
end
halt(status, headers = {}, halt_body = '') click to toggle source
# File lib/skyline/abstract_action.rb, line 89
def halt(status, headers = {}, halt_body = '')
  send_response(status, headers, [halt_body])
end
init_async_body() click to toggle source
# File lib/skyline/abstract_action.rb, line 64
def init_async_body
  @body = Body.new

  if self.class.on_finish_callbacks.any?
    @body.callback { on_finish }
    @body.errback { on_finish }
  end
end
is_finishable?() click to toggle source
# File lib/skyline/abstract_action.rb, line 109
def is_finishable?
  !finished? && @body && !@body.closed?
end
params() click to toggle source
# File lib/skyline/abstract_action.rb, line 101
def params
  @params ||= request.params.update(route_params).symbolize_keys
end
render(body, *args) click to toggle source
# File lib/skyline/abstract_action.rb, line 35
def render(body, *args)
  @body.call(body)
end
request() click to toggle source
# File lib/skyline/abstract_action.rb, line 97
def request
  @request ||= Rack::Request.new(@env)
end
route_params() click to toggle source
# File lib/skyline/abstract_action.rb, line 105
def route_params
  @env['router.params'] || {}
end
send_headers() click to toggle source
# File lib/skyline/abstract_action.rb, line 51
def send_headers
  status, headers = build_headers
  send_initial_response(status, headers, @body)
rescue StandardError, LoadError, SyntaxError => exception
  handle_exception(exception)
end
send_initial_response(response_status, response_headers, response_body) click to toggle source
# File lib/skyline/abstract_action.rb, line 85
def send_initial_response(response_status, response_headers, response_body)
  send_response(response_status, response_headers, response_body)
end
send_response(response_status, response_headers, response_body) click to toggle source
# File lib/skyline/abstract_action.rb, line 93
def send_response(response_status, response_headers, response_body)
  @env['async.callback'].call [response_status, response_headers, response_body]
end