lib/isomorfeus/operation/handler/operation_handler.rb in isomorfeus-operation-1.0.0.zeta25 vs lib/isomorfeus/operation/handler/operation_handler.rb in isomorfeus-operation-2.0.0.rc1

- old
+ new

@@ -1,65 +1,65 @@ -# frozen_string_literal: true - -module Isomorfeus - module Operation - module Handler - class OperationHandler < LucidHandler::Base - on_request do |response_agent| - # promise_send_path('Isomorfeus::Operation::Handler::OperationHandler', self.to_s, props_hash) - response_agent.request.each_key do |operation_class_name| - if Isomorfeus.valid_operation_class_name?(operation_class_name) - operation_class = Isomorfeus.cached_operation_class(operation_class_name) - if operation_class - props = response_agent.request[operation_class_name] - props.transform_keys!(&:to_sym) - begin - if Isomorfeus.current_user.authorized?(operation_class, :promise_run, props) - operation_promise = operation_class.promise_run(**props) - if operation_promise.realized? - state = operation_promise.resolved? ? :resolved : :rejected - result_hash = { state => operation_promise.value } - if operation_promise.error - e = operation_promise.error - result_hash[:error] = { message: e.message, class_name: e.class.to_s, back_trace: e.backtrace } - end - response_agent.agent_result = { success: 'ok' , result: result_hash } - else - start = Time.now - timeout = false - while !operation_promise.realized? - if (Time.now - start) > 20 - timeout = true - break - end - sleep 0.01 - end - if timeout - response_agent.error = { error: 'Timeout' } - else - state = operation_promise.resolved? ? :resolved : :rejected - result_hash = { state => operation_promise.value } - if operation_promise.error - e = operation_promise.error - result_hash[:error] = { message: e.message, class_name: e.class.to_s, back_trace: e.backtrace } - end - response_agent.agent_result = { success: 'ok' , result: result_hash } - end - end - else - response_agent.error = { error: 'Access denied!' } - end - rescue Exception => e - response_agent.error = { error: { operation_class_name => "Isomorfeus::Operation::Handler::OperationHandler: #{e.message}" }} - end - else - response_agent.error = { error: { operation_class_name => 'Could not get operation class!' }} - end - else - response_agent.error = { error: { operation_class_name => 'No such operation class!' }} - end - end - end - end - end - end -end +# frozen_string_literal: true + +module Isomorfeus + module Operation + module Handler + class OperationHandler < LucidHandler::Base + on_request do |response_agent| + # promise_send_path('Isomorfeus::Operation::Handler::OperationHandler', self.to_s, props_hash) + response_agent.request.each_key do |operation_class_name| + if Isomorfeus.valid_operation_class_name?(operation_class_name) + operation_class = Isomorfeus.cached_operation_class(operation_class_name) + if operation_class + props = response_agent.request[operation_class_name] + props.transform_keys!(&:to_sym) + begin + if Isomorfeus.current_user.authorized?(operation_class, :promise_run, props) + operation_promise = operation_class.promise_run(**props) + if operation_promise.realized? + state = operation_promise.resolved? ? :resolved : :rejected + result_hash = { state => operation_promise.value } + if operation_promise.error + e = operation_promise.error + result_hash[:error] = { message: e.message, class_name: e.class.to_s, back_trace: e.backtrace } + end + response_agent.agent_result = { success: 'ok' , result: result_hash } + else + start = Time.now + timeout = false + while !operation_promise.realized? + if (Time.now - start) > 20 + timeout = true + break + end + sleep 0.01 + end + if timeout + response_agent.error = { error: 'Timeout' } + else + state = operation_promise.resolved? ? :resolved : :rejected + result_hash = { state => operation_promise.value } + if operation_promise.error + e = operation_promise.error + result_hash[:error] = { message: e.message, class_name: e.class.to_s, back_trace: e.backtrace } + end + response_agent.agent_result = { success: 'ok' , result: result_hash } + end + end + else + response_agent.error = { error: 'Access denied!' } + end + rescue Exception => e + response_agent.error = { error: { operation_class_name => "Isomorfeus::Operation::Handler::OperationHandler: #{e.message}" }} + end + else + response_agent.error = { error: { operation_class_name => 'Could not get operation class!' }} + end + else + response_agent.error = { error: { operation_class_name => 'No such operation class!' }} + end + end + end + end + end + end +end