# File lib/fog/core/service.rb, line 157 def coerce_options(options) options.each do |key, value| value_string = value.to_s.downcase if value.nil? options.delete(key) elsif value == value_string.to_i.to_s options[key] = value.to_i else options[key] = case value_string when 'false' false when 'true' true else value end end end end
# File lib/fog/core/service.rb, line 149 def collection(new_collection) collections << new_collection end
# File lib/fog/core/service.rb, line 153 def collections @collections ||= [] end
@deprecated
# File lib/fog/core/service.rb, line 120 def fetch_credentials(options) # attempt to load credentials from config file begin Fog.credentials.reject { |key, value| !(recognized | requirements).include?(key) } rescue LoadError # if there are no configured credentials, do nothing {} end end
# File lib/fog/core/service.rb, line 33 def inherited(child) child.class_eval class Error < Fog::Service::Error; end class NotFound < Fog::Service::NotFound; end module Collections include Fog::Service::Collections def service #{child} end end def self.service #{child} end, __FILE__, __LINE__ end
# File lib/fog/core/service.rb, line 177 def mocked_requests @mocked_requests ||= [] end
# File lib/fog/core/service.rb, line 181 def model(new_model) models << new_model end
@note This path is used to require model and collection files
# File lib/fog/core/service.rb, line 145 def model_path(new_path) @model_path = new_path end
# File lib/fog/core/service.rb, line 185 def models @models ||= [] end
{Fog::Service} is (unfortunately) both a builder class and the subclass for any fog service.
Creating a {new} instance using the builder will return either an instance of +Fog::<Service>::<Provider>::Real+ or +Fog::<Service>::<Provider>::Mock+ based on the value of {Fog.mock?} when the builder is used.
Each provider can require or recognize different settings (often prefixed with the providers name). These settings map to keys in the +~/.fog+ file.
Settings can be passed as either a Hash or an object that responds to config_service? with true. This object will be passed through unchanged to the Real or Mock service that is created. It is up to providers to adapt services to use these config objects.
@abstract Subclass and implement real or mock code
@param [Hash,config_service?] config
Settings or an object used to build a service instance
@option config [Hash] :headers
Passed to the underlying {Fog::Core::Connection} unchanged
@return [Fog::Service::Provider::Real] if created while mocking is disabled @return [Fog::Service::Provider::Mock] if created while mocking is enabled @raise [ArgumentError] if a setting required by the provider was not passed in
@example Minimal options (dependent on ~/.fog)
@service = Fog::Compute::Example.new # => <#Fog::Compute::Example::Real>
@example Mocked service
Fog.mock! @service = Fog::Compute::Example.new # => <#Fog::Compute::Example::Mock>
@example Configured using many options (options merged into ~/.fog)
@options = { :example_username => "fog", :example_password => "fog" } @service = Fog::Compute::Example.new(@options)
@example Configured using external config object (~/.fog ignored completely)
@config = Fog::Example::Config.new(...) @service = Fog::Compute::Example.new(@config)
# File lib/fog/core/service.rb, line 94 def new(config = {}) if config.respond_to?(:config_service?) && config.config_service? cleaned_settings = config else cleaned_settings = handle_settings(config) end setup_requirements svc = service if Fog.mocking? while svc != Fog::Service service::Mock.send(:include, svc::Collections) svc = svc.superclass end service::Mock.new(cleaned_settings) else while svc != Fog::Service service::Real.send(:include, svc::Collections) svc = svc.superclass end service::Real.send(:include, service::NoLeakInspector) service::Real.new(cleaned_settings) end end
# File lib/fog/core/service.rb, line 223 def recognized @recognized ||= [:connection_options] end
# File lib/fog/core/service.rb, line 219 def recognizes(*args) recognized.concat(args) end
# File lib/fog/core/service.rb, line 193 def request(new_request) requests << new_request end
# File lib/fog/core/service.rb, line 189 def request_path(new_path) @request_path = new_path end
# File lib/fog/core/service.rb, line 197 def requests @requests ||= [] end
# File lib/fog/core/service.rb, line 215 def requirements @requirements ||= [] end
# File lib/fog/core/service.rb, line 211 def requires(*args) requirements.concat(args) end
# File lib/fog/core/service.rb, line 201 def secrets(*args) if args.empty? @secrets ||= [] else args.inject(secrets) do |secrets, secret| secrets << "@#{secret}".to_sym end end end
# File lib/fog/core/service.rb, line 130 def setup_requirements if superclass.respond_to?(:setup_requirements) superclass.setup_requirements end @required ||= false unless @required require_models require_collections_and_define require_requests_and_mock @required = true end end
# File lib/fog/core/service.rb, line 227 def validate_options(options) keys = [] for key, value in options unless value.nil? keys << key end end missing = requirements - keys unless missing.empty? raise ArgumentError, "Missing required arguments: #{missing.join(', ')}" end unless recognizes.empty? unrecognized = options.keys - requirements - recognized unless unrecognized.empty? Fog::Logger.warning("Unrecognized arguments: #{unrecognized.join(', ')}") end end end
Generated with the Darkfish Rdoc Generator 2.