提交 8212dfcf 编写于 作者: M Mark J. Titorenko

Do nothing when the same block is included again.

If the same block is included multiple times, we no longer raise an exception
or overwrite the included block instance variable.

Fixes #14802.

[Mark J. Titorenko + Vlad Bokov]
上级 4b5c4ca3
* If the same block is `included` multiple times for a Concern, an exception is no longer raised.
*Mark J. Titorenko*, *Vlad Bokov*
* Fix bug where `#to_options` for `ActiveSupport::HashWithIndifferentAccess`
would not act as alias for `#symbolize_keys`.
......
......@@ -125,9 +125,13 @@ def append_features(base)
def included(base = nil, &block)
if base.nil?
raise MultipleIncludedBlocks if instance_variable_defined?(:@_included_block)
@_included_block = block
if instance_variable_defined?(:@_included_block)
if @_included_block.source_location != block.source_location
raise MultipleIncludedBlocks
end
else
@_included_block = block
end
else
super
end
......
......@@ -128,4 +128,12 @@ def test_raise_on_multiple_included_calls
end
end
end
def test_no_raise_on_same_included_call
assert_nothing_raised do
2.times do
load File.expand_path("../fixtures/concern/some_concern.rb", __FILE__)
end
end
end
end
# frozen_string_literal: true
require "active_support/concern"
module SomeConcern
extend ActiveSupport::Concern
included do
# shouldn't raise when module is loaded more than once
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册