Sha256: 052dc3ab48cee14bc939126a358bff44cf88b797077684c26ccbf2d760fa9451

Contents?: true

Size: 1.21 KB

Versions: 9

Compression:

Stored size: 1.21 KB

Contents

describe "subclassing" do
  before do
    class Test::Foo
      extend Dry::Initializer[undefined: false]
      param  :foo
      option :bar
    end

    class Test::Bar < Test::Foo
      param  :baz
      option :qux
    end
  end

  let(:instance_of_superclass) do
    Test::Foo.new 1, bar: 3
  end

  let(:instance_of_subclass) do
    Test::Bar.new 1, 2, bar: 3, qux: 4
  end

  it "preserves null definition" do
    expect(Test::Foo.dry_initializer.null).to be_nil
    expect(Test::Bar.dry_initializer.null).to be_nil
  end

  it "preserves definitions made in the superclass" do
    expect(instance_of_subclass.foo).to eql 1
    expect(instance_of_subclass.baz).to eql 2
    expect(instance_of_subclass.bar).to eql 3
    expect(instance_of_subclass.qux).to eql 4
  end

  it "does not pollute superclass with definitions from subclass" do
    expect(instance_of_superclass).not_to respond_to :baz
    expect(instance_of_superclass).not_to respond_to :qux
  end

  it "calls .inherited hook added by other mixin" do
    called = false
    mixin = Module.new { define_method(:inherited) { |_| called = true } }

    base = Class.new { extend mixin; extend Dry::Initializer }
    Class.new(base)

    expect(called).to be true
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
dry-initializer-3.0.2 spec/subclassing_spec.rb
dry-initializer-3.0.1 spec/subclassing_spec.rb
dry-initializer-3.0.0 spec/subclassing_spec.rb
dry-initializer-2.5.0 spec/subclassing_spec.rb
dry-initializer-2.4.0 spec/subclassing_spec.rb
dry-initializer-2.3.0 spec/subclassing_spec.rb
dry-initializer-2.2.0 spec/subclassing_spec.rb
dry-initializer-2.1.0 spec/subclassing_spec.rb
dry-initializer-2.0.0 spec/subclassing_spec.rb