Spec-Zone.ru › Ruby on Rails 4.2

модуль ActiveSupport::Configurable::ClassMethods

Общедоступные методы экземпляров

config() Показать исходный код
# 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_accessor(*names) { || ... } Показать исходный код
# 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

Позволяет добавить ярлыки, чтобы не приходилось обращаться к атрибуту через 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]
configure() { |config| ... } Показать исходный код
# File activesupport/lib/active_support/configurable.rb, line 36
def configure
  yield config
end

© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API