Class: Smol::Config

Inherits:
Object
  • Object
show all
Includes:
Coercion
Defined in:
lib/smol/config.rb

Constant Summary

Constants included from Coercion

Smol::Coercion::TRUTHY_VALUES

Instance Method Summary collapse

Methods included from Coercion

#coerce_value

Constructor Details

#initializeConfig

Returns a new instance of Config.



7
8
9
10
# File 'lib/smol/config.rb', line 7

def initialize
  @settings = {}
  @values = {}
end

Instance Method Details

#[](key) ⇒ Object

Raises:

  • (ArgumentError)


16
17
18
19
20
21
22
23
24
25
26
# File 'lib/smol/config.rb', line 16

def [](key)
  return @values[key] if @values.key?(key)

  setting = @settings[key]
  raise ArgumentError, "unknown config key: #{key}" unless setting

  env_key = key.to_s.upcase
  raw = ENV.fetch(env_key, setting[:default].to_s)

  @values[key] = coerce_value(raw, setting[:type])
end

#each(&block) ⇒ Object



42
43
44
45
46
# File 'lib/smol/config.rb', line 42

def each(&block)
  return enum_for(:each) unless block

  @settings.each_key { |k| yield k, self[k], @settings[k] }
end

#set(key, value) ⇒ Object

Raises:

  • (ArgumentError)


28
29
30
31
32
# File 'lib/smol/config.rb', line 28

def set(key, value)
  raise ArgumentError, "unknown config key: #{key}" unless @settings.key?(key)

  @values[key] = coerce_value(value.to_s, @settings[key][:type])
end

#setting(key, default:, type: :string, desc: nil) ⇒ Object



12
13
14
# File 'lib/smol/config.rb', line 12

def setting(key, default:, type: :string, desc: nil)
  @settings[key] = { default: default, type: type, desc: desc }
end

#settingsObject



34
35
36
# File 'lib/smol/config.rb', line 34

def settings
  @settings.dup
end

#to_hObject



38
39
40
# File 'lib/smol/config.rb', line 38

def to_h
  @settings.keys.each_with_object({}) { |k, h| h[k] = self[k] }
end