Methods

Instance Public methods

config()

Reads and writes attributes from a configuration OrderedOptions.

require "active_support/configurable"

class User
  include ActiveSupport::Configurable
end

User.config.allowed_access = true
User.config.level = 1

User.config.allowed_access # => true
User.config.level          # => 1
πŸ“ Source code
# File activesupport/lib/active_support/configurable.rb, line 43
      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
πŸ”Ž See on GitHub

configure()

Configure values from within the passed block.

require "active_support/configurable"

class User
  include ActiveSupport::Configurable
end

User.allowed_access # => nil

User.configure do |config|
  config.allowed_access = true
end

User.allowed_access # => true
πŸ“ Source code
# File activesupport/lib/active_support/configurable.rb, line 67
      def configure
        yield config
      end
πŸ”Ž See on GitHub

Instance Private methods

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

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 omit the instance writer method, pass instance_writer: false. To omit 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 omit 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 default or a block to set up the attribute with a default value.

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

User.allowed_access # => false
User.hair_colors # => [:brown, :black, :blonde, :red]
πŸ“ Source code
# File activesupport/lib/active_support/configurable.rb, line 139
      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
πŸ”Ž See on GitHub