| 
									
										
										
										
											2015-04-02 20:22:12 -04:00
										 |  |  | require "version" | 
					
						
							| 
									
										
										
										
											2014-03-05 20:12:51 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-02 20:22:12 -04:00
										 |  |  | class PkgVersion | 
					
						
							|  |  |  |   include Comparable | 
					
						
							| 
									
										
										
										
											2014-03-05 20:12:51 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |   RX = /\A(.+?)(?:_(\d+))?\z/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def self.parse(path) | 
					
						
							|  |  |  |     _, version, revision = *path.match(RX) | 
					
						
							| 
									
										
										
										
											2015-04-02 20:22:12 -04:00
										 |  |  |     version = Version.new(version) | 
					
						
							|  |  |  |     new(version, revision.to_i) | 
					
						
							| 
									
										
										
										
											2014-03-05 20:12:51 -06:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def initialize(version, revision) | 
					
						
							| 
									
										
										
										
											2015-04-02 20:22:12 -04:00
										 |  |  |     @version = version | 
					
						
							|  |  |  |     @revision = version.head? ? 0 : revision | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2014-03-05 20:12:51 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-02 20:22:12 -04:00
										 |  |  |   def head? | 
					
						
							|  |  |  |     version.head? | 
					
						
							| 
									
										
										
										
											2014-03-05 20:12:51 -06:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def to_s | 
					
						
							|  |  |  |     if revision > 0
 | 
					
						
							|  |  |  |       "#{version}_#{revision}" | 
					
						
							|  |  |  |     else | 
					
						
							| 
									
										
										
										
											2015-04-02 20:22:12 -04:00
										 |  |  |       version.to_s | 
					
						
							| 
									
										
										
										
											2014-03-05 20:12:51 -06:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  |   alias_method :to_str, :to_s | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def <=>(other) | 
					
						
							| 
									
										
										
										
											2015-04-02 20:22:12 -04:00
										 |  |  |     return unless PkgVersion === other | 
					
						
							|  |  |  |     (version <=> other.version).nonzero? || revision <=> other.revision | 
					
						
							| 
									
										
										
										
											2014-03-05 20:12:51 -06:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2015-04-02 20:22:12 -04:00
										 |  |  |   alias_method :eql?, :== | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def hash | 
					
						
							|  |  |  |     version.hash ^ revision.hash | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   protected | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   attr_reader :version, :revision | 
					
						
							| 
									
										
										
										
											2014-03-05 20:12:51 -06:00
										 |  |  | end |