class Formica::Config

Constants

Option

Public Class Methods

new(values = {}) click to toggle source
# File lib/formica.rb, line 40
def initialize(values = {})
  @options = self.class.options.map { |n, o| [n, Option.new(o, false)] }.to_h
  update!(values)
end
validate_dependencies!() click to toggle source
# File lib/formica.rb, line 58
def self.validate_dependencies!
  require 'tsort'

  each_node = ->(&b) { options.each_key(&b) }
  each_child = ->(n, &b) { options[n].depends_on.each(&b) }
  TSort.tsort each_node, each_child
rescue TSort::Cyclic => e
  raise "Some options have a circular dependency: #{e}"
end

Public Instance Methods

force!() click to toggle source
# File lib/formica.rb, line 53
def force!
  @options.each { |_, o| public_send(o.option.attr_name) }
  self
end
to_h() click to toggle source
# File lib/formica.rb, line 49
def to_h
  Hash[@options.map { |_, o| [o.option.attr_name, o.value] if o.defined }.compact]
end
to_s() click to toggle source
# File lib/formica.rb, line 45
def to_s
  "<#{self.class} #{to_h}>"
end
update!(values) click to toggle source
# File lib/formica.rb, line 72
def update!(values)
  values.each do |k, v|
    option = @options[k] || raise(KeyError, "No option `#{k}` in #{self}")
    v = option.validate!(v, self)
    option.defined = true
    option.value = v
  end
end
with_changes(changes) click to toggle source
# File lib/formica.rb, line 68
def with_changes(changes)
  self.class.new(**to_h.merge(changes))
end