module Fog::ServicesMixin
Constants
- E_SERVICE_PROVIDER_CONSTANT
- E_SERVICE_PROVIDER_PATH
Public Instance Methods
[](provider)
click to toggle source
# File lib/fog/core/services_mixin.rb, line 16 def [](provider) new(:provider => provider) end
new(attributes)
click to toggle source
# File lib/fog/core/services_mixin.rb, line 20 def new(attributes) attributes = attributes.dup # Prevent delete from having side effects provider = attributes.delete(:provider).to_s.downcase.to_sym provider_alias = check_provider_alias(provider) provider_name = Fog.providers[provider_alias] raise ArgumentError, "#{provider_alias} is not a recognized provider" unless providers.include?(provider) || providers.include?(provider_alias) require_service_provider_library(service_name.downcase, provider_alias) spc = service_provider_constant(service_name, provider_name) spc.new(attributes) rescue LoadError, NameError => e # Only rescue errors in finding the libraries, allow connection errors through to the caller Fog::Logger.warning("Error while loading provider #{provider_alias}: #{e.message}") Fog::Logger.debug("backtrace: #{e.backtrace.join("\n")}") raise Fog::Service::NotFound, "#{provider_alias} has no #{service_name.downcase} service" end
providers()
click to toggle source
# File lib/fog/core/services_mixin.rb, line 37 def providers Fog.services[service_name.downcase.to_sym] || [] end
Private Instance Methods
check_provider_alias(provider)
click to toggle source
# File lib/fog/core/services_mixin.rb, line 75 def check_provider_alias(provider) case provider when :baremetalcloud Fog::Logger.deprecation(':baremetalcloud is deprecated. Use :bare_metal_cloud instead!') :bare_metal_cloud when :gogrid Fog::Logger.deprecation(':gogrid is deprecated. Use :go_grid instead!') :go_grid when :internetarchive Fog::Logger.deprecation(':internetarchive is deprecated. Use :internet_archive instead!') :internet_archive when :new_servers Fog::Logger.deprecation(':new_servers is deprecated. Use :bare_metal_cloud instead!') :bare_metal_cloud when :stormondemand Fog::Logger.deprecation(':stormondemand is deprecated. Use :storm_on_demand instead!') :storm_on_demand when :vclouddirector Fog::Logger.deprecation(':vclouddirector is deprecated. Use :vcloud_director instead!') :vcloud_director else provider end end
const_get_args(*args)
click to toggle source
# File lib/fog/core/services_mixin.rb, line 67 def const_get_args(*args) args + [false] end
require_service_provider_library(service, provider)
click to toggle source
This method should be removed once all providers are extracted. Bundler will correctly require all dependencies automatically and thus fog-core wont need to know any specifics providers. Each provider will have to load its dependencies.
# File lib/fog/core/services_mixin.rb, line 47 def require_service_provider_library(service, provider) require "fog/#{provider}/#{service}" rescue LoadError # Try to require the service provider in an alternate location Fog::Logger.deprecation("Unable to require fog/#{provider}/#{service}") Fog::Logger.deprecation( format(E_SERVICE_PROVIDER_PATH, service: service, provider: provider) ) require "fog/#{service}/#{provider}" end
service_name()
click to toggle source
# File lib/fog/core/services_mixin.rb, line 71 def service_name name.split("Fog::").last end
service_provider_constant(service_name, provider_name)
click to toggle source
# File lib/fog/core/services_mixin.rb, line 57 def service_provider_constant(service_name, provider_name) Fog.const_get(provider_name).const_get(*const_get_args(service_name)) rescue NameError # Try to find the constant from in an alternate location Fog::Logger.deprecation("Unable to load Fog::#{provider_name}::#{service_name}") Fog::Logger.deprecation( format(E_SERVICE_PROVIDER_CONSTANT, service: service_name, provider: provider_name) ) Fog.const_get(service_name).const_get(*const_get_args(provider_name)) end