| Class | Version |
| In: |
lib/version.rb
|
| Parent: | Object |
| Copyright: | Copyright (c) 2004 Nicolas Despres. All rights reserved. |
| Author: | Nicolas Despres <polrop@lrde.epita.fr>. |
| License: | Gnu General Public License. |
| Revision: | $Id: /w/fey/ruby_ex/trunk/core_ex/lib/version.rb 22439 2006-03-11T15:45:50.050946Z pouillar $ |
| category | [RW] | |
| major | [RW] | |
| minor | [RW] | |
| name | [RW] | |
| release_name | [RW] | |
| tag | [RW] |
protected :major=, :minor=, :tag=,
:category=, :name=, :release_name=
# File lib/version.rb, line 15 def initialize ( major, minor, tag=nil, tag_offset=nil, category=nil, name=nil, release_name=nil ) @major = major @minor = minor @tag = Tag[tag || :off, tag_offset || 0] if @tag.offset.zero? case @tag.name when :p then raise ArgumentError, 'The patch level tag (p) needs an offset' when :r then raise ArgumentError, 'The revision tag (r) needs an offset' end elsif @tag.name == :off raise ArgumentError, 'The official release tag (off) cannot have an offset' end @category = category || '' @name = name || '' @release_name = release_name || '' end
# File lib/version.rb, line 33 def self.parse ( str ) re_cat_name = /([\w-]+\/)?([\w-]+)/ re_tag = /_(r|alpha|beta|pre|rc|off|p)(\d*)/ unless str =~ /^(#{re_cat_name}-)?([\d.]+)(#{re_tag})?(#.*)?$/ raise ArgumentError, "Cannot parse your version: #{str}" end category, name, head, _, tag, offset, release_name = Regexp.last_match[2..8] parts = head.split('.').map { |x| x.to_i } raise ArgumentError, "Too many parts: #{head}" if parts.size > 2 major, minor = parts # Remove now useless chars (/, #) category[-1] = '' if category release_name[0] = '' if release_name tag = (tag.nil?)? :off : tag.to_sym new(major || 0, minor || 0, tag, offset.to_i, category || '', name || '', release_name || '') end
# File lib/version.rb, line 57 def <=>(other) category_cmp = @category <=> other.category return category_cmp unless category_cmp.zero? name_cmp = @name <=> other.name return name_cmp unless name_cmp.zero? major_cmp = @major <=> other.major return major_cmp unless major_cmp.zero? minor_cmp = @minor <=> other.minor return minor_cmp unless minor_cmp.zero? @tag <=> other.tag end
# File lib/version.rb, line 85 def category_and_name (@name.empty?)? '' : ((@category.empty?)? "#@name-" : "#@category/#@name-") end
# File lib/version.rb, line 129 def major_release release do |r| r.major += 1 r.minor = 0 r.tag = Tag[:alpha, 0] end end
# File lib/version.rb, line 137 def minor_release release do |r| r.minor += 1 r.tag = Tag[:alpha, 0] end end
# File lib/version.rb, line 115 def pretty_version more = '' more << " #@release_name" unless @release_name.empty? "#{@tag.pretty_string}: #{major_minor}#{more}" end
# File lib/version.rb, line 202 def release ( &block ) x = dup x.instance_eval { block[self] } x end
# File lib/version.rb, line 95 def short_string s = '' s << @name << '-' unless @name.empty? s << major_minor << tag_string end
# File lib/version.rb, line 159 def tag_release ( tag ) return incr_tag_release if @tag.name == tag dest = new_tag_release tag off = new_tag_release :off if self < dest and dest <= off dest elsif off <= self and self < dest dest elsif self < off and off < dest raise ArgumentError, "You need to be at least on an official release (not #{self}) to go on #{dest}" elsif dest < self raise ArgumentError, "You cannot downgrade (#{self} to #{dest})" else raise ArgumentError, "Unhandled case: self=#{self}, dest=#{dest}, off=#{off}" end end
# File lib/version.rb, line 81 def tag_string (official?)? '' : "_#{@tag.name}#{(@tag.offset.zero?)? '' : @tag.offset}" end
# File lib/version.rb, line 125 def to_positive_integers [@major, @minor, @tag.rank + 5, @tag.offset] end
# File lib/version.rb, line 89 def to_s s = category_and_name + major_minor + tag_string s << '#' << @release_name unless @release_name.empty? s end