module ActiveSupport::Configurable::ClassMethods
Public Instance Methods
# File activesupport/lib/active_support/configurable.rb, line 27
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 # File activesupport/lib/active_support/configurable.rb, line 106
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 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 opt out of the instance writer method, pass instance_writer:
false. To opt out of 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 opt out 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 a block to set up the attribute with a default value.
class User
  include ActiveSupport::Configurable
  config_accessor :hair_colors do
    [:brown, :black, :blonde, :red]
  end
end
User.hair_colors # => [:brown, :black, :blonde, :red]
  # File activesupport/lib/active_support/configurable.rb, line 36 def configure yield config end
    © 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.