class JamesBond::MissionBuild::Config

Attributes

docker_config[RW]
raw_hash[RW]
yaml_path[RW]

Public Class Methods

new(yaml_path:) click to toggle source
# File lib/james_bond/mission_build/config.rb, line 12
def initialize(yaml_path:)
  @yaml_path = yaml_path
  extract_config_from_yaml(@yaml_path)

  validate_config
  @docker_config = @raw_hash["build"]["docker"]
end

Private Instance Methods

extract_config_from_yaml(yaml_path) click to toggle source
# File lib/james_bond/mission_build/config.rb, line 22
def extract_config_from_yaml(yaml_path)
  raise(self.class::InvalidFileError, yaml_path) if !file_exists?(yaml_path)
  @raw_hash = YAML.load(File.read(yaml_path)).freeze
end
file_exists?(path) click to toggle source
# File lib/james_bond/mission_build/config.rb, line 27
def file_exists?(path)
  File.file?(path)
end
validate_config() click to toggle source
# File lib/james_bond/mission_build/config.rb, line 31
def validate_config
  build_config = (@raw_hash || {})["build"]
  raise(self.class::NoConfigAvailableError,
        { file_path: yaml_path, config_path: "build" }) if !build_config

  docker_config = build_config["docker"]
  raise(self.class::NoConfigAvailableError,
        { file_path: yaml_path, config_path: "build.docker" }) if !docker_config

  docker_image_config = docker_config["image"]
  raise(self.class::NoConfigAvailableError,
        { file_path: yaml_path, config_path: "build.docker.image" }) if !docker_image_config

  if !docker_image_config["namespace"]
    raise(self.class::NoConfigAvailableError,
          { file_path: yaml_path, config_path: "build.docker.image.namespace" })
  end
  if !docker_image_config["name"]
    raise(self.class::NoConfigAvailableError,
          { file_path: yaml_path, config_path: "build.docker.image.name" })
  end

  dockerfile_config = docker_config["dockerfile"]
  raise(self.class::NoConfigAvailableError,
        { file_path: yaml_path, config_path: "build.docker.dockerfile" }) if !dockerfile_config

  if !dockerfile_config["pattern"]
    raise(self.class::NoConfigAvailableError,
          { file_path: yaml_path, config_path: "build.docker.dockerfile.pattern" })
  end
end