class Geminabox::IncomingGem
Public Class Methods
new(gem_data, root_path = Geminabox.data)
click to toggle source
# File lib/geminabox/incoming_gem.rb, line 4 def initialize(gem_data, root_path = Geminabox.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', :binmode => true) 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 61 def dest_filename File.join(@root_path, "gems", name) end
extract_spec()
click to toggle source
# File lib/geminabox/incoming_gem.rb, line 41 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 27 def gem_data File.open(@tempfile.path, "rb") end
get_name()
click to toggle source
# File lib/geminabox/incoming_gem.rb, line 55 def get_name filename = %W[#{spec.name} #{spec.version}] filename.push(spec.platform) if spec.platform && spec.platform != "ruby" filename.join("-") + ".gem" end
hexdigest()
click to toggle source
# File lib/geminabox/incoming_gem.rb, line 65 def hexdigest @sha1 end
name()
click to toggle source
# File lib/geminabox/incoming_gem.rb, line 51 def name @name ||= get_name end
spec()
click to toggle source
# File lib/geminabox/incoming_gem.rb, line 37 def spec @spec ||= extract_spec end
valid?()
click to toggle source
# File lib/geminabox/incoming_gem.rb, line 31 def valid? spec && spec.name && spec.version rescue Gem::Package::Error false end