module Siresta::API
Public Class Methods
included(base)
click to toggle source
# File lib/siresta/api.rb, line 91 def self.included(base) base.extend ClassMethods end
Public Instance Methods
_begin_state()
click to toggle source
begin state for Response
monad
# File lib/siresta/api.rb, line 47 def _begin_state r = Response r.ResponseState( r.RequestData( {}, # TODO: headers request.body.read, params ), r.ResponseInfo(nil, {}, r.ResponseEmpty()), r.ResponseContinue(), self ) end
_handle_request(meth, path, formats, pipe, handler)
click to toggle source
handle request for generated route
# File lib/siresta/api.rb, line 21 def _handle_request(meth, path, formats, pipe, handler) b = method handler r = Response fs = [] # TODO fs << r.choose_request_format(handler, formats) \ unless formats[:request].empty? fs << r.get fs << -> s { b[r, s.request.headers, s.request.params, s.request.body] } fs << r.choose_response_format(handler, formats) \ unless formats[:response].empty? x = r.pipeline(r.return(nil), *fs) s = x.exec _begin_state # TODO if s.status.is_a? r::ResponseError [500, s.status.message] elsif s.response.data.is_a? r::ResponseBody [s.response.status, s.response.headers, s.response.data.data] else raise 'OOPS' # TODO end end
convert_from(handler, formats, body)
click to toggle source
convert from preferred format
# File lib/siresta/api.rb, line 71 def convert_from(handler, formats, body) f_in, f_out = preferred_formats formats ss = settings.siresta[:convert_from][f_in] || {} f = ss[handler] || ss[:__all__] f ? f[body] : raise('OOPS') # TODO end
convert_to(handler, formats, body)
click to toggle source
convert to preferred format
# File lib/siresta/api.rb, line 79 def convert_to(handler, formats, body) f_in, f_out = preferred_formats formats ss = settings.siresta[:convert_to][f_out] || {} f = ss[handler] || ss[:__all__] f ? f[body] : raise('OOPS') # TODO end
data()
click to toggle source
atoms
# File lib/siresta/api.rb, line 87 def data settings.siresta[:data] end
preferred_formats(formats)
click to toggle source
preferred formats
# File lib/siresta/api.rb, line 60 def preferred_formats(formats) @preferred_formats ||= {} return @preferred_formats[formats] if @preferred_formats[formats] fmts = formats[:request] | formats[:response] m2f = Hash[fmts.map { |x| [mime_type(x), x] }] f_in = m2f[request.content_type] || formats[:request].first f_out = m2f[request.preferred_type m2f.keys] @preferred_formats[formats] = [f_in, f_out] end