Class: Jets::Gems::Exist

Inherits:
Object
  • Object
show all
Defined in:
lib/jets/gems/exist.rb

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ Exist

Returns a new instance of Exist.



5
6
7
# File 'lib/jets/gems/exist.rb', line 5

def initialize(options)
  @options = options
end

Instance Method Details

#check(*gem_names) ⇒ Object

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)


16
17
18
19
20
21
22
23
24
25
# File 'lib/jets/gems/exist.rb', line 16

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

#gem_url(gem_name) ⇒ Object

gem_name: byebug-9.1.0 Example url:

https://gems2.lambdagems.com/gems/2.5.0/byebug/byebug-9.1.0.zip


47
48
49
50
# File 'lib/jets/gems/exist.rb', line 47

def gem_url(gem_name)
  folder = gem_name.gsub(/-(\d+\.\d+\.\d+.*)/,'') # folder: byebug
  "#{source_url}/gems/#{Jets::Gems.ruby_folder}/#{folder}/#{gem_name}.zip"
end

#ruby_folderObject



52
53
54
# File 'lib/jets/gems/exist.rb', line 52

def ruby_folder
  Jets::Gems.ruby_folder
end

#source_urlObject



40
41
42
# File 'lib/jets/gems/exist.rb', line 40

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

#url_exists?(url) ⇒ Boolean

Example url:

https://gems2.lambdagems.com/gems/2.5.0/byebug/byebug-9.1.0.zip

Returns:

  • (Boolean)


29
30
31
32
33
34
35
36
37
38
# File 'lib/jets/gems/exist.rb', line 29

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