module ActiveSupport::Configurable::ClassMethods - activesupport-4.2.3 Documentation

# module ActiveSupport::Configurable::ClassMethods

### Public Instance Methods

config() click to toggle source

    # File 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

config_accessor(*names) { || ... } click to toggle source

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

configure() { |config| ... } click to toggle source

    # File lib/active_support/configurable.rb, line 36
    def configure
      yield config
    end