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