Module: Maestrano::Connector::Rails::Concerns::ComplexEntity

Extended by:
ActiveSupport::Concern
Included in:
Maestrano::Connector::Rails::ComplexEntity
Defined in:
app/models/maestrano/connector/rails/concerns/complex_entity.rb

Defined Under Namespace

Modules: ClassMethods

Instance Method Summary collapse

Instance Method Details

#connec_model_to_external_model(connec_hash_of_entities) ⇒ Object

input : {

   connec_entities_names[0]: [unmapped_connec_entitiy1, unmapped_connec_entitiy2],
   connec_entities_names[1]: [unmapped_connec_entitiy3, unmapped_connec_entitiy4]
}

output : {

   connec_entities_names[0]: {
     external_entities_names[0]: [unmapped_connec_entitiy1, unmapped_connec_entitiy2]
   },
   connec_entities_names[1]: {
     external_entities_names[0]: [unmapped_connec_entitiy3],
     external_entities_names[1]: [unmapped_connec_entitiy4]
   }
}


66
67
68
# File 'app/models/maestrano/connector/rails/concerns/complex_entity.rb', line 66

def connec_model_to_external_model(connec_hash_of_entities)
  raise 'Not implemented'
end

#consolidate_and_map_connec_entities(modelled_connec_entities, modelled_external_entities) ⇒ Object



120
121
122
123
124
125
126
127
128
129
130
# File 'app/models/maestrano/connector/rails/concerns/complex_entity.rb', line 120

def consolidate_and_map_connec_entities(modelled_connec_entities, modelled_external_entities)
  modelled_connec_entities.each do |connec_entity_name, entities_in_external_model|
    entities_in_external_model.each do |external_entity_name, entities|
      sub_entity_instance = instantiate_sub_entity_instance(self.class.formatted_connec_entities_names[connec_entity_name])
      equivalent_external_entities = (modelled_external_entities[external_entity_name] && modelled_external_entities[external_entity_name][connec_entity_name]) || []

      entities_in_external_model[external_entity_name] = sub_entity_instance.consolidate_and_map_connec_entities(entities, equivalent_external_entities, sub_entity_instance.class.references[external_entity_name] || [], external_entity_name)
    end
  end
  modelled_connec_entities
end

#consolidate_and_map_data(connec_entities, external_entities) ⇒ Object



110
111
112
113
114
115
116
117
118
# File 'app/models/maestrano/connector/rails/concerns/complex_entity.rb', line 110

def consolidate_and_map_data(connec_entities, external_entities)
  modelled_external_entities = external_model_to_connec_model(external_entities)
  modelled_connec_entities = connec_model_to_external_model(connec_entities)

  mapped_connec_entities = consolidate_and_map_connec_entities(modelled_connec_entities, modelled_external_entities)
  mapped_external_entities = consolidate_and_map_external_entities(modelled_external_entities)

  {connec_entities: mapped_connec_entities, external_entities: mapped_external_entities}
end

#consolidate_and_map_external_entities(modelled_external_entities) ⇒ Object



132
133
134
135
136
137
138
139
140
141
# File 'app/models/maestrano/connector/rails/concerns/complex_entity.rb', line 132

def consolidate_and_map_external_entities(modelled_external_entities)
  modelled_external_entities.each do |external_entity_name, entities_in_connec_model|
    entities_in_connec_model.each do |connec_entity_name, entities|
      sub_entity_instance = instantiate_sub_entity_instance(self.class.formatted_external_entities_names[external_entity_name])

      entities_in_connec_model[connec_entity_name] = sub_entity_instance.consolidate_and_map_external_entities(entities, connec_entity_name)
    end
  end
  modelled_external_entities
end

#external_model_to_connec_model(external_hash_of_entities) ⇒ Object

input :

   external_entities_names[0]: [unmapped_external_entity1, unmapped_external_entity2],
   external_entities_names[1]: [unmapped_external_entity3}, unmapped_external_entity4]
}

output : {

  external_entities_names[0]: {
    connec_entities_names[0]: [unmapped_external_entity1],
    connec_entities_names[1]: [unmapped_external_entity2]
  },
  external_entities_names[1]: {
    connec_entities_names[0]: [unmapped_external_entity3, unmapped_external_entity4]
  }
}


83
84
85
# File 'app/models/maestrano/connector/rails/concerns/complex_entity.rb', line 83

def external_model_to_connec_model(external_hash_of_entities)
  raise 'Not implemented'
end

#get_connec_entities(last_synchronization_date = nil) ⇒ Object


Entity equivalent methods



90
91
92
93
94
95
96
97
98
# File 'app/models/maestrano/connector/rails/concerns/complex_entity.rb', line 90

def get_connec_entities(last_synchronization_date = nil)
  entities = ActiveSupport::HashWithIndifferentAccess.new

  self.class.formatted_connec_entities_names.each do |connec_entity_name, connec_class_name|
    sub_entity_instance = instantiate_sub_entity_instance(connec_class_name)
    entities[connec_entity_name] = sub_entity_instance.get_connec_entities(last_synchronization_date)
  end
  entities
end

#get_external_entities_wrapper(last_synchronization_date = nil, entity_name = '') ⇒ Object



100
101
102
103
104
105
106
107
108
# File 'app/models/maestrano/connector/rails/concerns/complex_entity.rb', line 100

def get_external_entities_wrapper(last_synchronization_date = nil, entity_name = '')
  entities = ActiveSupport::HashWithIndifferentAccess.new

  self.class.formatted_external_entities_names.each do |external_entity_name, external_class_name|
    sub_entity_instance = instantiate_sub_entity_instance(external_class_name)
    entities[external_entity_name] = sub_entity_instance.get_external_entities_wrapper(last_synchronization_date, external_entity_name)
  end
  entities
end

#instantiate_sub_entity_instance(entity_name) ⇒ Object



170
171
172
# File 'app/models/maestrano/connector/rails/concerns/complex_entity.rb', line 170

def instantiate_sub_entity_instance(entity_name)
  self.class.instantiate_sub_entity_instance(entity_name, @organization, @connec_client, @external_client, @opts)
end

#push_entities_to_connec(mapped_external_entities_with_idmaps) ⇒ Object

input : {

   external_entities_names[0]: {
     connec_entities_names[0]: [mapped_external_entity1],
     connec_entities_names[1]: [mapped_external_entity2]
   },
   external_entities_names[1]: {
     connec_entities_names[0]: [mapped_external_entity3, mapped_external_entity4]
   }
}


152
153
154
155
156
157
158
159
# File 'app/models/maestrano/connector/rails/concerns/complex_entity.rb', line 152

def push_entities_to_connec(mapped_external_entities_with_idmaps)
  mapped_external_entities_with_idmaps.each do |external_entity_name, entities_in_connec_model|
    sub_entity_instance = instantiate_sub_entity_instance(self.class.formatted_external_entities_names[external_entity_name])
    entities_in_connec_model.each do |connec_entity_name, mapped_entities_with_idmaps|
      sub_entity_instance.push_entities_to_connec_to(mapped_entities_with_idmaps, connec_entity_name)
    end
  end
end

#push_entities_to_external(mapped_connec_entities_with_idmaps) ⇒ Object



161
162
163
164
165
166
167
168
# File 'app/models/maestrano/connector/rails/concerns/complex_entity.rb', line 161

def push_entities_to_external(mapped_connec_entities_with_idmaps)
  mapped_connec_entities_with_idmaps.each do |connec_entity_name, entities_in_external_model|
    sub_entity_instance = instantiate_sub_entity_instance(self.class.formatted_connec_entities_names[connec_entity_name])
    entities_in_external_model.each do |external_entity_name, mapped_entities_with_idmaps|
      sub_entity_instance.push_entities_to_external_to(mapped_entities_with_idmaps, external_entity_name)
    end
  end
end