lib/isomorfeus/operation/handler/operation_handler.rb in isomorfeus-operation-1.0.0.epsilon1 vs lib/isomorfeus/operation/handler/operation_handler.rb in isomorfeus-operation-1.0.0.epsilon2
- old
+ new
@@ -1,37 +1,43 @@
+# frozen_string_literal: true
+
module Isomorfeus
module Operation
module Handler
class OperationHandler < LucidHandler::Base
- on_request do |pub_sub_client, session_id, current_user, request, response|
+ on_request do |pub_sub_client, current_user, request, response|
result = { error: 'No such thing' }
# promise_send_path('Isomorfeus::Operation::Handler::OperationHandler', self.to_s, props_hash)
- request.keys.each do |operation_class_name|
+ 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_json = request[operation_class_name]
begin
props = Oj.load(props_json, mode: :strict)
- props.merge!({pub_sub_client: pub_sub_client, session_id: session_id, current_user: current_user})
- operation_promise = operation_class.promise_run(props)
- if operation_promise.realized?
- result = { success: 'ok' , result: operation_promise.value }
- else
- start = Time.now
- timeout = false
- while !operation_promise.realized?
- if (Time.now - start) > 20
- timeout = true
- break
+ props.merge!({pub_sub_client: pub_sub_client, current_user: current_user})
+ if current_user.authorized?(operation_class, :promise_run, *props)
+ operation_promise = operation_class.promise_run(props)
+ if operation_promise.realized?
+ result = { success: 'ok' , result: operation_promise.value }
+ else
+ start = Time.now
+ timeout = false
+ while !operation_promise.realized?
+ if (Time.now - start) > 20
+ timeout = true
+ break
+ end
+ sleep 0.01
end
- sleep 0.01
+ if timeout
+ result = { error: 'Timeout' }
+ else
+ result = { success: 'ok' , result: operation_promise.value }
+ end
end
- if timeout
- result = { error: 'Timeout' }
- else
- result = { success: 'ok' , result: operation_promise.value }
- end
+ else
+ result = { error: 'Access denied!' }
end
rescue Exception => e
result = if Isomorfeus.production?
{ error: { operation_class_name => 'No such thing!' }}
else