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