Class: HaveAPI::Resources::ActionState::Poll
- Includes:
- Mixin
- Defined in:
- lib/haveapi/resources/action_state.rb
Constant Summary collapse
- MAX_TIMEOUT =
30
Constants inherited from Action
Instance Attribute Summary
Attributes inherited from Action
#current_user, #errors, #flags, #message, #request, #version
Instance Method Summary collapse
Methods included from Mixin
Methods inherited from Action
add_pre_authorize_blocks, authorize, #authorized?, build_route, delayed_inherited, describe, example, from_context, inherit_attrs_from_resource, inherited, initialize, #initialize, input, #input, meta, #meta, model_adapter, output, parameter_metadata_i18n_items, path_param_names, path_params, #path_params, #pre_exec, #prepare, resolve_path_params, #safe_exec, #safe_output, #set_meta, #v?, #validate!, validate_build
Methods included from Hookable
Methods inherited from Common
check_build, has_attr, inherit_attrs
Constructor Details
This class inherits a constructor from HaveAPI::Action
Instance Method Details
#exec ⇒ Object
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
# File 'lib/haveapi/resources/action_state.rb', line 120 def exec if input[:timeout] > MAX_TIMEOUT error!( HaveAPI.('haveapi.action_state.timeout_max', max: MAX_TIMEOUT), {}, http_status: 400 ) end t = Time.now loop do state = @context.server.action_state.new( current_user, id: path_params['action_state_id'] ) error!(HaveAPI.('haveapi.action_state.not_found')) unless state.valid? if state.finished? || (Time.now - t) >= input[:timeout] return state_to_hash(state) elsif input[:update_in] new_state = state_to_hash(state) %i[status current total].each do |v| return new_state if input[v] != new_state[v] end end return state_to_hash(state.poll(input)) if state.respond_to?(:poll) sleep(1) end end |