提交 8f2b1a12 编写于 作者: R Rafael Mendonça França

Merge pull request #10652 from md5/concern-multiple-included

Raise an error when multiple included blocks are defined for a Concern
* Raise an error when multiple `included` blocks are defined for a Concern.
The old behavior would silently discard previously defined blocks, running
only the last one.
*Mike Dillon*
* Replace `multi_json` with `json`.
Since Rails requires Ruby 1.9 and since Ruby 1.9 includes `json` in the standard library,
......
......@@ -98,6 +98,12 @@ module ActiveSupport
# include Bar # works, Bar takes care now of its dependencies
# end
module Concern
class MultipleIncludedBlocks < StandardError #:nodoc:
def initialize
super "Cannot define multiple 'included' blocks for a Concern"
end
end
def self.extended(base) #:nodoc:
base.instance_variable_set("@_dependencies", [])
end
......@@ -117,6 +123,8 @@ def append_features(base)
def included(base = nil, &block)
if base.nil?
raise MultipleIncludedBlocks if instance_variable_defined?("@_included_block")
@_included_block = block
else
super
......
......@@ -91,4 +91,18 @@ def test_dependencies_with_multiple_modules
@klass.send(:include, Foo)
assert_equal [ConcernTest::Foo, ConcernTest::Bar, ConcernTest::Baz], @klass.included_modules[0..2]
end
def test_raise_on_multiple_included_calls
assert_raises(ActiveSupport::Concern::MultipleIncludedBlocks) do
Module.new do
extend ActiveSupport::Concern
included do
end
included do
end
end
end
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册