Class: Captain::Remote

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/captain/remote.rb

Defined Under Namespace

Modules: Adapter, Cache, Verifier Classes: ProgressMeter, Stream

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(uri, verifier = Verifier::Content.new) ⇒ Remote

Returns a new instance of Remote.



42
43
44
45
46
# File 'lib/captain/remote.rb', line 42

def initialize(uri, verifier=Verifier::Content.new)
  @uri      = URI.parse(uri)
  @verifier = verifier
  @cache    = Cache::Persistent.new
end

Class Method Details

.component_file(mirror, codename, component, architecture, *rest) ⇒ Object



14
15
16
17
18
19
# File 'lib/captain/remote.rb', line 14

def self.component_file(mirror, codename, component, architecture, *rest)
  uri    = component_uri(mirror, codename, component, architecture, *rest)
  path   = [component, "binary-#{architecture}", *rest].join('/')
  md5sum = release_file(mirror, codename).grep(%r{^ \w{32}\s+\d+\s+#{path}}).first.split(' ').first
  new(uri, Verifier::MD5.new(md5sum))
end

.component_uri(mirror, codename, component, architecture, *rest) ⇒ Object



32
33
34
# File 'lib/captain/remote.rb', line 32

def self.component_uri(mirror, codename, component, architecture, *rest)
  ["#{mirror}/dists/#{codename}/#{component}/binary-#{architecture}", *rest].join('/')
end

.installer_file(mirror, codename, architecture, *rest) ⇒ Object



21
22
23
24
25
26
# File 'lib/captain/remote.rb', line 21

def self.installer_file(mirror, codename, architecture, *rest)
  uri        = installer_uri(mirror, codename, architecture, *rest)
  md5sum_uri = installer_uri(mirror, codename, architecture, 'MD5SUMS')
  md5sum     = new(md5sum_uri).grep(%r{#{rest.join('/')}}).first.split(' ').first
  new(uri, Verifier::MD5.new(md5sum))
end

.installer_uri(mirror, codename, architecture, *rest) ⇒ Object



36
37
38
# File 'lib/captain/remote.rb', line 36

def self.installer_uri(mirror, codename, architecture, *rest)
  ["#{mirror}/dists/#{codename}/main/installer-#{architecture}/current/images", *rest].join('/')
end

.package_file(mirror, filename, md5sum) ⇒ Object



28
29
30
# File 'lib/captain/remote.rb', line 28

def self.package_file(mirror, filename, md5sum)
  new("#{mirror}/#{filename}", Verifier::MD5.new(md5sum))
end

.release_file(mirror, codename) ⇒ Object



9
10
11
12
# File 'lib/captain/remote.rb', line 9

def self.release_file(mirror, codename)
  # TODO verify the Release file with GPG
  new("#{mirror}/dists/#{codename}/Release")
end

Instance Method Details

#copy_to(*paths) ⇒ Object



48
49
50
51
52
53
54
55
56
57
# File 'lib/captain/remote.rb', line 48

def copy_to(*paths)
  path = Pathname.new(File.join(paths))
  path.dirname.mkpath

  open_stream do |stream|
    File.open(path, 'w') do |file|
      Stream.copy(stream, file)
    end
  end
end

#each_lineObject Also known as: each



59
60
61
62
63
64
65
# File 'lib/captain/remote.rb', line 59

def each_line
  open_stream do |stream|
    stream.each_line do |line|
      yield line
    end
  end
end

#gunzippedObject



68
69
70
# File 'lib/captain/remote.rb', line 68

def gunzipped
  Adapter::Gunzip.new(self)
end