Method: ActiveSupport::CurrentAttributes.attribute
- Defined in:
- lib/active_support/current_attributes.rb
.attribute(*names, default: NOT_SET) ⇒ Object
Declares one or more attributes that will be given both class and instance accessor methods.
Options
-
:default- The default value for the attributes. If the value is a proc or lambda, it will be called whenever an instance is constructed. Otherwise, the value will be duplicated with#dup. Default values are re-assigned when the attributes are reset.
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
# File 'lib/active_support/current_attributes.rb', line 115 def attribute(*names, default: NOT_SET) invalid_attribute_names = names.map(&:to_sym) & INVALID_ATTRIBUTE_NAMES if invalid_attribute_names.any? raise ArgumentError, "Restricted attribute names: #{invalid_attribute_names.join(", ")}" end Delegation.generate(singleton_class, names, to: :instance, nilable: false, signature: "") Delegation.generate(singleton_class, names.map { |n| "#{n}=" }, to: :instance, nilable: false, signature: "value") ActiveSupport::CodeGenerator.batch(generated_attribute_methods, __FILE__, __LINE__) do |owner| names.each do |name| owner.define_cached_method(name, namespace: :current_attributes) do |batch| batch << "def #{name}" << "@attributes[:#{name}]" << "end" end owner.define_cached_method("#{name}=", namespace: :current_attributes) do |batch| batch << "def #{name}=(value)" << "@attributes[:#{name}] = value" << "end" end end end self.defaults = defaults.merge(names.index_with { default }) end |