1require_relative '../../spec_helper' 2require_relative 'fixtures/classes' 3 4describe "Module#included" do 5 it "is invoked when self is included in another module or class" do 6 begin 7 m = Module.new do 8 def self.included(o) 9 $included_by = o 10 end 11 end 12 13 c = Class.new { include m } 14 15 $included_by.should == c 16 ensure 17 $included_by = nil 18 end 19 end 20 21 it "allows extending self with the object into which it is being included" do 22 m = Module.new do 23 def self.included(o) 24 o.extend(self) 25 end 26 27 def test 28 :passed 29 end 30 end 31 32 c = Class.new{ include(m) } 33 c.test.should == :passed 34 end 35 36 it "is private in its default implementation" do 37 Module.should have_private_instance_method(:included) 38 end 39 40 it "works with super using a singleton class" do 41 ModuleSpecs::SingletonOnModuleCase::Bar.include ModuleSpecs::SingletonOnModuleCase::Foo 42 ModuleSpecs::SingletonOnModuleCase::Bar.included_called?.should == true 43 end 44end 45