require "sinatra" module Provider class ProviderFactory @@providers = {} def self.providers @@providers.keys end def self.get provider p = @@providers[provider] raise ::Sinatra::NotFound.new("Provider #{provider} not found") if p.nil? p end def self.all @@providers.values end def self.init conf # require providers here to get access to debug properties require 'providers/all' ["ec2", "openstack", "static"].each do |p| begin o = Provider.const_get(p.capitalize).new(conf) if o.configured? @@providers[p] = o puts "Provider '#{p}' has been loaded" end rescue => e puts "Error while loading provider '#{p}': " + e.message next end end end end end