Module: Sinatra::RPC::Helpers
- Defined in:
- lib/sinatra/rpc/helpers.rb
Overview
Some methods to include in the app class.
Instance Method Summary collapse
-
#call_rpc_method(method, arguments) ⇒ Object
Execute an RPC method with the given name and arguments.
-
#handle_rpc(request) ⇒ Object
Handle RPC requests.
-
#select_serializer(content_type) ⇒ Object
Generate a serializer instance suitable for the incoming RPC request.
Instance Method Details
#call_rpc_method(method, arguments) ⇒ Object
Execute an RPC method with the given name and arguments.
18 19 20 21 22 |
# File 'lib/sinatra/rpc/helpers.rb', line 18 def call_rpc_method(method, arguments) m = settings.rpc_method_index[method] raise Sinatra::RPC::NotFound if m.nil? m[:handler].send m[:method], *arguments end |
#handle_rpc(request) ⇒ Object
Handle RPC requests. This method should be called inside a POST definition.
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/sinatra/rpc/helpers.rb', line 35 def handle_rpc(request) # The request/response serializer can be XML-RPC (the default) # or any serializer implemented as a subclass of Sinatra::RPC::Serializer::Base. # The serializer class is chosen by reading the 'Content-Type' header in the request. serializer = select_serializer(request.env['CONTENT_TYPE']) body = request.body.read # An empty request is not acceptable in RPC. if body.empty? halt 400 end # Generate the response. resp = begin # Parse the contents of the request. method, arguments = serializer.parse body # Execute the method call. call_rpc_method(method, arguments) rescue Sinatra::RPC::NotFound halt 404 rescue Sinatra::RPC::Fault => ex ex rescue ArgumentError => ex Sinatra::RPC::BadRequestFault.new(ex.) rescue Exception => ex Sinatra::RPC::GenericFault.new("#{ex.class.name}: #{ex.}") end content_type(serializer.content_type, serializer.) serializer.dump(resp) end |
#select_serializer(content_type) ⇒ Object
Generate a serializer instance suitable for the incoming RPC request. (see Sinatra::RPC::Serializer.find)
9 10 11 |
# File 'lib/sinatra/rpc/helpers.rb', line 9 def select_serializer(content_type) Sinatra::RPC::Serializer.find(content_type).new end |