class Fog::Service

Public Class Methods

coerce_options(options) click to toggle source
# File lib/fog/core/service.rb, line 129
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
collection(new_collection) click to toggle source
# File lib/fog/core/service.rb, line 121
def collection(new_collection)
  collections << new_collection
end
collections() click to toggle source
# File lib/fog/core/service.rb, line 125
def collections
  @collections ||= []
end
fetch_credentials(options) click to toggle source
# File lib/fog/core/service.rb, line 72
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
inherited(child) click to toggle source
# File lib/fog/core/service.rb, line 36
      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
mocked_requests() click to toggle source
# File lib/fog/core/service.rb, line 149
def mocked_requests
  @mocked_requests ||= []
end
model(new_model) click to toggle source
# File lib/fog/core/service.rb, line 153
def model(new_model)
  models << new_model
end
model_path(new_path) click to toggle source
# File lib/fog/core/service.rb, line 117
def model_path(new_path)
  @model_path = new_path
end
models() click to toggle source
# File lib/fog/core/service.rb, line 157
def models
  @models ||= []
end
new(options={}) click to toggle source
# File lib/fog/core/service.rb, line 55
def new(options={})
  options = Fog.symbolize_credentials(options)
  options = fetch_credentials(options).merge(options)
  validate_options(options)
  coerce_options(options)
  setup_requirements

  if Fog.mocking?
    service::Mock.send(:include, service::Collections)
    service::Mock.new(options)
  else
    service::Real.send(:include, service::Collections)
    service::Real.send(:include, service::NoLeakInspector)
    service::Real.new(options)
  end
end
recognized() click to toggle source
# File lib/fog/core/service.rb, line 195
def recognized
  @recognized ||= [:connection_options]
end
recognizes(*args) click to toggle source
# File lib/fog/core/service.rb, line 191
def recognizes(*args)
  recognized.concat(args)
end
request(new_request) click to toggle source
# File lib/fog/core/service.rb, line 165
def request(new_request)
  requests << new_request
end
request_path(new_path) click to toggle source
# File lib/fog/core/service.rb, line 161
def request_path(new_path)
  @request_path = new_path
end
requests() click to toggle source
# File lib/fog/core/service.rb, line 169
def requests
  @requests ||= []
end
requirements() click to toggle source
# File lib/fog/core/service.rb, line 187
def requirements
  @requirements ||= []
end
requires(*args) click to toggle source
# File lib/fog/core/service.rb, line 183
def requires(*args)
  requirements.concat(args)
end
secrets(*args) click to toggle source
# File lib/fog/core/service.rb, line 173
def secrets(*args)
  if args.empty?
    @secrets ||= []
  else
    args.inject(secrets) do |secrets, secret|
      secrets << "@#{secret}".to_sym
    end
  end
end
setup_requirements() click to toggle source
# File lib/fog/core/service.rb, line 82
      def setup_requirements
        if superclass.respond_to?(:setup_requirements)
          superclass.setup_requirements
        end

        @required ||= false
        unless @required
          for collection in collections
            require [@model_path, collection].join('/')
            constant = collection.to_s.split('_').map {|characters| characters[0...1].upcase << characters[1..-1]}.join('')
            service::Collections.module_eval "              def #{collection}(attributes = {})
                #{service}::#{constant}.new({:service => self}.merge(attributes))
              end
", __FILE__, __LINE__
          end
          for model in models
            require [@model_path, model].join('/')
          end
          for request in requests
            require [@request_path, request].join('/')
            if service::Mock.method_defined?(request)
              mocked_requests << request
            else
              service::Mock.module_eval "                def #{request}(*args)
                  Fog::Mock.not_implemented
                end
", __FILE__, __LINE__
            end
          end
          @required = true
        end
      end
validate_options(options) click to toggle source
# File lib/fog/core/service.rb, line 199
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?
      raise ArgumentError, "Unrecognized arguments: #{unrecognized.join(', ')}"
    end
  end
end