модуль ActiveSupport::Configurable::ClassMethods
Публичные методы экземпляра
# File activesupport/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. Также обратите внимание на пример для 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
Также вы можете передать блок для настройки атрибута со значением по умолчанию.
class User
include ActiveSupport::Configurable
config_accessor :hair_colors do
[:brown, :black, :blonde, :red]
end
end
User.hair_colors # => [:brown, :black, :blonde, :red]
# File activesupport/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 # File activesupport/lib/active_support/configurable.rb, line 36 def configure yield config end
© 2004–2016 David Heinemeier Hansson
Licensed under the MIT License.