module ActiveSupport::Configurable::ClassMethods

def config

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

def config_accessor(*names, instance_reader: true, instance_writer: true, instance_accessor: true, default: nil) # :doc:

:doc:
User.hair_colors # => [:brown, :black, :blonde, :red]
User.allowed_access # => false

end
end
[:brown, :black, :blonde, :red]
config_accessor :hair_colors do
config_accessor :allowed_access, default: false
include ActiveSupport::Configurable
class User

Also you can pass default or a block to set up the attribute with a default value.

User.new.allowed_access # => NoMethodError
User.new.allowed_access = true # => NoMethodError

User.allowed_access # => false
User.allowed_access = false

end
config_accessor :allowed_access, instance_accessor: false
include ActiveSupport::Configurable
class User

Or pass instance_accessor: false, to omit both instance methods.

User.new.allowed_access # => NoMethodError
User.new.allowed_access = true # => NoMethodError

User.allowed_access # => false
User.allowed_access = false

end
config_accessor :allowed_access, instance_reader: false, instance_writer: false
include ActiveSupport::Configurable
class User

To omit the instance reader method, pass instance_reader: false.
To omit the instance writer method, pass instance_writer: false.

# => NameError: invalid config attribute name
end
config_accessor :"1_Badname"
include ActiveSupport::Configurable
class User

The attribute name must be a valid method name in Ruby.

User.allowed_access # => false

user.allowed_access # => true
user.allowed_access = true
user.allowed_access # => false
user = User.new

User.allowed_access # => false
User.allowed_access = false
User.allowed_access # => nil

end
config_accessor :allowed_access
include ActiveSupport::Configurable
class User

Defines both class and instance config accessors.

through config. Also look at the example for config to contrast.
Allows you to add shortcut so that you don't have to refer to attribute
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

def configure

def configure
  yield config
end