class TypedConfig::Setup

Attributes

loader[R]

Public Class Methods

new(loader: Loader.new) click to toggle source
# File lib/typed_config/setup.rb, line 13
def initialize(loader: Loader.new)
  @loader = loader
end

Public Instance Methods

call(config_path:, env: T.cast(ENV['RACK_ENV'], String)) click to toggle source
# File lib/typed_config/setup.rb, line 18
def call(config_path:, env: T.cast(ENV['RACK_ENV'], String))
  config_file = "#{config_path}/config.rb"
  return unless File.file?(config_file)

  require_relative config_file

  settings = build_settings(config_path: config_path, env: env)
  definition = TypeCoerce[Structs::Settings].new.from(settings)
  Object.const_set(Schema.schema_const_name, definition)
end

Private Instance Methods

build_settings(config_path:, env:) click to toggle source
# File lib/typed_config/setup.rb, line 38
def build_settings(config_path:, env:)
  merge_settings([
    loader.load("#{config_path}/settings.yml"),
    loader.load("#{config_path}/settings/#{env}.yml"),
    loader.load("#{config_path}/settings.local.yml"),
    loader.load("#{config_path}/settings/#{env}.local.yml"),
  ])
end
merge_settings(values) click to toggle source
# File lib/typed_config/setup.rb, line 51
def merge_settings(values)
  values.inject({}) { |prev, curr| prev.deep_merge(curr) }
end