| 
									
										
										
										
											2013-01-07 14:06:34 -06:00
										 |  |  | class Dependencies | 
					
						
							|  |  |  |   include Enumerable | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-21 16:09:41 -06:00
										 |  |  |   def initialize | 
					
						
							|  |  |  |     @deps = [] | 
					
						
							| 
									
										
										
										
											2013-01-07 14:06:34 -06:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def each(*args, &block) | 
					
						
							|  |  |  |     @deps.each(*args, &block) | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2012-02-28 19:56:29 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-24 18:17:43 -05:00
										 |  |  |   def <<(o) | 
					
						
							| 
									
										
										
										
											2014-11-21 16:08:37 -06:00
										 |  |  |     @deps << o | 
					
						
							| 
									
										
										
										
											2013-01-07 14:06:34 -06:00
										 |  |  |     self | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def empty? | 
					
						
							|  |  |  |     @deps.empty? | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def *(arg) | 
					
						
							|  |  |  |     @deps * arg | 
					
						
							| 
									
										
										
										
											2012-10-24 18:17:43 -05:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2013-01-07 18:16:11 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-23 18:13:48 +02:00
										 |  |  |   alias to_ary to_a | 
					
						
							| 
									
										
										
										
											2013-05-10 23:45:06 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |   def optional | 
					
						
							|  |  |  |     select(&:optional?) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def recommended | 
					
						
							|  |  |  |     select(&:recommended?) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def build | 
					
						
							|  |  |  |     select(&:build?) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def required | 
					
						
							|  |  |  |     select(&:required?) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def default | 
					
						
							|  |  |  |     build + required + recommended | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2014-02-13 16:31:12 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |   attr_reader :deps | 
					
						
							|  |  |  |   protected :deps | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def ==(other) | 
					
						
							|  |  |  |     deps == other.deps | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2016-09-23 18:13:48 +02:00
										 |  |  |   alias eql? == | 
					
						
							| 
									
										
										
										
											2014-11-20 22:29:23 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |   def inspect | 
					
						
							|  |  |  |     "#<#{self.class.name}: #{to_a.inspect}>" | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2012-10-24 18:17:43 -05:00
										 |  |  | end | 
					
						
							| 
									
										
										
										
											2014-07-03 14:50:57 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | class Requirements | 
					
						
							|  |  |  |   include Enumerable | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-21 16:09:41 -06:00
										 |  |  |   def initialize | 
					
						
							|  |  |  |     @reqs = Set.new | 
					
						
							| 
									
										
										
										
											2014-07-03 14:50:57 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def each(*args, &block) | 
					
						
							|  |  |  |     @reqs.each(*args, &block) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def <<(other) | 
					
						
							| 
									
										
										
										
											2016-09-20 22:03:08 +02:00
										 |  |  |     if other.is_a?(Comparable) | 
					
						
							| 
									
										
										
										
											2014-07-03 14:50:57 -05:00
										 |  |  |       @reqs.grep(other.class) do |req| | 
					
						
							|  |  |  |         return self if req > other | 
					
						
							|  |  |  |         @reqs.delete(req) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     @reqs << other | 
					
						
							|  |  |  |     self | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-23 18:13:48 +02:00
										 |  |  |   alias to_ary to_a | 
					
						
							| 
									
										
										
										
											2014-07-03 14:50:57 -05:00
										 |  |  | end |