Sha256: 8e47cb5b92270ea0539bd2b73b51cfe0c420c43c069789fc1602bc6d20c60b04

Contents?: true

Size: 1.77 KB

Versions: 35

Compression:

Stored size: 1.77 KB

Contents

require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")

describe Sequel::Model, "Subclasses plugin" do
  before do
    @c = Class.new(Sequel::Model)
    @c.plugin :subclasses
  end

  specify "#subclasses should record direct subclasses of the given model" do
    @c.subclasses.should == []

    sc1 = Class.new(@c)
    @c.subclasses.should == [sc1]
    sc1.subclasses.should == []

    sc2 = Class.new(@c)
    @c.subclasses.should == [sc1, sc2]
    sc1.subclasses.should == []
    sc2.subclasses.should == []

    ssc1 = Class.new(sc1)
    @c.subclasses.should == [sc1, sc2]
    sc1.subclasses.should == [ssc1]
    sc2.subclasses.should == []
  end

  specify "#descendents should record all descendent subclasses of the given model" do
    @c.descendents.should == []

    sc1 = Class.new(@c)
    @c.descendents.should == [sc1]
    sc1.descendents.should == []

    sc2 = Class.new(@c)
    @c.descendents.should == [sc1, sc2]
    sc1.descendents.should == []
    sc2.descendents.should == []

    ssc1 = Class.new(sc1)
    @c.descendents.should == [sc1, ssc1, sc2]
    sc1.descendents.should == [ssc1]
    sc2.descendents.should == []
    ssc1.descendents.should == []

    sssc1 = Class.new(ssc1)
    @c.descendents.should == [sc1, ssc1, sssc1, sc2]
    sc1.descendents.should == [ssc1, sssc1]
    sc2.descendents.should == []
    ssc1.descendents.should == [sssc1]
    sssc1.descendents.should == []
  end

  specify "plugin block should be called with each subclass created" do
    c = Class.new(Sequel::Model)
    a = []
    c.plugin(:subclasses){|sc| a << sc}
    sc1 = Class.new(c)
    a.should == [sc1]
    sc2 = Class.new(c)
    a.should == [sc1, sc2]
    sc3 = Class.new(sc1)
    a.should == [sc1, sc2, sc3]
    sc4 = Class.new(sc3)
    a.should == [sc1, sc2, sc3, sc4]
  end
end

Version data entries

35 entries across 35 versions & 2 rubygems

Version Path
sequel-4.22.0 spec/extensions/subclasses_spec.rb
sequel-4.21.0 spec/extensions/subclasses_spec.rb
sequel-4.20.0 spec/extensions/subclasses_spec.rb
sequel-4.19.0 spec/extensions/subclasses_spec.rb
sequel-4.18.0 spec/extensions/subclasses_spec.rb
sequel-4.17.0 spec/extensions/subclasses_spec.rb
sequel-4.16.0 spec/extensions/subclasses_spec.rb
asana2flowdock-1.0.0 vendor/bundle/ruby/1.9.1/gems/sequel-4.15.0/spec/extensions/subclasses_spec.rb
sequel-4.15.0 spec/extensions/subclasses_spec.rb
sequel-4.14.0 spec/extensions/subclasses_spec.rb
sequel-4.13.0 spec/extensions/subclasses_spec.rb
sequel-4.12.0 spec/extensions/subclasses_spec.rb
sequel-4.11.0 spec/extensions/subclasses_spec.rb
sequel-4.10.0 spec/extensions/subclasses_spec.rb
sequel-4.9.0 spec/extensions/subclasses_spec.rb
sequel-4.8.0 spec/extensions/subclasses_spec.rb
sequel-4.7.0 spec/extensions/subclasses_spec.rb
sequel-4.6.0 spec/extensions/subclasses_spec.rb
sequel-4.5.0 spec/extensions/subclasses_spec.rb
sequel-4.4.0 spec/extensions/subclasses_spec.rb