lib/primo/remote.rb
class Primo
class Remote
DIRECTORY = File.expand_path('~/.primo_remotes').freeze
def self.list
Primo::Config.instance.config[:remotes]
end
attr_accessor :name, :url
def initialize name, url = nil
@name = name
@url = url || Primo::Config.instance.config[:remotes][name]
ensure_saved
end
def templates
template_names.map {|name| Primo::Template.new(name, self)}
end
def update
ensure_cloned
system "cd #{directory}; git fetch -q && git reset --hard origin/master -q"
end
def remove
Primo::Config.instance.config[:remotes].delete(name)
Primo::Config.instance.save
FileUtils.rm_rf directory
end
def directory
"#{DIRECTORY}/#{name}"
end
def ensure_cloned
unless File.exists? "#{directory}/.git"
system "git clone #{url} #{directory} -q"
end
rescue
raise "Could not load templates from #{url}"
end
private
def ensure_saved
if !Primo::Config.instance.config[:remotes][name] && url
Primo::Config.instance.config[:remotes][name] = url
Primo::Config.instance.save
end
end
def template_names
Dir.entries(directory).select do |filename|
filename =~ /\.rb$/
end
end
end
end