app/models/maestrano/connector/rails/complex_entity.rb in maestrano-connector-rails-0.2.16 vs app/models/maestrano/connector/rails/complex_entity.rb in maestrano-connector-rails-0.2.17

- old
+ new

@@ -50,18 +50,18 @@ end # ------------------------------------------------------------- # General methods # ------------------------------------------------------------- - def map_to_external_with_idmap(entity, organization, connec_entity_name, external_entity_name, sub_entity_instance) - idmap = IdMap.find_by(connec_id: entity['id'], connec_entity: connec_entity_name.downcase, external_entity: external_entity_name.downcase, organization_id: organization.id) + def map_to_external_with_idmap(entity, organization, external_entity_name, sub_entity_instance) + idmap = sub_entity_instance.find_idmap({connec_id: entity['id'], external_entity: external_entity_name, organization_id: organization.id}) - if idmap && idmap.last_push_to_external && idmap.last_push_to_external > entity['updated_at'] - ConnectorLogger.log('info', organization, "Discard Connec! #{connec_entity_name} : #{entity}") + if idmap && ((!idmap.to_external) || idmap.last_push_to_external && idmap.last_push_to_external > entity['updated_at']) + ConnectorLogger.log('info', organization, "Discard Connec! #{sub_entity_instance.entity_name} : #{entity}") nil else - {entity: sub_entity_instance.map_to(external_entity_name, entity, organization), idmap: idmap || IdMap.create(connec_id: entity['id'], connec_entity: connec_entity_name.downcase, external_entity: external_entity_name.downcase, organization_id: organization.id, name: sub_entity_instance.object_name_from_connec_entity_hash(entity))} + {entity: sub_entity_instance.map_to(external_entity_name, entity, organization), idmap: idmap || sub_entity_instance.create_idmap_from_connec_entity(entity, external_entity_name, organization)} end end # ------------------------------------------------------------- # Entity equivalent methods @@ -93,53 +93,34 @@ modeled_external_entities.each do |external_entity_name, entities_in_connec_model| entities_in_connec_model.each do |connec_entity_name, entities| sub_entity_instance = "Entities::SubEntities::#{external_entity_name.titleize.split.join}".constantize.new entities.map!{|entity| - idmap = IdMap.find_by(external_id: sub_entity_instance.get_id_from_external_entity_hash(entity), external_entity: external_entity_name.downcase, connec_entity: connec_entity_name.downcase, organization_id: organization.id) + idmap = sub_entity_instance.find_idmap(external_id: sub_entity_instance.get_id_from_external_entity_hash(entity), connec_entity: connec_entity_name, organization_id: organization.id) # No idmap: creating one, nothing else to do unless idmap - next {entity: sub_entity_instance.map_to(connec_entity_name, entity, organization), idmap: IdMap.create(external_id: sub_entity_instance.get_id_from_external_entity_hash(entity), external_entity: external_entity_name.downcase, connec_entity: connec_entity_name.downcase, organization_id: organization.id, name: sub_entity_instance.object_name_from_external_entity_hash(entity))} + next {entity: sub_entity_instance.map_to(connec_entity_name, entity, organization), idmap: sub_entity_instance.create_idmap_from_external_entity(entity, connec_entity_name, organization)} end + # Not pushing entity to Connec! + next nil unless idmap.to_connec + # Entity has not been modified since its last push to connec! - if idmap.last_push_to_connec && idmap.last_push_to_connec > sub_entity_instance.get_last_update_date_from_external_entity_hash(entity) - ConnectorLogger.log('info', organization, "Discard #{@@external_name} #{external_entity_name} : #{entity}") - next nil - end + next nil if Maestrano::Connector::Rails::Entity.not_modified_since_last_push_to_connec(idmap, entity, sub_entity_instance, organization) - equivalent_connec_entities = connec_entities[connec_entity_name][external_entity_name] || [] # Check for conflict with entities from connec! - if idmap.connec_id && connec_entity = equivalent_connec_entities.detect{|connec_entity| connec_entity['id'] == idmap.connec_id} - # We keep the most recently updated entity - if !opts[:connec_preemption].nil? - keep_external = !opts[:connec_preemption] - else - keep_external = connec_entity['updated_at'] < sub_entity_instance.get_last_update_date_from_external_entity_hash(entity) - end - - if keep_external - ConnectorLogger.log('info', organization, "Conflict between #{@@external_name} #{external_entity_name} #{entity} and Connec! #{connec_entity_name} #{connec_entity}. Entity from #{@@external_name} kept") - equivalent_connec_entities.delete(connec_entity) - {entity: sub_entity_instance.map_to(connec_entity_name, entity, organization), idmap: idmap} - else - ConnectorLogger.log('info', organization, "Conflict between #{@@external_name} #{external_entity_name} #{entity} and Connec! #{connec_entity_name} #{connec_entity}. Entity from Connec! kept") - nil - end - - else - {entity: sub_entity_instance.map_to(connec_entity_name, entity, organization), idmap: idmap} - end + equivalent_connec_entities = modeled_connec_entities[connec_entity_name][external_entity_name] || [] + Maestrano::Connector::Rails::Entity.solve_conflict(entity, sub_entity_instance, equivalent_connec_entities, connec_entity_name, idmap, organization, opts) }.compact! end end modeled_connec_entities.each do |connec_entity_name, entities_in_external_model| entities_in_external_model.each do |external_entity_name, entities| sub_entity_instance = "Entities::SubEntities::#{connec_entity_name.titleize.split.join}".constantize.new entities.map!{|entity| - self.map_to_external_with_idmap(entity, organization, connec_entity_name, external_entity_name, sub_entity_instance) + self.map_to_external_with_idmap(entity, organization, external_entity_name, sub_entity_instance) }.compact! end end return {connec_entities: modeled_connec_entities, external_entities: modeled_external_entities} \ No newline at end of file