Sha256: 2e6d076f6be237a1b593f8ad069b9e39c0ca2b192c757942b6a32bc84e4904fc

Contents?: true

Size: 1.84 KB

Versions: 1

Compression:

Stored size: 1.84 KB

Contents

# encoding: utf-8

describe AbstractMapper::DSL do

  let!(:bar) { AbstractMapper::Test::Bar = Class.new(AbstractMapper::Branch) }
  let!(:foo) { AbstractMapper::Test::Foo = Class.new(AbstractMapper::Node)   }
  let!(:rule) do
    AbstractMapper::Test::Rule = Class.new(AbstractMapper::PairRule) do
      def optimize?
        left.instance_of?(AbstractMapper::Test::Foo)
      end

      def optimize
        AbstractMapper::Test::Foo.new(nodes.flat_map(&:attributes))
      end
    end
  end
  let!(:dsl) { Class.new { extend AbstractMapper::DSL } }

  let!(:config) do
    dsl.configure do
      command :foo, AbstractMapper::Test::Foo
      command :bar, AbstractMapper::Test::Bar
      rule AbstractMapper::Test::Rule
    end
  end

  describe "#configure" do

    subject { config }

    it { is_expected.to eql dsl }

    it "configures settings" do
      subject
      expect(dsl.settings).to be_kind_of AbstractMapper::Settings
      expect(dsl.settings.rules.registry).to eql [rule]
      expect(dsl.settings.commands.registry).to eql(foo: foo, bar: bar)
    end

  end # describe #configure

  describe "#finalize" do

    before do
      dsl.instance_eval do
        bar :baz do
          foo :qux
          foo :quxx
        end
        foo :foo
      end
    end

    subject { dsl.finalize }

    it { is_expected.to be_kind_of AbstractMapper::Branch }

    it "is optimized" do
      expect(subject.inspect)
        .to eql "<Root [<Bar(:baz) [<Foo([:qux, :quxx])>]>, <Foo(:foo)>]>"
    end

  end # describe #finalize

  describe "#respond_to?" do

    subject { dsl.respond_to? :anything }
    it { is_expected.to eql true }

  end # describe #respond_to?

  describe ".inherited" do

    let(:subklass) { Class.new(dsl) }
    subject { subklass.settings }

    it { is_expected.to eql dsl.settings }

  end # describe .inherited

end # describe AbstractMapper::DSL

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
abstract_mapper-0.0.1 spec/unit/abstract_mapper/dsl_spec.rb