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