class Pakyow::Support::Configurable::Config

@api private

Attributes

__defaults[R]

@api private

__groups[R]

@api private

__settings[R]

@api private

Public Class Methods

new(configurable) click to toggle source
# File lib/pakyow/support/configurable/config.rb, line 23
def initialize(configurable)
  @configurable = configurable

  @__settings = Concurrent::Hash.new
  @__defaults = Concurrent::Hash.new
  @__groups   = Concurrent::Hash.new
end

Public Instance Methods

configurable(group, &block) click to toggle source
# File lib/pakyow/support/configurable/config.rb, line 64
def configurable(group, &block)
  group = group.to_sym
  config = Config.new(@configurable)
  config.instance_eval(&block)

  unless @__groups.include?(group)
    define_group_methods(group)
  end

  @__groups[group] = config
end
configure_defaults!(configured_environment) click to toggle source
# File lib/pakyow/support/configurable/config.rb, line 76
def configure_defaults!(configured_environment)
  if defaults = @__defaults[configured_environment.to_s.to_sym]
    instance_eval(&defaults)
  end

  @__groups.values.each do |group|
    group.configure_defaults!(configured_environment)
  end
end
defaults(environment, &block) click to toggle source
# File lib/pakyow/support/configurable/config.rb, line 60
def defaults(environment, &block)
  @__defaults[environment] = block
end
eval(setting, context) click to toggle source
# File lib/pakyow/support/configurable/config.rb, line 112
def eval(setting, context)
  value = public_send(setting)
  if value.is_a?(Proc)
    context.instance_eval(&value)
  else
    value
  end
end
initialize_copy(_) click to toggle source
Calls superclass method
# File lib/pakyow/support/configurable/config.rb, line 31
def initialize_copy(_)
  @__defaults = @__defaults.deep_dup
  @__settings = @__settings.deep_dup
  @__groups   = @__groups.deep_dup

  @__settings.each do |key, _|
    define_setting_methods(key)
  end

  @__groups.each do |key, _|
    define_group_methods(key)
  end

  super
end
setting(name, default = default_omitted = true, &block) click to toggle source
# File lib/pakyow/support/configurable/config.rb, line 47
def setting(name, default = default_omitted = true, &block)
  tap do
    name = name.to_sym
    default = nil if default_omitted

    unless @__settings.include?(name)
      define_setting_methods(name)
    end

    @__settings[name] = Setting.new(default: default, configurable: @configurable, &block)
  end
end
to_h() click to toggle source
# File lib/pakyow/support/configurable/config.rb, line 98
def to_h
  hash = {}

  @__settings.each_with_object(hash) { |(name, setting), h|
    h[name] = setting.value
  }

  @__groups.each_with_object(hash) { |(name, group), h|
    h[name] = group.to_h
  }

  hash
end
update_configurable(configurable) click to toggle source
# File lib/pakyow/support/configurable/config.rb, line 86
def update_configurable(configurable)
  @configurable = configurable

  @__settings.values.each do |setting|
    setting.update_configurable(configurable)
  end

  @__groups.values.each do |group|
    group.update_configurable(configurable)
  end
end

Private Instance Methods

define_group_methods(name) click to toggle source
# File lib/pakyow/support/configurable/config.rb, line 145
def define_group_methods(name)
  singleton_class.define_method name do
    find_group(name)
  end
end
define_setting_methods(name) click to toggle source
# File lib/pakyow/support/configurable/config.rb, line 131
def define_setting_methods(name)
  singleton_class.define_method name do |&block|
    if block
      find_setting(name).set(block)
    else
      find_setting(name).value
    end
  end

  singleton_class.define_method :"#{name}=" do |value|
    find_setting(name).set(value)
  end
end
find_group(name) click to toggle source
# File lib/pakyow/support/configurable/config.rb, line 127
def find_group(name)
  @__groups[name.to_sym]
end
find_setting(name) click to toggle source
# File lib/pakyow/support/configurable/config.rb, line 123
def find_setting(name)
  @__settings[name.to_sym]
end