Class: NetworkManager::UserHandler

Inherits:
NetworkManager show all
Defined in:
app/services/network_manager/user_handler.rb

Overview

Synchronizing users with central site

Constant Summary collapse

PATH =
"#{MAIN_HOST}/network/users"

Constants inherited from NetworkManager

MAIN_HOST

Instance Attribute Summary

Attributes inherited from NetworkManager

#data, #entity

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from NetworkManager

ignored_attributes, permitted_attributes

Class Method Details

.entity_from_relationship_data(data) ⇒ Object

Parameters:

  • data (Hash)


24
25
26
27
28
29
30
31
# File 'app/services/network_manager/user_handler.rb', line 24

def self.entity_from_relationship_data(data)
  return nil if data.blank?

  a = { uuid: data[:id] }
  b = { slug: data.dig(:attributes, :slug) }

  User.find_by(a) || User.find_by(b)
end

.relationship_data(entity, wrap = false) ⇒ Object

Parameters:

  • entity (User)
  • (TrueClass|FalseClass)


9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'app/services/network_manager/user_handler.rb', line 9

def self.relationship_data(entity, wrap = false)
  return nil if entity.nil?

  data = {
    id: entity.uuid,
    type: entity.class.table_name,
    attributes: {
      slug: entity.slug
    }
  }

  wrap ? { data: data } : data
end

Instance Method Details

#create_localObject

Create user from remote data



34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'app/services/network_manager/user_handler.rb', line 34

def create_local
  uuid = @data[:id]

  log_event "[I] Creating local user #{uuid}"

  @entity = User.new(uuid: uuid)
  @entity.agent = Agent.named(@data.dig(:meta, :agent_name).to_s)

  apply_for_create

  @entity.save
  @entity
end

#create_remote(entity) ⇒ Object

Push user to central site

Parameters:

  • entity (User)


68
69
70
71
72
# File 'app/services/network_manager/user_handler.rb', line 68

def create_remote(entity)
  log_event("[I] Creating remote user #{entity.id} (#{entity.uuid})")
  @entity = entity
  rest(:post, PATH, data_for_remote)
end

#update_localObject

Update user from remote data



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'app/services/network_manager/user_handler.rb', line 49

def update_local
  uuid = @data[:id]

  log_event "[I] Updating local user #{uuid}"

  @entity = self.class.entity_from_relationship_data(@data)

  if @entity.nil?
    log_event "[E] Cannot find user #{uuid}"
    false
  else
    apply_for_update
    @entity.save
  end
end

#update_remote(entity) ⇒ Object

Parameters:

  • entity (User)


75
76
77
78
79
# File 'app/services/network_manager/user_handler.rb', line 75

def update_remote(entity)
  log_event("[I] Updating remote user #{entity.id} (#{entity.uuid})")
  @entity = entity
  rest(:put, "#{PATH}/#{entity.uuid}", data_for_remote)
end