class ConfigDefault::Struct
Constants
- RESERVED_METHODS
Public Class Methods
new(attributes:, recursive: false, allow_nil: false)
click to toggle source
# File lib/config_default/struct.rb, line 6 def initialize(attributes:, recursive: false, allow_nil: false) @attributes = ActiveSupport::HashWithIndifferentAccess.new(attributes) @allow_nil = allow_nil @recursive = recursive make_recursive! define_methods! @attributes.freeze end
Public Instance Methods
[](key)
click to toggle source
# File lib/config_default/struct.rb, line 17 def [](key) @attributes[key] end
method_missing(method, *_args)
click to toggle source
# File lib/config_default/struct.rb, line 21 def method_missing(method, *_args) return if @allow_nil raise StandardError.new("There is no option :#{method} in configuration.") end
respond_to_missing?(*_args)
click to toggle source
# File lib/config_default/struct.rb, line 26 def respond_to_missing?(*_args) true end
to_hash()
click to toggle source
# File lib/config_default/struct.rb, line 30 def to_hash dup = @attributes.dup if @recursive dup.each do |key, value| next unless value.is_a?(self.class) dup[key] = value.to_hash end end dup end
Private Instance Methods
define_methods!()
click to toggle source
# File lib/config_default/struct.rb, line 58 def define_methods! @attributes.each do |key, value| next if RESERVED_METHODS.include?(key.to_sym) define_singleton_method(key) { value } end end
make_recursive!()
click to toggle source
# File lib/config_default/struct.rb, line 45 def make_recursive! return unless @recursive @attributes.each do |key, value| next unless value.is_a?(Hash) @attributes[key] = self.class.new( attributes: value, recursive: @recursive, allow_nil: @allow_nil, ) end end