osunyorg/admin

View on GitHub
app/services/git/orphan_and_layout_analyzer.rb

Summary

Maintainability
A
0 mins
Test Coverage
# Orphans
# Les orphelins sont les fichiers du référentiel Git, dans content, 
# qui ne proviennent pas d'un git_file d'Osuny.
# Cela peut être normal, mais cela peut être aussi des fichiers mal supprimés.
# 
# Layouts
# Les fichiers de layouts sont les surcharges (override) du thème.
class Git::OrphanAndLayoutAnalyzer
  CONTENT_PATH = 'content/'
  LAYOUT_PATH = 'layouts/'
  SUFFIX = '.html'

  attr_reader :website

  def initialize(website)
    @website = website
  end

  def launch
    return unless repository.valid?
    website.git_file_orphans.destroy_all
    website.git_file_layouts.destroy_all
    files_in_the_repository.each do |path| 
      analyse(path)
    end
    website.update_column :git_files_analysed_at, Time.now
  end

  protected

  def repository
    @repository ||= website.git_repository
  end

  def files_in_the_repository
    @files_in_the_repository ||= repository.files_in_the_repository
  end

  def analyse(path)
    analyse_content(path) if path.start_with?(CONTENT_PATH)
    analyse_layout(path) if path.start_with?(LAYOUT_PATH)
  end

  def analyse_content(path)
    # Il y a un git file, ce fichier n'est pas orphelin
    return if path.in?(website_git_files)
    return unless path.end_with?(SUFFIX)
    Communication::Website::GitFile::Orphan.create(
      path: path,
      website: website,
      university: website.university
    )
  end

  def analyse_layout(path)
    return unless path.end_with?(SUFFIX)
    Communication::Website::GitFile::Layout.create(
      path: path,
      website: website,
      university: website.university
    )
  end

  # Les objets git_files de la base de données, pas les vrais sur Github!
  def website_git_files
    @website_git_files ||= website.git_files.map do |git_file|
      git_file.path
    rescue
      ''
    end
  end
end