Module: Siresta::API
- Included in:
- ApiBase
- Defined in:
- lib/siresta/api.rb
Defined Under Namespace
Modules: ClassMethods
Class Method Summary collapse
Instance Method Summary collapse
-
#_begin_state ⇒ Object
begin state for Response monad.
-
#_handle_request(meth, path, formats, pipe, handler) ⇒ Object
handle request for generated route.
-
#convert_from(handler, formats, body) ⇒ Object
convert from preferred format.
-
#convert_to(handler, formats, body) ⇒ Object
convert to preferred format.
-
#data ⇒ Object
atoms.
-
#preferred_formats(formats) ⇒ Object
preferred formats.
Class Method Details
.included(base) ⇒ Object
91 92 93 |
# File 'lib/siresta/api.rb', line 91 def self.included(base) base.extend ClassMethods end |
Instance Method Details
#_begin_state ⇒ Object
begin state for Response monad
47 48 49 50 51 52 53 54 55 56 57 |
# 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) ⇒ Object
handle request for generated route
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# 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.] 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) ⇒ Object
convert from preferred format
71 72 73 74 75 76 |
# 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) ⇒ Object
convert to preferred format
79 80 81 82 83 84 |
# 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 ⇒ Object
atoms
87 88 89 |
# File 'lib/siresta/api.rb', line 87 def data settings.siresta[:data] end |
#preferred_formats(formats) ⇒ Object
preferred formats
60 61 62 63 64 65 66 67 68 |
# 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 |