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)
end
end
[:brown, :black, :blonde, :red]
config_accessor :hair_colors do
include ActiveSupport::Configurable
class User
Also you can pass 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 opt out 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 opt out of the instance reader method, pass instance_reader: false.
To opt out of 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) options = names.extract_options! names.each do |name| raise NameError.new('invalid config attribute name') unless name =~ /\A[_A-Za-z]\w*\z/ 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 unless options[:instance_accessor] == false class_eval reader, __FILE__, reader_line unless options[:instance_reader] == false class_eval writer, __FILE__, writer_line unless options[:instance_writer] == false end send("#{name}=", yield) if block_given? end end
def configure
def configure yield config end