module MetaRPC::Callable::ClassMethods
Injected class methods
Public Instance Methods
handle_json_callable(method_name)
click to toggle source
# File lib/metarpc/callable.rb, line 91 def handle_json_callable(method_name) old_method = instance_method(method_name) return if (@__json_rpc_hooked_methods ||= {}).key?(method_name) @__ignoring_added_methods = true params_contract = @__json_rpc_method_params error_handler = @__on_json_rpc_error define_method method_name do |*args, &block| case params_contract when nil raise_json_rpc_error(:invalid_params) unless args.empty? when Array validate_item(args, params_contract) when Hash raise_json_rpc_error(:invalid_params) unless args[0].is_a?(Hash) validate_item(args[0], params_contract) else raise_json_rpc_error(:internal_error) end old_method.bind(self).call(*args, &block) rescue RPCError => err raise err rescue StandardError => err error_handler&.call(err) raise_json_rpc_error(:server_error) end @__ignoring_added_methods = false @__json_rpc_hooked_methods[method_name] = { description: @__json_rpc_method_description, params: @__json_rpc_method_params } end
json_rpc_method(description, params: nil)
click to toggle source
# File lib/metarpc/callable.rb, line 132 def json_rpc_method(description, params: nil) @__next_method_is_json_rpc = true @__json_rpc_method_description = description @__json_rpc_method_params = params end
json_rpc_methods()
click to toggle source
# File lib/metarpc/callable.rb, line 87 def json_rpc_methods @__json_rpc_hooked_methods end
method_added(method_name)
click to toggle source
Calls superclass method
# File lib/metarpc/callable.rb, line 138 def method_added(method_name) super handle_json_callable(method_name) if @__next_method_is_json_rpc && !@__ignoring_added_methods @__next_method_is_json_rpc = false end
on_json_rpc_error(&func)
click to toggle source
# File lib/metarpc/callable.rb, line 128 def on_json_rpc_error(&func) @__on_json_rpc_error = func end