1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Consistently use kwargs for instance_{reader,writer,accessor} options

Since #29294, `mattr_acessor` uses kwargs for `instance_reader`,
`instance_writer`, and `instance_accessor` options.

`thread_mattr_accessor` and `config_accessor` also take the same
options, so let's maintain these options handles the same.
This commit is contained in:
Ryuta Kamizono 2018-07-30 02:11:54 +09:00
parent 6d37c6c41a
commit 19280f6653
2 changed files with 11 additions and 19 deletions

View file

@ -2,7 +2,6 @@
require "active_support/concern" require "active_support/concern"
require "active_support/ordered_options" require "active_support/ordered_options"
require "active_support/core_ext/array/extract_options"
module ActiveSupport module ActiveSupport
# Configurable provides a <tt>config</tt> method to store and retrieve # Configurable provides a <tt>config</tt> method to store and retrieve
@ -105,9 +104,7 @@ module ActiveSupport
# end # end
# #
# User.hair_colors # => [:brown, :black, :blonde, :red] # User.hair_colors # => [:brown, :black, :blonde, :red]
def config_accessor(*names) #:doc: def config_accessor(*names, instance_reader: true, instance_writer: true, instance_accessor: true) # :doc:
options = names.extract_options!
names.each do |name| names.each do |name|
raise NameError.new("invalid config attribute name") unless /\A[_A-Za-z]\w*\z/.match?(name) raise NameError.new("invalid config attribute name") unless /\A[_A-Za-z]\w*\z/.match?(name)
@ -117,9 +114,9 @@ module ActiveSupport
singleton_class.class_eval reader, __FILE__, reader_line singleton_class.class_eval reader, __FILE__, reader_line
singleton_class.class_eval writer, __FILE__, writer_line singleton_class.class_eval writer, __FILE__, writer_line
unless options[:instance_accessor] == false if instance_accessor
class_eval reader, __FILE__, reader_line unless options[:instance_reader] == false class_eval reader, __FILE__, reader_line if instance_reader
class_eval writer, __FILE__, writer_line unless options[:instance_writer] == false class_eval writer, __FILE__, writer_line if instance_writer
end end
send("#{name}=", yield) if block_given? send("#{name}=", yield) if block_given?
end end

View file

@ -1,7 +1,5 @@
# frozen_string_literal: true # frozen_string_literal: true
require "active_support/core_ext/array/extract_options"
# Extends the module object with class/module and instance accessors for # Extends the module object with class/module and instance accessors for
# class/module attributes, just like the native attr* accessors for instance # class/module attributes, just like the native attr* accessors for instance
# attributes, but does so on a per-thread basis. # attributes, but does so on a per-thread basis.
@ -35,9 +33,7 @@ class Module
# end # end
# #
# Current.new.user # => NoMethodError # Current.new.user # => NoMethodError
def thread_mattr_reader(*syms) # :nodoc: def thread_mattr_reader(*syms, instance_reader: true, instance_accessor: true) # :nodoc:
options = syms.extract_options!
syms.each do |sym| syms.each do |sym|
raise NameError.new("invalid attribute name: #{sym}") unless /^[_A-Za-z]\w*$/.match?(sym) raise NameError.new("invalid attribute name: #{sym}") unless /^[_A-Za-z]\w*$/.match?(sym)
@ -49,7 +45,7 @@ class Module
end end
EOS EOS
unless options[:instance_reader] == false || options[:instance_accessor] == false if instance_reader && instance_accessor
class_eval(<<-EOS, __FILE__, __LINE__ + 1) class_eval(<<-EOS, __FILE__, __LINE__ + 1)
def #{sym} def #{sym}
self.class.#{sym} self.class.#{sym}
@ -78,8 +74,7 @@ class Module
# end # end
# #
# Current.new.user = "DHH" # => NoMethodError # Current.new.user = "DHH" # => NoMethodError
def thread_mattr_writer(*syms) # :nodoc: def thread_mattr_writer(*syms, instance_writer: true, instance_accessor: true) # :nodoc:
options = syms.extract_options!
syms.each do |sym| syms.each do |sym|
raise NameError.new("invalid attribute name: #{sym}") unless /^[_A-Za-z]\w*$/.match?(sym) raise NameError.new("invalid attribute name: #{sym}") unless /^[_A-Za-z]\w*$/.match?(sym)
@ -91,7 +86,7 @@ class Module
end end
EOS EOS
unless options[:instance_writer] == false || options[:instance_accessor] == false if instance_writer && instance_accessor
class_eval(<<-EOS, __FILE__, __LINE__ + 1) class_eval(<<-EOS, __FILE__, __LINE__ + 1)
def #{sym}=(obj) def #{sym}=(obj)
self.class.#{sym} = obj self.class.#{sym} = obj
@ -141,9 +136,9 @@ class Module
# #
# Current.new.user = "DHH" # => NoMethodError # Current.new.user = "DHH" # => NoMethodError
# Current.new.user # => NoMethodError # Current.new.user # => NoMethodError
def thread_mattr_accessor(*syms) def thread_mattr_accessor(*syms, instance_reader: true, instance_writer: true, instance_accessor: true)
thread_mattr_reader(*syms) thread_mattr_reader(*syms, instance_reader: instance_reader, instance_accessor: instance_accessor)
thread_mattr_writer(*syms) thread_mattr_writer(*syms, instance_writer: instance_writer, instance_accessor: instance_accessor)
end end
alias :thread_cattr_accessor :thread_mattr_accessor alias :thread_cattr_accessor :thread_mattr_accessor
end end