Class: Nexo::FetchRemoteResourceJob

Inherits:
BaseJob
  • Object
show all
Includes:
ApiClients
Defined in:
app/jobs/nexo/fetch_remote_resource_job.rb

Overview

Always must be executed asynchronously to ensure the concurrency limit applies

Responsabilities:

- Creating a ElementVersion on external incoming change
- Updating a Synchronizable for that external change

Raises:

  • ActiveRecord::RecordNotUnique

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#elementObject (readonly)

Returns the value of attribute element.



12
13
14
# File 'app/jobs/nexo/fetch_remote_resource_job.rb', line 12

def element
  @element
end

Instance Method Details

#handle_response(element, response) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'app/jobs/nexo/fetch_remote_resource_job.rb', line 25

def handle_response(element, response)
  # TODO!: refactor y que no tenga que repetir esta asignación
  #        extraer a algún Service?
  @element = element

  if response.present? && element.element_versions.where(etag: response.etag).empty?
    Nexo.logger.debug { "Fetched new element version from remote server" }
    Nexo.logger.debug { response.payload }

    element_version = save_element_version(response)

    if element.folder.sync_external_changes?
      ImportRemoteElementVersion.new.perform(element_version)
    else
      Nexo.logger.info("Element version ignored_by_sync_direction")
    end
  else
    Nexo.logger.debug { "No new version fetched from remote server" }
  end
end

#perform(element) ⇒ Object



14
15
16
17
18
19
20
21
22
23
# File 'app/jobs/nexo/fetch_remote_resource_job.rb', line 14

def perform(element)
  @element = element

  remote_service = ServiceBuilder.instance.build_protocol_service(element.folder)

  response = remote_service.get_event(element)
  # TODO!: handle calendar change

  handle_response(element, response)
end