lib/boxgrinder-build/helpers/plugin-helper.rb in boxgrinder-build-0.4.1 vs lib/boxgrinder-build/helpers/plugin-helper.rb in boxgrinder-build-0.5.0

- old
+ new

@@ -16,71 +16,71 @@ # You should have received a copy of the GNU Lesser General Public # License along with this software; if not, write to the Free # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA, or see the FSF site: http://www.fsf.org. -require 'boxgrinder-build/managers/operating-system-plugin-manager' -require 'boxgrinder-build/managers/platform-plugin-manager' -require 'boxgrinder-build/managers/delivery-plugin-manager' +require 'boxgrinder-build/managers/plugin-manager' +require 'rubygems' module BoxGrinder class PluginHelper def initialize( options = {} ) - @log = options[:log] || Logger.new(STDOUT) + @log = options[:log] || Logger.new(STDOUT) + @options = options[:options] end def load_plugins - Dir["#{File.dirname( __FILE__ )}/../plugins/**/*-plugin.rb"].each { |file| require "boxgrinder-build/plugins/#{file.scan(/\/plugins\/(.*)\.rb$/).to_s}" } + read_and_require - @os_plugins = OperatingSystemPluginManager.instance.initialize_plugins( :log => @log ).plugins - @platform_plugins = PlatformPluginManager.instance.initialize_plugins( :log => @log ).plugins - @delivery_plugins = DeliveryPluginManager.instance.initialize_plugins( :log => @log ).plugins + @os_plugins = PluginManager.instance.plugins[:os] + @platform_plugins = PluginManager.instance.plugins[:platform] + @delivery_plugins = PluginManager.instance.plugins[:delivery] print_plugins( 'os' ) { @os_plugins } print_plugins( 'platform' ) { @platform_plugins } print_plugins( 'delivery' ) { @delivery_plugins } self end - def print_plugins( type ) - @log.debug "Loading #{type} plugins..." + def parse_plugin_list + plugins = [] - plugins = yield - - @log.debug "We have #{plugins.size} #{type} plugin(s) registered" - - plugins.each_value do |plugin| - @log.debug "- plugin for #{plugin.info[:full_name]}." + unless @options.plugins.nil? + plugins = @options.plugins.gsub('\'', '').gsub('"', '').split(',') + plugins.each { |plugin| plugin.chomp!; plugin.strip! } end - @log.debug "Plugins loaded." + plugins end - def deliverables_exists?( deliverables ) - return false unless File.exists?(deliverables[:disk]) + def read_and_require + plugins = %w(boxgrinder-build-fedora-os-plugin boxgrinder-build-rhel-os-plugin boxgrinder-build-centos-os-plugin boxgrinder-build-ec2-platform-plugin boxgrinder-build-vmware-platform-plugin boxgrinder-build-s3-delivery-plugin boxgrinder-build-sftp-delivery-plugin boxgrinder-build-local-delivery-plugin) + parse_plugin_list - [:metadata, :other].each do |deliverable_type| - deliverables[deliverable_type].each_value do |file| - return false unless File.exists?(file) + plugins.flatten.each do |plugin| + @log.trace "Requiring plugin '#{plugin}'..." + + begin + gem plugin + require plugin + rescue Gem::LoadError + @log.warn "Specified gem: '#{plugin}' wasn't found. Make sure its name is correct, skipping..." unless plugin.match(/^boxgrinder-build-(.*)-plugin/) end end - - true end - def deliverables_array( deliverables ) - files = [] + def print_plugins( type ) + @log.debug "Loading #{type} plugins..." - files << deliverables[:disk] + plugins = yield - [:metadata, :other].each do |deliverable_type| - deliverables[deliverable_type].each_value do |file| - file << file - end + @log.debug "We have #{plugins.size} #{type} plugin(s) registered" + + plugins.each do |plugin_name_or_type, plugin_info| + @log.debug "- #{plugin_name_or_type} plugin for #{plugin_info[:full_name]}." end - files + @log.debug "Plugins loaded." end attr_reader :os_plugins attr_reader :platform_plugins attr_reader :delivery_plugins \ No newline at end of file