Sha256: dde9b4f216181dbb356058c702423909cb2c9dc7decc1aa7edfc857a66290c68

Contents?: true

Size: 1.43 KB

Versions: 8

Compression:

Stored size: 1.43 KB

Contents

module Geminabox

  class IncomingGem
    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

    def gem_data
      File.open(@tempfile.path, "rb")
    end

    def valid?
      spec && spec.name && spec.version
    rescue Gem::Package::Error
      false
    end

    def spec
      @spec ||= extract_spec
    end

    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

    def name
      @name ||= get_name
    end

    def get_name
      filename = %W[#{spec.name} #{spec.version}]
      filename.push(spec.platform) if spec.platform && spec.platform != "ruby"
      filename.join("-") + ".gem"
    end

    def dest_filename
      File.join(@root_path, "gems", name)
    end

    def hexdigest
      @sha1
    end
  end

end

Version data entries

8 entries across 8 versions & 2 rubygems

Version Path
geminabox-0.12.3 lib/geminabox/incoming_gem.rb
geminabox-jgraichen-0.12.2.4 lib/geminabox/incoming_gem.rb
geminabox-jgraichen-0.12.2.3 lib/geminabox/incoming_gem.rb
geminabox-jgraichen-0.12.2.2 lib/geminabox/incoming_gem.rb
geminabox-jgraichen-0.12.2.1 lib/geminabox/incoming_gem.rb
geminabox-0.12.2 lib/geminabox/incoming_gem.rb
geminabox-0.12.1 lib/geminabox/incoming_gem.rb
geminabox-0.12.0 lib/geminabox/incoming_gem.rb