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:
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