class Djin::RemoteConfigRepository

Attributes

base_path[RW]
stderr[RW]

Public Class Methods

new(remote_configs, base_path: Pathname.new('~/.djin/remote'), stderr: Djin.stderr) click to toggle source
# File lib/djin/repositories/remote_config_repository.rb, line 7
def initialize(remote_configs, base_path: Pathname.new('~/.djin/remote'), stderr: Djin.stderr)
  @remote_configs = remote_configs
  @base_path = base_path
  @stderr = stderr
end

Public Instance Methods

add(remote_config) click to toggle source
# File lib/djin/repositories/remote_config_repository.rb, line 13
def add(remote_config)
  remote_configs << remote_config
end
clear() click to toggle source
# File lib/djin/repositories/remote_config_repository.rb, line 40
def clear
  remote_configs_by_folders.each do |rc|
    git_folder = base_path.join(rc.folder_name)

    stderr.puts "Removing #{rc.folder_name} repository..."
    `rm -rf #{git_folder}`
  end
end
clear_all() click to toggle source
# File lib/djin/repositories/remote_config_repository.rb, line 49
def clear_all
  remove_remote_folder
end
fetch_all() click to toggle source
# File lib/djin/repositories/remote_config_repository.rb, line 25
def fetch_all
  remote_configs_by_folders.each do |rc|
    git_folder = base_path.join(rc.folder_name).expand_path

    # TODO: Extract STDEER Output, maybe publishing events and subscribing a observer for the logs.
    stderr.puts "Remote Path: #{base_path.expand_path}"

    git_repo = rc.missing? ? clone_repo(git_folder, rc) : fetch_repo(git_folder, rc)

    stderr.puts "Checking out to '#{rc.version}'"
    git_repo.checkout(rc.version)
    git_repo.pull('origin', rc.version)
  end
end
find(**filters) click to toggle source
# File lib/djin/repositories/remote_config_repository.rb, line 17
def find(**filters)
  remote_configs.select do |remote_config|
    filters.reduce(true) do |memo, (filter_key, filter_value)|
      memo && remote_config.public_send(filter_key) == filter_value
    end
  end
end
remote_configs() click to toggle source
# File lib/djin/repositories/remote_config_repository.rb, line 53
def remote_configs
  @remote_configs ||= []
end

Private Instance Methods

clone_repo(git_folder, remote_config) click to toggle source
# File lib/djin/repositories/remote_config_repository.rb, line 73
def clone_repo(git_folder, remote_config)
  stderr.puts "Missing #{remote_config.folder_name} repository, cloning in #{git_folder}"
  Git.clone(remote_config.git.to_s, git_folder.to_s, branch: remote_config.version)
end
fetch_repo(git_folder, remote_config) click to toggle source
# File lib/djin/repositories/remote_config_repository.rb, line 78
def fetch_repo(git_folder, remote_config)
  stderr.puts "#{remote_config.git} repository already cloned, fetching..."
  git_repo = Git.open(git_folder)
  git_repo.fetch

  git_repo
end
remote_configs_by_folders() click to toggle source
# File lib/djin/repositories/remote_config_repository.rb, line 61
def remote_configs_by_folders
  @remote_configs_by_folders ||= remote_configs
                                 .group_by(&:folder_name)
                                 .values
                                 .map(&:first)
end
remove_remote_folder() click to toggle source
# File lib/djin/repositories/remote_config_repository.rb, line 68
def remove_remote_folder
  stderr.puts "Removing #{base_path}..."
  `rm -rf #{base_path}`
end