diff options
Diffstat (limited to 'lib/rubygems/version.rb')
-rw-r--r-- | lib/rubygems/version.rb | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/lib/rubygems/version.rb b/lib/rubygems/version.rb index 54da49e8e8..2f6cfae6ed 100644 --- a/lib/rubygems/version.rb +++ b/lib/rubygems/version.rb @@ -219,7 +219,7 @@ class Gem::Version def bump @bump ||= begin - segments = self.segments.dup + segments = self.segments segments.pop while segments.any? { |s| String === s } segments.pop if segments.size > 1 @@ -298,7 +298,7 @@ class Gem::Version def release @release ||= if prerelease? - segments = self.segments.dup + segments = self.segments segments.pop while segments.any? { |s| String === s } self.class.new segments.join('.') else @@ -307,20 +307,14 @@ class Gem::Version end def segments # :nodoc: - - # segments is lazy so it can pick up version values that come from - # old marshaled versions, which don't go through marshal_load. - - @segments ||= @version.scan(/[0-9]+|[a-z]+/i).map do |s| - /^\d+$/ =~ s ? s.to_i : s - end + _segments.dup end ## # A recommended version for use with a ~> Requirement. def approximate_recommendation - segments = self.segments.dup + segments = self.segments segments.pop while segments.any? { |s| String === s } segments.pop while segments.size > 2 @@ -339,8 +333,8 @@ class Gem::Version return unless Gem::Version === other return 0 if @version == other._version - lhsegments = segments - rhsegments = other.segments + lhsegments = _segments + rhsegments = other._segments lhsize = lhsegments.size rhsize = rhsegments.size @@ -367,4 +361,14 @@ class Gem::Version def _version @version end + + def _segments + # segments is lazy so it can pick up version values that come from + # old marshaled versions, which don't go through marshal_load. + # since this version object is cached in @@all, its @segments should be frozen + + @segments ||= @version.scan(/[0-9]+|[a-z]+/i).map do |s| + /^\d+$/ =~ s ? s.to_i : s + end.freeze + end end |