Class: K8::BaseConfig

Inherits:
Object
  • Object
show all
Defined in:
lib/keight.rb

Direct Known Subclasses

Config

Constant Summary collapse

SECRET =
SecretValue.new

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(freeze: true) ⇒ BaseConfig

Returns a new instance of BaseConfig.



1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
# File 'lib/keight.rb', line 1625

def initialize(freeze: true)
  #; [!vvd1n] copies key and values from class object.
  self.class.each do |key, val, _, _|
    #; [!xok12] when value is SECRET...
    if val.is_a?(SecretValue)
      #; [!a4a4p] raises error when key not specified.
      val.name  or
        raise ConfigError.new("config '#{key}' should be set, but not.")
      #; [!w4yl7] raises error when ENV value not specified.
      ENV[val.name]  or
        raise ConfigError.new("config '#{key}' depends on ENV['#{val.name}'], but not set.")
      #; [!he20d] get value from ENV.
      val = ENV[val.name]
    end
    instance_variable_set("@#{key}", val)
  end
  #; [!6dilv] freezes self and class object if 'freeze:' is true.
  self.class.freeze if freeze
  self.freeze       if freeze
end

Class Method Details

.add(key, value, desc = nil) ⇒ Object



1712
1713
1714
1715
1716
1717
1718
# File 'lib/keight.rb', line 1712

def self.add(key, value, desc=nil)
  #; [!envke] raises error when already added.
  ! self.has?(key)  or
    raise K8::ConfigError.new("add(#{key.inspect}, #{value.inspect}): cannot add because already added; use set() or put() instead.")
  #; [!6cmb4] adds new key, value and desc.
  self.put(key, value, desc)
end

.eachObject



1728
1729
1730
1731
1732
1733
1734
# File 'lib/keight.rb', line 1728

def self.each
  #; [!iu88i] yields with key, value, desc and secret flag.
  __all().each do |key, (value, desc, secret)|
    yield key, value, desc, secret
  end
  nil
end

.get(key, default = nil) ⇒ Object



1736
1737
1738
1739
1740
1741
# File 'lib/keight.rb', line 1736

def self.get(key, default=nil)
  #; [!zlhnp] returns value corresponding to key.
  #; [!o0k05] returns default value (=nil) when key is not added.
  tuple = __all()[key]
  return tuple ? tuple.first : default
end

.has?(key) ⇒ Boolean

Returns:

  • (Boolean)


1691
1692
1693
1694
# File 'lib/keight.rb', line 1691

def self.has?(key)
  #; [!dv87n] returns true iff key is set.
  return __all().key?(key)
end

.put(key, value, desc = nil) ⇒ Object



1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
# File 'lib/keight.rb', line 1696

def self.put(key, value, desc=nil)
  #; [!h9b47] defines getter method.
  attr_reader key
  d = __all()
  #; [!mun1v] keeps secret flag.
  if d[key]
    desc ||= d[key][1]
    secret = d[key][2]
  else
    secret = value == SECRET
  end
  #; [!ncwzt] stores key with value, description and secret flag.
  d[key] = [value, desc, secret]
  nil
end

.set(key, value, desc = nil) ⇒ Object



1720
1721
1722
1723
1724
1725
1726
# File 'lib/keight.rb', line 1720

def self.set(key, value, desc=nil)
  #; [!2yis0] raises error when not added yet.
  self.has?(key)  or
    raise K8::ConfigError.new("set(#{key.inspect}, #{value.inspect}): cannot set because not added yet; use add() or put() instead.")
  #; [!3060g] sets key, value and desc.
  self.put(key, value, desc)
end

.validate_valuesObject

:nodoc:



1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
# File 'lib/keight.rb', line 1646

def self.validate_values   # :nodoc:
  not_set = []
  not_env = []
  each() do |key, val, _, _|
    if val.is_a?(SecretValue)
      if ! val.name
        not_set << [key, val]
      elsif ! ENV[val.name]
        not_env << [key, val]
      end
    end
  end
  return nil if not_set.empty? && not_env.empty?
  sb = []
  sb << "**"
  sb << "** ERROR: insufficient config"
  unless not_set.empty?
    sb << "**"
    sb << "** The following configs should be set, but not."
    sb << "**"
    not_set.each do |key, val|
      sb <<  "**   %-25s %s" % [key, val]
    end
  end
  unless not_env.empty?
    sb << "**"
    sb << "** The following configs expect environment variable, but not set."
    sb << "**"
    not_env.each do |key, val|
      sb <<  "**   %-25s %s" % [key, val]
    end
  end
  sb << "**"
  sb << ""
  return sb.join("\n")
end

Instance Method Details

#[](key) ⇒ Object



1743
1744
1745
1746
# File 'lib/keight.rb', line 1743

def [](key)
  #; [!jn9l5] returns value corresponding to key.
  return __send__(key)
end

#get_all(prefix_key) ⇒ Object



1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
# File 'lib/keight.rb', line 1748

def get_all(prefix_key)
  #; [!4ik3c] returns all keys and values which keys start with prefix as hash object.
  prefix = "@#{prefix_key}"
  symbol_p = prefix_key.is_a?(Symbol)
  range = prefix.length..-1
  d = {}
  self.instance_variables.each do |ivar|
    if ivar.to_s.start_with?(prefix)
      val = self.instance_variable_get(ivar)
      key = ivar[range].intern
      key = key.intern if symbol_p
      d[key] = val
    end
  end
  return d
end