Class: LibyearBundler::Models::Ruby
- Inherits:
-
Object
- Object
- LibyearBundler::Models::Ruby
- Defined in:
- lib/libyear_bundler/models/ruby.rb
Overview
Logic and information pertaining to the installed and newest Ruby versions
Constant Summary collapse
- RUBY_VERSION_DATA_URL =
"https://raw.githubusercontent.com/ruby/" \ "www.ruby-lang.org/master/_data/releases.yml".freeze
Class Method Summary collapse
-
.all_stable_versions ⇒ Array<String>
We’ll only consider non-prerelease versions when analyzing ruby version, which we also implcitly do for gem versions because that’s bundler’s default behavior.
- .newest_version ⇒ Object
- .newest_version_release_date ⇒ Object
- .newest_version_sequence_index ⇒ Object
- .release_date(version_obj) ⇒ Object
Instance Method Summary collapse
-
#initialize(lockfile, release_date_cache) ⇒ Ruby
constructor
A new instance of Ruby.
- #installed_version ⇒ Object
- #installed_version_release_date ⇒ Object
- #libyears ⇒ Object
- #name ⇒ Object
-
#newest_version ⇒ Object
Simply delegates to class method, but we still need it to conform to the interface expected by ‘Report#meta_line_summary`.
-
#newest_version_release_date ⇒ Object
Simply delegates to class method, but we still need it to conform to the interface expected by ‘Report#meta_line_summary`.
- #outdated? ⇒ Boolean
- #version_number_delta ⇒ Object
- #version_sequence_delta ⇒ Object
Constructor Details
#initialize(lockfile, release_date_cache) ⇒ Ruby
Returns a new instance of Ruby.
19 20 21 22 23 24 25 |
# File 'lib/libyear_bundler/models/ruby.rb', line 19 def initialize(lockfile, release_date_cache) unless release_date_cache.nil? || release_date_cache.is_a?(ReleaseDateCache) raise TypeError, 'Invalid release_date_cache' end @lockfile = lockfile @release_date_cache = release_date_cache end |
Class Method Details
.all_stable_versions ⇒ Array<String>
We’ll only consider non-prerelease versions when analyzing ruby version, which we also implcitly do for gem versions because that’s bundler’s default behavior
33 34 35 36 37 |
# File 'lib/libyear_bundler/models/ruby.rb', line 33 def all_stable_versions all_versions.reject do |version| ::Gem::Version.new(version).prerelease? end end |
.newest_version ⇒ Object
39 40 41 |
# File 'lib/libyear_bundler/models/ruby.rb', line 39 def newest_version ::Gem::Version.new(all_stable_versions.first) end |
.newest_version_release_date ⇒ Object
43 44 45 46 47 48 49 |
# File 'lib/libyear_bundler/models/ruby.rb', line 43 def newest_version_release_date if @release_date_cache.nil? release_date(newest_version) else @release_date_cache[name, newest_version] end end |
.newest_version_sequence_index ⇒ Object
51 52 53 |
# File 'lib/libyear_bundler/models/ruby.rb', line 51 def newest_version_sequence_index all_stable_versions.find_index(newest_version.to_s) end |
.release_date(version_obj) ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/libyear_bundler/models/ruby.rb', line 55 def release_date(version_obj) version = version_obj.to_s v = all_stable_versions.detect { |ver| ver == version } if v.nil? raise format('Cannot determine release date for ruby %s', version) end # YAML#safe_load provides an already-parsed Date object, so the following # is a Date object v['date'] end |
Instance Method Details
#installed_version ⇒ Object
99 100 101 102 103 104 105 |
# File 'lib/libyear_bundler/models/ruby.rb', line 99 def installed_version @_installed_version ||= begin version_from_bundler || version_from_ruby_version_file || version_from_ruby end end |
#installed_version_release_date ⇒ Object
107 108 109 110 111 112 113 |
# File 'lib/libyear_bundler/models/ruby.rb', line 107 def installed_version_release_date if @release_date_cache.nil? self.class.release_date(installed_version) else @release_date_cache[name, installed_version] end end |
#libyears ⇒ Object
115 116 117 118 119 120 |
# File 'lib/libyear_bundler/models/ruby.rb', line 115 def libyears ::LibyearBundler::Calculators::Libyear.calculate( installed_version_release_date, self.class.newest_version_release_date ) end |
#name ⇒ Object
122 123 124 |
# File 'lib/libyear_bundler/models/ruby.rb', line 122 def name 'ruby' end |
#newest_version ⇒ Object
Simply delegates to class method, but we still need it to conform to the interface expected by ‘Report#meta_line_summary`.
128 129 130 |
# File 'lib/libyear_bundler/models/ruby.rb', line 128 def newest_version self.class.newest_version end |
#newest_version_release_date ⇒ Object
Simply delegates to class method, but we still need it to conform to the interface expected by ‘Report#meta_line_summary`.
134 135 136 |
# File 'lib/libyear_bundler/models/ruby.rb', line 134 def newest_version_release_date self.class.newest_version_release_date end |
#outdated? ⇒ Boolean
138 139 140 |
# File 'lib/libyear_bundler/models/ruby.rb', line 138 def outdated? installed_version < newest_version end |
#version_number_delta ⇒ Object
142 143 144 145 146 147 |
# File 'lib/libyear_bundler/models/ruby.rb', line 142 def version_number_delta ::LibyearBundler::Calculators::VersionNumberDelta.calculate( installed_version, self.class.newest_version ) end |
#version_sequence_delta ⇒ Object
149 150 151 152 153 154 |
# File 'lib/libyear_bundler/models/ruby.rb', line 149 def version_sequence_delta ::LibyearBundler::Calculators::VersionSequenceDelta.calculate( installed_version_sequence_index, self.class.newest_version_sequence_index ) end |