class Qonfig::Commands::Definition::ExposeSelf

@api private @since 0.14.0

Attributes

caller_location[R]

@return [String]

@api private @since 0.14.0

env[R]

@return [Symbol, String]

@api private @since 0.14.0

format[R]

@return [String, Symbol]

@api private @since 0.15.0

Public Class Methods

new(caller_location, env:, format:) click to toggle source

@param caller_location [String] @option env [String, Symbol] @option format [String, Symbol]

@api private @since 0.14.0

# File lib/qonfig/commands/definition/expose_self.rb, line 33
def initialize(caller_location, env:, format:)
  unless env.is_a?(Symbol) || env.is_a?(String)
    raise Qonfig::ArgumentError, ':env should be a string or a symbol'
  end

  raise Qonfig::ArgumentError, ':env should be provided' if env.to_s.empty?

  unless format.is_a?(String) || format.is_a?(Symbol)
    raise Qonfig::ArgumentError, 'Format should be a symbol or a string'
  end

  @caller_location = caller_location
  @env = env
  @format = format.tap { Qonfig::Loaders.resolve(format) }
end

Public Instance Methods

call(data_set, settings) click to toggle source

@param data_set [Qonfig::DataSet] @param settings [Qonfig::Settings] @return [void]

@api private @since 0.14.0

# File lib/qonfig/commands/definition/expose_self.rb, line 55
def call(data_set, settings)
  self_placed_data = load_self_placed_end_data
  env_based_data_slice =
    self_placed_data[env] || self_placed_data[env.to_s] || self_placed_data[env.to_sym]

  raise(
    Qonfig::ExposeError,
    "#{file_path} file does not contain settings with <#{env}> environment key!"
  ) unless env_based_data_slice

  raise(
    Qonfig::IncompatibleEndDataStructureError,
    '__END__-data content must be a hash-like structure'
  ) unless env_based_data_slice.is_a?(Hash)

  self_placed_settings = build_data_set_klass(env_based_data_slice).new.settings
  settings.__append_settings__(self_placed_settings)
end

Private Instance Methods

build_data_set_klass(self_placed_settings) click to toggle source

@param self_placed_settings [Hash] @return [Class<Qonfig::DataSet>]

@api private @since 0.14.0

# File lib/qonfig/commands/definition/expose_self.rb, line 100
def build_data_set_klass(self_placed_settings)
  Qonfig::DataSet::ClassBuilder.build_from_hash(self_placed_settings)
end
load_self_placed_end_data() click to toggle source

@return [Hash]

@raise [Qonfig::SelfDataNotFound] @raise [Qonfig::IncompatibleEndDataStructureError]

@api private @since 0.14.0

# File lib/qonfig/commands/definition/expose_self.rb, line 83
def load_self_placed_end_data
  end_data      = Qonfig::Loaders::EndData.extract(caller_location)
  settings_data = Qonfig::Loaders.resolve(format).load(end_data)

  raise(
    Qonfig::IncompatibleEndDataStructureError,
    '__END__-data must be a hash-like structure'
  ) unless settings_data.is_a?(Hash)

  settings_data
end