class StackerBee::Client

Constants

DEFAULT_API_PATH

Attributes

api[W]

Public Class Methods

api() click to toggle source
# File lib/stacker_bee/client.rb, line 93
def api
  @api ||= API.new(api_path: api_path)
end
api_path() click to toggle source
# File lib/stacker_bee/client.rb, line 82
def api_path
  @api_path ||= DEFAULT_API_PATH
end
api_path=(new_api_path) click to toggle source
# File lib/stacker_bee/client.rb, line 86
def api_path=(new_api_path)
  return @api_path if @api_path == new_api_path
  @api = nil
  @api_path = new_api_path
end
configuration() click to toggle source
# File lib/stacker_bee/client.rb, line 73
def configuration
  self.configuration = nil unless @configuration
  @configuration
end
configuration=(config_hash = {}) click to toggle source
# File lib/stacker_bee/client.rb, line 78
def configuration=(config_hash = {})
  @configuration = Configuration.new(config_hash)
end
new(config = {}) click to toggle source
# File lib/stacker_bee/client.rb, line 98
def initialize(config = {})
  self.configuration = config
end
reset!() click to toggle source
# File lib/stacker_bee/client.rb, line 69
def reset!
  self.api, self.api_path, self.configuration = nil
end

Public Instance Methods

builder() click to toggle source
# File lib/stacker_bee/client.rb, line 64
def builder
  @builder ||= Builder.new
end
configuration() click to toggle source
# File lib/stacker_bee/client.rb, line 106
def configuration
  self.configuration = {} unless @configuration
  @configuration
end
configuration=(config) click to toggle source
# File lib/stacker_bee/client.rb, line 102
def configuration=(config)
  @configuration = self.class.configuration.merge(config)
end
method_missing(method_name, *args, &block) click to toggle source
Calls superclass method
# File lib/stacker_bee/client.rb, line 138
def method_missing(method_name, *args, &block)
  if respond_to_via_delegation?(method_name)
    request(method_name, *args, &block)
  else
    super
  end
end
middleware_app() click to toggle source
# File lib/stacker_bee/client.rb, line 124
def middleware_app
  @app ||= begin
             middleware_stack = middlewares

             last_middleware = nil
             middleware_stack.reverse.each do |middleware|
               middleware.app = last_middleware
               last_middleware = middleware
             end

             middleware_stack.first
           end
end
middlewares() click to toggle source

rubocop:disable MethodLength

# File lib/stacker_bee/client.rb, line 34
def middlewares
  # request
  builder.use Middleware::ConsoleAccess

  builder.use Middleware::EndpointNormalizer, api: self.class.api
  builder.use Middleware::RemoveEmptyStrings
  builder.use Middleware::CloudStackAPI, api_key: configuration.api_key

  configuration.middlewares.call builder

  builder.use Middleware::DictionaryFlattener
  builder.use Middleware::RemoveNils
  builder.use Middleware::FormatKeys
  builder.use Middleware::FormatValues

  # response
  builder.use Middleware::RaiseOnHTTPError
  builder.use Middleware::ErrorMessage
  builder.use Middleware::LogResponse
  builder.use Middleware::HTTPStatus
  builder.use Middleware::CleanResponse
  builder.use Middleware::RashifyResponse
  builder.use Middleware::DeNamespace
  builder.use Middleware::JSONBody

  builder.use Middleware::Adapter, connection: connection

  builder.build
end
request(endpoint_name, params = {}) click to toggle source
# File lib/stacker_bee/client.rb, line 111
def request(endpoint_name, params = {})
  env = Middleware::Environment.new(
    endpoint_name: endpoint_name,
    api_key:       configuration.api_key,
    params:        params,
    logger:        configuration.logger
  )

  middleware_app.call(env)

  env.response.body
end
respond_to?(method_name, include_private = false) click to toggle source
Calls superclass method
# File lib/stacker_bee/client.rb, line 146
def respond_to?(method_name, include_private = false)
  super || respond_to_via_delegation?(method_name)
end
respond_to_via_delegation?(method_name) click to toggle source
# File lib/stacker_bee/client.rb, line 150
def respond_to_via_delegation?(method_name)
  !!middleware_app.endpoint_name_for(method_name)
end

Protected Instance Methods

connection() click to toggle source
# File lib/stacker_bee/client.rb, line 156
def connection
  @connection ||= Connection.new(configuration)
end