Module: ActiveSupport::Configurable::ClassMethods
- Defined in:
- activesupport/lib/active_support/configurable.rb
Instance Method Summary collapse
- #config ⇒ Object
-
#config_accessor(*names) ⇒ Object
Allows you to add shortcut so that you don’t have to refer to attribute through config.
- #configure {|config| ... } ⇒ Object
Instance Method Details
#config ⇒ Object
27 28 29 30 31 32 33 34 |
# 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) ⇒ Object
Allows you to add shortcut so that you don’t have to refer to attribute through config. Also look at the example for config to contrast.
Defines both class and instance config accessors.
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
The attribute name must be a valid method name in Ruby.
class User
include ActiveSupport::Configurable
config_accessor :"1_Badname"
end
# => NameError: invalid config attribute name
To opt out of the instance writer method, pass instance_writer: false
. To opt out of the instance reader method, pass 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
Or pass instance_accessor: false
, to opt out both instance methods.
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
Also you can pass a block to set up the attribute with a default value.
class User
include ActiveSupport::Configurable
config_accessor :hair_colors do
[:brown, :black, :blonde, :red]
end
end
User.hair_colors # => [:brown, :black, :blonde, :red]
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
# File 'activesupport/lib/active_support/configurable.rb', line 106 def config_accessor(*names) = names. names.each do |name| raise NameError.new('invalid config attribute name') unless name =~ /^[_A-Za-z]\w*$/ 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 [:instance_accessor] == false class_eval reader, __FILE__, reader_line unless [:instance_reader] == false class_eval writer, __FILE__, writer_line unless [:instance_writer] == false end send("#{name}=", yield) if block_given? end end |
#configure {|config| ... } ⇒ Object
36 37 38 |
# File 'activesupport/lib/active_support/configurable.rb', line 36 def configure yield config end |