Sha256: 27eeb5deace4b5e8033fe8f5f1eb8b77063ce4a71df04332b2de66472cbc5af0

Contents?: true

Size: 1.67 KB

Versions: 3

Compression:

Stored size: 1.67 KB

Contents

class KuberKit::Core::ServiceStore
  NotFoundError = Class.new(KuberKit::Error)
  AlreadyAddedError = Class.new(KuberKit::Error)

  include KuberKit::Import[
    "core.service_factory",
    "core.service_definition_factory",
    "shell.local_shell",
    "tools.logger"
  ]

  def define(service_name)
    definition = service_definition_factory.create(service_name)
    add_definition(definition)
    definition
  end

  def add_definition(service_definition)
    @@service_definitions ||= {}

    unless @@service_definitions[service_definition.service_name].nil?
      raise AlreadyAddedError, "service #{service_definition.service_name} was already added"
    end

    @@service_definitions[service_definition.service_name] = service_definition
  end

  def get_definition(service_name)
    @@service_definitions ||= {}

    if @@service_definitions[service_name].nil?
      raise NotFoundError, "service '#{service_name}' not found"
    end

    @@service_definitions[service_name]
  end

  def get_service(service_name)
    definition = get_definition(service_name)

    service_factory.create(definition)
  end

  def load_definitions(dir_path)
    files = local_shell.recursive_list_files(dir_path, name: "*.rb").each do |path|
      load_definition(path)
    end
  rescue KuberKit::Shell::AbstractShell::DirNotFoundError
    logger.warn("Directory with services not found: #{dir_path}")
    []
  end

  def load_definition(file_path)
    require(file_path)
  end

  def reset!
    @@service_definitions = {}
  end

  def all_definitions
    @@service_definitions ||= {}
  end

  def count
    all_definitions.count
  end

  def exists?(service_name)
    !all_definitions[service_name].nil?
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
kuber_kit-0.1.3 lib/kuber_kit/core/service_store.rb
kuber_kit-0.1.2 lib/kuber_kit/core/service_store.rb
kuber_kit-0.1.1 lib/kuber_kit/core/service_store.rb