class LibyearBundler::Models::Gem
Logic and information pertaining to the installed and newest versions of a gem
Public Class Methods
new(name, installed_version, newest_version, release_date_cache)
click to toggle source
# File lib/libyear_bundler/models/gem.rb, line 10 def initialize(name, installed_version, newest_version, release_date_cache) unless release_date_cache.nil? || release_date_cache.is_a?(ReleaseDateCache) raise TypeError, 'Invalid release_date_cache' end @name = name @installed_version = installed_version @newest_version = newest_version @release_date_cache = release_date_cache end
release_date(gem_name, gem_version)
click to toggle source
# File lib/libyear_bundler/models/gem.rb, line 21 def release_date(gem_name, gem_version) dep = nil begin dep = ::Bundler::Dependency.new(gem_name, gem_version) rescue ::Gem::Requirement::BadRequirementError => e $stderr.puts "Could not find release date for: #{gem_name}" $stderr.puts(e) $stderr.puts( "Maybe you used git in your Gemfile, which libyear doesn't support " \ "yet. Contributions welcome." ) return nil end tuples, _errors = ::Gem::SpecFetcher.fetcher.search_for_dependency(dep) if tuples.empty? $stderr.puts "Could not find release date for: #{gem_name}" return nil end tup, source = tuples.first # Gem::NameTuple spec = source.fetch_spec(tup) # raises Gem::RemoteFetcher::FetchError spec.date.to_date end
Public Instance Methods
installed_version()
click to toggle source
# File lib/libyear_bundler/models/gem.rb, line 45 def installed_version ::Gem::Version.new(@installed_version) end
installed_version_release_date()
click to toggle source
# File lib/libyear_bundler/models/gem.rb, line 49 def installed_version_release_date if @release_date_cache.nil? self.class.release_date(name, installed_version) else @release_date_cache[name, installed_version] end end
installed_version_sequence_index()
click to toggle source
# File lib/libyear_bundler/models/gem.rb, line 57 def installed_version_sequence_index versions_sequence.index(installed_version.to_s) end
libyears()
click to toggle source
# File lib/libyear_bundler/models/gem.rb, line 61 def libyears ::LibyearBundler::Calculators::Libyear.calculate( installed_version_release_date, newest_version_release_date ) end
name()
click to toggle source
# File lib/libyear_bundler/models/gem.rb, line 68 def name @name end
newest_version()
click to toggle source
# File lib/libyear_bundler/models/gem.rb, line 72 def newest_version ::Gem::Version.new(@newest_version) end
newest_version_release_date()
click to toggle source
# File lib/libyear_bundler/models/gem.rb, line 80 def newest_version_release_date if @release_date_cache.nil? self.class.release_date(name, newest_version) else @release_date_cache[name, newest_version] end end
newest_version_sequence_index()
click to toggle source
# File lib/libyear_bundler/models/gem.rb, line 76 def newest_version_sequence_index versions_sequence.index(newest_version.to_s) end
version_number_delta()
click to toggle source
# File lib/libyear_bundler/models/gem.rb, line 88 def version_number_delta ::LibyearBundler::Calculators::VersionNumberDelta.calculate( installed_version, newest_version ) end
version_sequence_delta()
click to toggle source
# File lib/libyear_bundler/models/gem.rb, line 95 def version_sequence_delta ::LibyearBundler::Calculators::VersionSequenceDelta.calculate( installed_version_sequence_index, newest_version_sequence_index ) end
Private Instance Methods
versions_sequence()
click to toggle source
docs: guides.rubygems.org/rubygems-org-api/#gem-version-methods Versions are returned ordered by version number, descending
# File lib/libyear_bundler/models/gem.rb, line 106 def versions_sequence @_versions_sequence ||= begin uri = URI.parse("https://rubygems.org/api/v1/versions/#{name}.json") response = Net::HTTP.get_response(uri) parsed_response = JSON.parse(response.body) parsed_response.map { |version| version['number'] } end end