125 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			125 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
|   | require 'constants' | ||
|  | 
 | ||
|  | class ConfiguratorPlugins | ||
|  | 
 | ||
|  |   constructor :stream_wrapper, :file_wrapper, :system_wrapper | ||
|  |   attr_reader :rake_plugins, :script_plugins | ||
|  | 
 | ||
|  |   def setup | ||
|  |     @rake_plugins   = [] | ||
|  |     @script_plugins = [] | ||
|  |   end | ||
|  | 
 | ||
|  |    | ||
|  |   def add_load_paths(config) | ||
|  |     plugin_paths = {} | ||
|  |      | ||
|  |     config[:plugins][:load_paths].each do |root| | ||
|  |       @system_wrapper.add_load_path( root ) if ( not @file_wrapper.directory_listing( File.join( root, '*.rb' ) ).empty? ) | ||
|  |      | ||
|  |       config[:plugins][:enabled].each do |plugin| | ||
|  |         path = File.join(root, plugin, "lib") | ||
|  |         old_path = File.join( root, plugin ) | ||
|  | 
 | ||
|  |         if ( not @file_wrapper.directory_listing( File.join( path, '*.rb' ) ).empty? ) | ||
|  |           plugin_paths[(plugin + '_path').to_sym] = path | ||
|  |           @system_wrapper.add_load_path( path ) | ||
|  |         elsif ( not @file_wrapper.directory_listing( File.join( old_path, '*.rb' ) ).empty? ) | ||
|  |           plugin_paths[(plugin + '_path').to_sym] = old_path | ||
|  |           @system_wrapper.add_load_path( old_path ) | ||
|  |         end | ||
|  |       end | ||
|  |     end | ||
|  |      | ||
|  |     return plugin_paths | ||
|  |   end | ||
|  |    | ||
|  |    | ||
|  |   # gather up and return .rake filepaths that exist on-disk | ||
|  |   def find_rake_plugins(config) | ||
|  |     plugins_with_path = [] | ||
|  |      | ||
|  |     config[:plugins][:load_paths].each do |root| | ||
|  |       config[:plugins][:enabled].each do |plugin| | ||
|  |         rake_plugin_path = File.join(root, plugin, "#{plugin}.rake") | ||
|  |         if (@file_wrapper.exist?(rake_plugin_path)) | ||
|  |           plugins_with_path << rake_plugin_path | ||
|  |           @rake_plugins << plugin | ||
|  |         end | ||
|  |       end | ||
|  |     end | ||
|  |      | ||
|  |     return plugins_with_path | ||
|  |   end | ||
|  | 
 | ||
|  | 
 | ||
|  |   # gather up and return just names of .rb classes that exist on-disk | ||
|  |   def find_script_plugins(config) | ||
|  |     config[:plugins][:load_paths].each do |root| | ||
|  |       config[:plugins][:enabled].each do |plugin| | ||
|  |         script_plugin_path = File.join(root, plugin, "lib", "#{plugin}.rb") | ||
|  | 
 | ||
|  |         # Add the old path here to support legacy style. Eventaully remove. | ||
|  |         old_script_plugin_path = File.join(root, plugin, "#{plugin}.rb") | ||
|  | 
 | ||
|  |         if @file_wrapper.exist?(script_plugin_path) or @file_wrapper.exist?(old_script_plugin_path) | ||
|  |           @script_plugins << plugin  | ||
|  |         end | ||
|  | 
 | ||
|  |         # Print depreciation warning. | ||
|  |         if @file_wrapper.exist?(old_script_plugin_path) | ||
|  |           $stderr.puts "WARNING: Depreciated plugin style used in #{plugin}. Use new directory structure!" | ||
|  |         end | ||
|  |       end | ||
|  |     end | ||
|  |      | ||
|  |     return @script_plugins  | ||
|  |   end | ||
|  |    | ||
|  |    | ||
|  |   # gather up and return configuration .yml filepaths that exist on-disk | ||
|  |   def find_config_plugins(config) | ||
|  |     plugins_with_path = [] | ||
|  |      | ||
|  |     config[:plugins][:load_paths].each do |root| | ||
|  |       config[:plugins][:enabled].each do |plugin| | ||
|  |         config_plugin_path = File.join(root, plugin, "config", "#{plugin}.yml") | ||
|  | 
 | ||
|  |         # Add the old path here to support legacy style. Eventaully remove. | ||
|  |         old_config_plugin_path = File.join(root, plugin, "#{plugin}.yml") | ||
|  | 
 | ||
|  |         if @file_wrapper.exist?(config_plugin_path) | ||
|  |           plugins_with_path << config_plugin_path | ||
|  |         elsif @file_wrapper.exist?(old_config_plugin_path) | ||
|  |           # there's a warning printed for this in find_script_plugins | ||
|  |           plugins_with_path << old_config_plugin_path | ||
|  |         end | ||
|  |       end | ||
|  |     end | ||
|  |      | ||
|  |     return plugins_with_path     | ||
|  |   end | ||
|  | 
 | ||
|  |    | ||
|  |   # gather up and return default .yml filepaths that exist on-disk | ||
|  |   def find_plugin_defaults(config) | ||
|  |     defaults_with_path = [] | ||
|  |      | ||
|  |     config[:plugins][:load_paths].each do |root| | ||
|  |       config[:plugins][:enabled].each do |plugin| | ||
|  |         default_path = File.join(root, plugin, 'config', 'defaults.yml') | ||
|  |         old_default_path = File.join(root, plugin, 'defaults.yml') | ||
|  | 
 | ||
|  |         if @file_wrapper.exist?(default_path) | ||
|  |           defaults_with_path << default_path | ||
|  |         elsif @file_wrapper.exist?(old_default_path) | ||
|  |           defaults_with_path << old_default_path | ||
|  |         end | ||
|  |       end | ||
|  |     end | ||
|  | 
 | ||
|  |     return defaults_with_path     | ||
|  |   end | ||
|  |    | ||
|  | end |