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