方法
实例公共方法
config() 链接
从配置 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
来源: 显示 | 在 GitHub 上
# File activesupport/lib/active_support/configurable.rb, line 49 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
configure() 链接
在传入的块中配置值。
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
来源: 显示 | 在 GitHub 上
# File activesupport/lib/active_support/configurable.rb, line 73 def configure yield config end
实例私有方法
config_accessor(*names, instance_reader: true, instance_writer: true, instance_accessor: true, default: nil) 链接
允许您添加快捷方式,以便不必通过 config 来引用属性。还可以查看 config 的示例进行对比。
定义类和实例配置访问器。
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
属性名称必须是 Ruby 中有效的名称。
class User include ActiveSupport::Configurable config_accessor :"1_Badname" end # => NameError: invalid config attribute name
要省略实例写入方法,请传递 instance_writer: false。要省略实例读取方法,请传递 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
或者传递 instance_accessor: false,以省略两个实例方法。
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
您还可以传递 default 或一个块来设置属性的默认值。
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]
来源: 显示 | 在 GitHub 上
# File activesupport/lib/active_support/configurable.rb, line 145 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