require 'active_support/configurable'
class User
include ActiveSupport::Configurable
end
user = User.new
# 写 config 对象
user.config.allowed_access = true
user.config.level = 1
# 读 config 对象
user.config.allowed_access # => true
user.config.level # => 1
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
class User
include ActiveSupport::Configurable
# 带 instance_reader、instance_writer 参数
config_accessor :allowed_access, instance_reader: false, instance_writer: false
# 带 instance_accessor 参数
config_accessor :allowed_access, instance_accessor: false
# 带 block
config_accessor :hair_colors do
[:brown, :black, :blonde, :red]
end
end
config # Configuration 的实例对象。实例方法 config 和 类方法 config_accessor 调用到它。
configure # 直接封装 config
Note: 它和 railties 目录下的 Configurable 和 Configuration 都没有关系。目前只发现有 AbstractController::Base 引用到它(其子类由于继承关系,也可以使用)。
# 类方法
compile_methods!
# 实例方法
compile_methods!
Note: 不对 module Configurable 之外提供接口,只有这里使用到它。