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