Do not define instance predicate if the instance reader isn't as well
This regressed in 49d1b5a98dc50ca59bbfb817f90eb5c2c2645d30. I didn't notice it because the method would be defined but would raise a NoMethodError.
This commit is contained in:
parent
67e18160e6
commit
0309179fb6
@ -120,7 +120,9 @@ def class_attribute(*attrs, instance_accessor: true,
|
||||
|
||||
if instance_predicate
|
||||
class_methods << "silence_redefinition_of_method def #{name}?; !!self.#{name}; end"
|
||||
methods << "silence_redefinition_of_method def #{name}?; !!self.#{name}; end"
|
||||
if instance_reader
|
||||
methods << "silence_redefinition_of_method def #{name}?; !!self.#{name}; end"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -68,24 +68,31 @@ def setup
|
||||
test "disabling instance writer" do
|
||||
object = Class.new { class_attribute :setting, instance_writer: false }.new
|
||||
assert_raise(NoMethodError) { object.setting = "boom" }
|
||||
assert_not_respond_to object, :setting=
|
||||
end
|
||||
|
||||
test "disabling instance reader" do
|
||||
object = Class.new { class_attribute :setting, instance_reader: false }.new
|
||||
assert_raise(NoMethodError) { object.setting }
|
||||
assert_not_respond_to object, :setting
|
||||
assert_raise(NoMethodError) { object.setting? }
|
||||
assert_not_respond_to object, :setting?
|
||||
end
|
||||
|
||||
test "disabling both instance writer and reader" do
|
||||
object = Class.new { class_attribute :setting, instance_accessor: false }.new
|
||||
assert_raise(NoMethodError) { object.setting }
|
||||
assert_not_respond_to object, :setting
|
||||
assert_raise(NoMethodError) { object.setting? }
|
||||
assert_not_respond_to object, :setting?
|
||||
assert_raise(NoMethodError) { object.setting = "boom" }
|
||||
assert_not_respond_to object, :setting=
|
||||
end
|
||||
|
||||
test "disabling instance predicate" do
|
||||
object = Class.new { class_attribute :setting, instance_predicate: false }.new
|
||||
assert_raise(NoMethodError) { object.setting? }
|
||||
assert_not_respond_to object, :setting?
|
||||
end
|
||||
|
||||
test "works well with singleton classes" do
|
||||
|
Loading…
Reference in New Issue
Block a user