Sha256: 0b43095c684359fbfb9077d8822feedbdc3c7be207d976cb94d3fbaa337fe98c
Contents?: true
Size: 1.66 KB
Versions: 1
Compression:
Stored size: 1.66 KB
Contents
module Rad module Processors class RemoteCaller < Processor # TODO2 :remote isn't registered with rad[ inject remote: :remote def initialize next_processor, result_variable = 'content' super(next_processor) @result_variable = result_variable end def call return next_processor.call unless workspace.class? # prepare klass = workspace.class raise "The remote class #{klass} must be a Rad::Remote!" unless klass.is? Rad::Remote workspace.remote_object = klass.new method = workspace.method_name # call begin result = workspace.remote_object.run_callbacks :action, method: method do workspace.remote_object.send method end ensure_correct_result! result workspace.remote_result = result next_processor.call # write JSON as a result if format is JSON and no one else filled it if workspace[@result_variable].blank? workspace[@result_variable] = workspace.remote_result.to_json end rescue StandardError => e raise e if !workspace.params.format == 'json' or config.test? workspace[@result_variable] = {error: e.message}.to_json logger.error e logger.info "\n" end end private def ensure_correct_result! result unless result.rson? raise "You can't use object of type '#{result.class}' as Remote's return value!" end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
rad_core-0.0.13 | lib/rad/remote/processors/remote_caller.rb |