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 @_version_data[v]['date'] end |
Instance Method Details
#installed_version ⇒ Object
101 102 103 104 105 106 107 |
# File 'lib/libyear_bundler/models/ruby.rb', line 101 def installed_version @_installed_version ||= begin version_from_bundler || version_from_ruby_version_file || version_from_ruby end end |
#installed_version_release_date ⇒ Object
109 110 111 112 113 114 115 |
# File 'lib/libyear_bundler/models/ruby.rb', line 109 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
117 118 119 120 121 122 |
# File 'lib/libyear_bundler/models/ruby.rb', line 117 def libyears ::LibyearBundler::Calculators::Libyear.calculate( installed_version_release_date, self.class.newest_version_release_date ) end |
#name ⇒ Object
124 125 126 |
# File 'lib/libyear_bundler/models/ruby.rb', line 124 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`.
130 131 132 |
# File 'lib/libyear_bundler/models/ruby.rb', line 130 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`.
136 137 138 |
# File 'lib/libyear_bundler/models/ruby.rb', line 136 def newest_version_release_date self.class.newest_version_release_date end |
#outdated? ⇒ Boolean
140 141 142 |
# File 'lib/libyear_bundler/models/ruby.rb', line 140 def outdated? installed_version < newest_version end |
#version_number_delta ⇒ Object
144 145 146 147 148 149 |
# File 'lib/libyear_bundler/models/ruby.rb', line 144 def version_number_delta ::LibyearBundler::Calculators::VersionNumberDelta.calculate( installed_version, self.class.newest_version ) end |
#version_sequence_delta ⇒ Object
151 152 153 154 155 156 |
# File 'lib/libyear_bundler/models/ruby.rb', line 151 def version_sequence_delta ::LibyearBundler::Calculators::VersionSequenceDelta.calculate( installed_version_sequence_index, self.class.newest_version_sequence_index ) end |