39 lines
		
	
	
		
			988 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			988 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| module TargetLoader
 | |
|   class NoTargets    < Exception; end
 | |
|   class NoDirectory  < Exception; end
 | |
|   class NoDefault    < Exception; end
 | |
|   class NoSuchTarget < Exception; end
 | |
| 
 | |
|   class RequestReload < Exception; end
 | |
| 
 | |
|   def self.inspect(config, target_name=nil)
 | |
|     unless config[:targets]
 | |
|       raise NoTargets
 | |
|     end
 | |
| 
 | |
|     targets = config[:targets]
 | |
|     unless targets[:targets_directory]
 | |
|       raise NoDirectory("No targets directory specified.")
 | |
|     end
 | |
|     unless targets[:default_target]
 | |
|       raise NoDefault("No default target specified.")
 | |
|     end
 | |
| 
 | |
|     target_path = lambda {|name| File.join(targets[:targets_directory], name + ".yml")}
 | |
| 
 | |
|     target = if target_name
 | |
|                target_path.call(target_name)
 | |
|              else
 | |
|                target_path.call(targets[:default_target])
 | |
|              end
 | |
| 
 | |
|     unless File.exists? target
 | |
|       raise NoSuchTarget.new("No such target: #{target}")
 | |
|     end
 | |
| 
 | |
|     ENV['CEEDLING_MAIN_PROJECT_FILE'] = target
 | |
| 
 | |
|     raise RequestReload
 | |
|   end
 | |
| end
 | 
