class Eco::API::Session::Config::Api

Public Class Methods

api_class(version = :v0) click to toggle source
# File lib/eco/api/session/config/api.rb, line 20
def api_class(version = :v0)
  case to_version(version)
  when :v0
    Ecoportal::API::Internal
  when :v1
    Ecoportal::API::V1
  when :v2
    Ecoportal::API::V2
  else
  end
end
new(name, key:, host:, version:, mode: :local, root:, user_key: nil, external_key: nil) click to toggle source
Calls superclass method
# File lib/eco/api/session/config/api.rb, line 34
def initialize(name, key:, host:, version:, mode: :local, root:, user_key: nil, external_key: nil)
  super(nil)
  @root = root
  @apis = {}
  self["name"]         = name
  self["key"]          = key
  self["host"]         = host
  self["version"]      = version
  self["mode"]         = mode
  self["user_key"]     = user_key
  self["external_key"] = external_key
end
to_version(str) click to toggle source
# File lib/eco/api/session/config/api.rb, line 9
def to_version(str)
  case str.to_sym
  when :external, :v1
    :v1
  when :v2, :oozes
    :v2
  else # :internal, :v0
    :v0
  end
end

Public Instance Methods

api(version: nil, logger: nil) click to toggle source

Obtain an `API` object of a specific `version`. @param version [Symbol] any of the available `API` versions [`:v0`, `:v1`, `:v2`]. @param logger [Logger] the logger that will be used with this api instance. @return [Ecoportal::API::Internal, Ecoportal::API::V2, Ecoportal::API::V1]

# File lib/eco/api/session/config/api.rb, line 56
def api(version: nil, logger: nil)
  version       = version ? version : self.version
  switch_logger = (logger != @logger)
  @logger       = logger if logger

  if (current = get(version)) && !switch_logger
    return current
  end

  unless api_params?(version)
    raise "The api configuration for '#{name}' is missing data for the api version '#{self.version(version)}'"
  end

  new_api(version).tap do |pi|
    set(version, pi)
  end
end
config() click to toggle source

@return [Eco::API::Session::Config] the `root` config

# File lib/eco/api/session/config/api.rb, line 48
def config
  @root.config
end
external_key() click to toggle source
# File lib/eco/api/session/config/api.rb, line 98
def external_key
  self["external_key"] || ([:v1, :v2].include?(version) && key)
end
get(version) click to toggle source
# File lib/eco/api/session/config/api.rb, line 78
def get(version)
  @apis[self.version(version)]
end
host() click to toggle source
# File lib/eco/api/session/config/api.rb, line 106
def host
  self["host"]
end
internal_key() click to toggle source
# File lib/eco/api/session/config/api.rb, line 102
def internal_key
  (version == :v0) && self["key"]
end
key() click to toggle source
# File lib/eco/api/session/config/api.rb, line 90
def key
  self["key"]
end
local?() click to toggle source
# File lib/eco/api/session/config/api.rb, line 120
def local?
  mode == :local
end
logger() click to toggle source

if no low level connection messages: use `IO::NULL`

# File lib/eco/api/session/config/api.rb, line 133
def logger
  @logger ||= ::Logger.new(IO::NULL)
  log_connection? ? @logger : ::Logger.new(IO::NULL)
end
mode() click to toggle source

@return [Symbol] if running on `:remote` or `:local`

# File lib/eco/api/session/config/api.rb, line 116
def mode
  self["mode"]
end
mode=(mode) click to toggle source

@param mode [Symbol] to define if running on `:remote` or `:local`

# File lib/eco/api/session/config/api.rb, line 111
def mode=(mode)
  self["mode"] = (mode == :remote)? :remote : :local
end
name() click to toggle source
# File lib/eco/api/session/config/api.rb, line 82
def name
  self["name"]
end
one_off?() click to toggle source
# File lib/eco/api/session/config/api.rb, line 86
def one_off?
  name.is_a?(Symbol)
end
remote?() click to toggle source
# File lib/eco/api/session/config/api.rb, line 124
def remote?
  !local?
end
set(version, api) click to toggle source
# File lib/eco/api/session/config/api.rb, line 74
def set(version, api)
  @apis[self.version(version)] = api
end
user_key() click to toggle source
# File lib/eco/api/session/config/api.rb, line 94
def user_key
  self["user_key"] || @root.default_user_key
end
version(value = nil) click to toggle source
# File lib/eco/api/session/config/api.rb, line 128
def version(value = nil)
  self.class.to_version(value || self["version"])
end

Private Instance Methods

api_params?(version) click to toggle source

Checks if the necessary parameters for a specific `API` version are available.

# File lib/eco/api/session/config/api.rb, line 159
def api_params?(version)
  case self.class.to_version(version)
  when :v0
    internal_key && host
  when :v1
    external_key && host
  when :v2
    external_key && user_key
  end
end
log_connection?() click to toggle source
# File lib/eco/api/session/config/api.rb, line 170
def log_connection?
  config.logger.log_connection?
end
new_api(version) click to toggle source

Generates a new `API` object of version `version`.

# File lib/eco/api/session/config/api.rb, line 141
def new_api(version)
  klass = self.class.api_class(version)
  case self.version(version)
  when :v0
    klass.new(internal_key, host: host, logger: logger)
  when :v1
    klass.new(external_key, host: host, logger: logger)
  when :v2
    klass.new(user_key: user_key, org_key: external_key, host: host, logger: logger)
  end.tap do |api|
    unless !api || log_connection?
      @logger.info("Created api#{self.version(version)} connection on '#{name}' enviro, pointing to '#{host}' in '#{mode}' mode")
      api.logger.level = ::Logger::UNKNOWN
    end
  end
end