Parent

Geminabox::IncomingGem

Public Class Methods

new(gem_data, root_path = Geminabox.settings.data) click to toggle source
# File lib/geminabox/incoming_gem.rb, line 2
def initialize(gem_data, root_path = Geminabox.settings.data)
  unless gem_data.respond_to? :read
    raise ArgumentError, "Expected an instance of IO"
  end

  digest = Digest::SHA1.new
  if RbConfig::CONFIG["MAJOR"].to_i <= 1 and RbConfig::CONFIG["MINOR"].to_i <= 8
    @tempfile = Tempfile.new("gem")
  else
    @tempfile = Tempfile.new("gem", :encoding => 'binary')
  end

  while data = gem_data.read(1024**2)
    @tempfile.write data
    digest << data
  end

  @tempfile.close
  @sha1 = digest.hexdigest

  @root_path = root_path
end

Public Instance Methods

dest_filename() click to toggle source
# File lib/geminabox/incoming_gem.rb, line 58
def dest_filename
  File.join(@root_path, "gems", name)
end
extract_spec() click to toggle source
# File lib/geminabox/incoming_gem.rb, line 39
def extract_spec
  if Gem::Package.respond_to? :open
    Gem::Package.open(gem_data, "r", nil) do |pkg|
      return pkg.metadata
    end
  else
    Gem::Package.new(@tempfile.path).spec
  end
end
gem_data() click to toggle source
# File lib/geminabox/incoming_gem.rb, line 25
def gem_data
  File.open(@tempfile.path, "rb")
end
hexdigest() click to toggle source
# File lib/geminabox/incoming_gem.rb, line 62
def hexdigest
  @sha1
end
name() click to toggle source
# File lib/geminabox/incoming_gem.rb, line 49
def name
  unless @name
    filename = ]#{spec.name} #{spec.version}]
    filename.push(spec.platform) if spec.platform && spec.platform != "ruby"
    @name = filename.join("-") + ".gem"
  end
  @name
end
spec() click to toggle source
# File lib/geminabox/incoming_gem.rb, line 35
def spec
  @spec ||= extract_spec
end
valid?() click to toggle source
# File lib/geminabox/incoming_gem.rb, line 29
def valid?
  spec && spec.name && spec.version
rescue Gem::Package::Error
  false
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.