class Directive::ConfigObject

Constants

RESERVED_WORDS

Private Class Methods

_ensure_safe_option_name(name) click to toggle source
# File lib/directive/config_object.rb, line 51
def _ensure_safe_option_name(name)
  raise ArgumentError, "#{name.inspect} is reserved and cannot be used at a config option" if name.in? RESERVED_WORDS
  raise ArgumentError, "#{name.inspect} is defined twice" if _nested_options.include?(name)

  puts "Warning: the config option #{name} is already defined" if _options.include?(name) # rubocop:disable Rails/Output
end
inherited(base) click to toggle source
Calls superclass method
# File lib/directive/config_object.rb, line 58
def inherited(base)
  base._nested_options = _nested_options.dup
  base._nested_builders = _nested_builders.dup
  super
end
nested(namespace, &block) click to toggle source
# File lib/directive/config_object.rb, line 30
def nested(namespace, &block)
  namespace = namespace.to_sym

  _ensure_safe_option_name(namespace)

  nested_config_builder_for(namespace).tap do |builder|
    builder.instance_exec(&block)

    _nested_options << namespace
    define_method(namespace) do |&nested_configure_block|
      builder.__send__(:configuration).tap do |nested_config|
        nested_configure_block.call(nested_config) if nested_configure_block.respond_to?(:call)
      end
    end
  end
end
nested_config_builder_for(namespace) click to toggle source
# File lib/directive/config_object.rb, line 47
def nested_config_builder_for(namespace)
  _nested_builders[namespace.to_sym] ||= ConfigBuilder.new
end
option(name, *args, **kwargs) click to toggle source
Calls superclass method
# File lib/directive/config_object.rb, line 22
def option(name, *args, **kwargs)
  name = name.to_sym

  _ensure_safe_option_name(name)

  super(name, *args, **kwargs)
end

Public Instance Methods

inspect() click to toggle source
# File lib/directive/config_object.rb, line 65
def inspect
  "#<#{self.class.superclass} #{super}>"
end