Skip to content

Commit

Permalink
indirect obj direct sources with deps (#1931)
Browse files Browse the repository at this point in the history
  • Loading branch information
SebouChu committed May 27, 2024
1 parent e34ed80 commit b66181d
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 22 deletions.
23 changes: 1 addition & 22 deletions app/models/communication/website/with_git_repository.rb
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,9 @@ def repository_url

# Synchronisation optimale d'objet indirect
def sync_indirect_object_with_git(indirect_object)
all_dependencies = []
indirect_object.direct_sources.each do |direct_source|
all_dependencies = add_direct_source_to_sync(direct_source, array: all_dependencies)
end
all_dependencies.each do |dependency|
indirect_object.direct_sources_with_dependencies.each do |dependency|
Communication::Website::GitFile.sync self, dependency
end

git_repository.sync!
end

Expand Down Expand Up @@ -93,20 +88,4 @@ def update_theme_version_safely
git_repository.update_theme_version!
end

protected

def add_direct_source_to_sync(direct_source, array: [])
# Ne pas traiter les sources d'autres sites
return array unless direct_source.website.id == self.id
# Ne pas traiter les sources non synchronisables
return array unless direct_source.syncable?
# Ne pas traiter si la source directe est déjà dans le tableau de dépendances
return array if array.include?(direct_source)
array << direct_source
# On passe le tableau de dépendances à la méthode recursive_dependencies
# pour qu'il soit capable d'early return en cas de doublon
array += direct_source.recursive_dependencies(array: array, syncable_only: true)
# On ne synchronise pas les références de l'objet direct, car on ne le modifie pas lui.
array
end
end
23 changes: 23 additions & 0 deletions app/models/concerns/as_indirect_object.rb
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,14 @@ def direct_sources_from_existing_connections
connections.collect &:direct_source
end

def direct_sources_with_dependencies
dependencies = []
direct_sources.each do |direct_source|
dependencies = add_direct_source_to_dependencies(direct_source, array: dependencies)
end
dependencies
end

protected

def direct_sources_from_reference(reference)
Expand All @@ -70,4 +78,19 @@ def connect_and_sync_direct_sources
end
end

def add_direct_source_to_dependencies(direct_source, array: [])
# Ne pas traiter les sources d'autres sites
return array unless direct_source.website.id == self.id
# Ne pas traiter les sources non synchronisables
return array unless direct_source.syncable?
# Ne pas traiter si la source directe est déjà dans le tableau de dépendances
return array if array.include?(direct_source)
array << direct_source
# On passe le tableau de dépendances à la méthode recursive_dependencies
# pour qu'il soit capable d'early return en cas de doublon
array += direct_source.recursive_dependencies(array: array, syncable_only: true)
# On ne synchronise pas les références de l'objet direct, car on ne le modifie pas lui.
array
end

end

0 comments on commit b66181d

Please sign in to comment.