Sha256: fe5fa6f70971249e5fbe142b86008b8b10f5b43bf3e7e9441b3a1c3ec564b78c

Contents?: true

Size: 1.51 KB

Versions: 21

Compression:

Stored size: 1.51 KB

Contents

require 'open-uri'

module Jets::Gems
  class Exist
    def initialize(options)
      @options = options
    end

    # We check all the availability before even downloading so we can provide a
    # full list of gems they might want to research all at once instead of incrementally
    #
    # Examples:
    #
    #   check(single_gem)
    #   check(list, of, gems)
    def check(*gem_names)
      gem_names = gem_names.flatten
      exists = gem_names.inject({}) do |hash, gem_name|
        exist = url_exists?(gem_url(gem_name))
        hash[gem_name] = exist
        hash.merge(hash)
      end

      exists.values.all? {|v| v } # all_exist
    end

    # Example url:
    #   https://gems.lambdagems.com/gems/2.5.0/byebug/byebug-9.1.0-x86_64-linux.tgz
    def url_exists?(url)
      url = URI.parse(url)
      req = Net::HTTP.new(url.host, url.port).tap do |http|
        http.use_ssl = true
      end
      res = req.request_head(url.path)
      res.code == "200"
    rescue SocketError, OpenURI::HTTPError, OpenSSL::SSL::SSLError
      false
    end

    def source_url
      @options[:source_url] || s3_url
    end

    # gem_name: byebug-9.1.0
    # Example url:
    #   https://gems.lambdagems.com/gems/2.5.0/byebug/byebug-9.1.0-x86_64-linux.tgz
    def gem_url(gem_name)
      folder = gem_name.gsub(/-(\d+\.\d+\.\d+.*)/,'') # folder: byebug
      "#{source_url}/gems/#{Jets::Gems.ruby_version_folder}/#{folder}/#{gem_name}-x86_64-linux.tgz"
    end

    def ruby_version_folder
      Jets::Gems.ruby_version_folder
    end
  end
end

Version data entries

21 entries across 21 versions & 1 rubygems

Version Path
jets-1.2.1 vendor/jets-gems/lib/jets/gems/exist.rb
jets-1.2.0 vendor/jets-gems/lib/jets/gems/exist.rb
jets-1.1.5 vendor/jets-gems/lib/jets/gems/exist.rb
jets-1.1.4 vendor/jets-gems/lib/jets/gems/exist.rb
jets-1.1.3 vendor/jets-gems/lib/jets/gems/exist.rb
jets-1.1.2 vendor/jets-gems/lib/jets/gems/exist.rb
jets-1.1.1 vendor/jets-gems/lib/jets/gems/exist.rb
jets-1.1.0 vendor/jets-gems/lib/jets/gems/exist.rb
jets-1.0.18 vendor/jets-gems/lib/jets/gems/exist.rb
jets-1.0.17 vendor/jets-gems/lib/jets/gems/exist.rb
jets-1.0.16 vendor/jets-gems/lib/jets/gems/exist.rb
jets-1.0.15 vendor/jets-gems/lib/jets/gems/exist.rb
jets-1.0.13 vendor/jets-gems/lib/jets/gems/exist.rb
jets-1.0.12 vendor/jets-gems/lib/jets/gems/exist.rb
jets-1.0.11 vendor/jets-gems/lib/jets/gems/exist.rb
jets-1.0.10 vendor/jets-gems/lib/jets/gems/exist.rb
jets-1.0.9 vendor/jets-gems/lib/jets/gems/exist.rb
jets-1.0.8 vendor/jets-gems/lib/jets/gems/exist.rb
jets-1.0.7 vendor/jets-gems/lib/jets/gems/exist.rb
jets-1.0.6 vendor/jets-gems/lib/jets/gems/exist.rb