方法
執行個體公開方法
config() 連結
來源:顯示 | 在 GitHub 上
# File activesupport/lib/active_support/configurable.rb, line 30 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() 連結
來源:顯示 | 在 GitHub 上
# File activesupport/lib/active_support/configurable.rb, line 39 def configure yield config end
執行個體私有方法
config_accessor(*names, instance_reader: true, instance_writer: true, instance_accessor: true, default: nil) 連結
允許您新增捷徑,這樣您就不必透過 config 參照屬性。此外,請參閱 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 111 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