module ActiveSupport::Configurable::ClassMethods  
        
        Public instance methods
Reads and writes attributes from a configuration OrderedOptions.
require "active_support/configurable"
class User
  include ActiveSupport::Configurable
end
User.config.allowed_access = true
User.config.level = 1
User.config.allowed_access # => true
User.config.level          # => 1
Source code GitHub
# File activesupport/lib/active_support/configurable.rb, line 43
def config
  @_config ||= if respond_to?(:superclass) && superclass.respond_to?(:config)
    superclass.config.inheritable_copy
  else
    # create a new "anonymous" class that will host the compiled reader methods
    Class.new(Configuration).new
  end
end
            Configure values from within the passed block.
require "active_support/configurable"
class User
  include ActiveSupport::Configurable
end
User.allowed_access # => nil
User.configure do |config|
  config.allowed_access = true
end
User.allowed_access # => true
Source code GitHub
# File activesupport/lib/active_support/configurable.rb, line 67
def configure
  yield config
end
            Private instance methods
config_accessor(*names, instance_reader: true, instance_writer: true, instance_accessor: true, default: nil)
            Allows you to add shortcut so that you don’t have to refer to attribute through config. Also look at the example for config to contrast.
Defines both class and instance config accessors.
class User
  include ActiveSupport::Configurable
  config_accessor :allowed_access
end
User.allowed_access # => nil
User.allowed_access = false
User.allowed_access # => false
user = User.new
user.allowed_access # => false
user.allowed_access = true
user.allowed_access # => true
User.allowed_access # => false
The attribute name must be a valid method name in Ruby.
class User
  include ActiveSupport::Configurable
  config_accessor :"1_Badname"
end
# => NameError: invalid config attribute name
To omit the instance writer method, pass instance_writer: false. To omit the instance reader method, pass instance_reader: false.
class User
  include ActiveSupport::Configurable
  config_accessor :allowed_access, instance_reader: false, instance_writer: false
end
User.allowed_access = false
User.allowed_access # => false
User.new.allowed_access = true # => NoMethodError
User.new.allowed_access        # => NoMethodError
Or pass instance_accessor: false, to omit both instance methods.
class User
  include ActiveSupport::Configurable
  config_accessor :allowed_access, instance_accessor: false
end
User.allowed_access = false
User.allowed_access # => false
User.new.allowed_access = true # => NoMethodError
User.new.allowed_access        # => NoMethodError
Also you can pass default or a block to set up the attribute with a default value.
class User
  include ActiveSupport::Configurable
  config_accessor :allowed_access, default: false
  config_accessor :hair_colors do
    [:brown, :black, :blonde, :red]
  end
end
User.allowed_access # => false
User.hair_colors # => [:brown, :black, :blonde, :red]
Source code GitHub
# File activesupport/lib/active_support/configurable.rb, line 139
def config_accessor(*names, instance_reader: true, instance_writer: true, instance_accessor: true, default: nil) # :doc:
  names.each do |name|
    raise NameError.new("invalid config attribute name") unless /\A[_A-Za-z]\w*\z/.match?(name)
    reader, reader_line = "def #{name}; config.#{name}; end", __LINE__
    writer, writer_line = "def #{name}=(value); config.#{name} = value; end", __LINE__
    singleton_class.class_eval reader, __FILE__, reader_line
    singleton_class.class_eval writer, __FILE__, writer_line
    if instance_accessor
      class_eval reader, __FILE__, reader_line if instance_reader
      class_eval writer, __FILE__, writer_line if instance_writer
    end
    send("#{name}=", block_given? ? yield : default)
  end
end