Sha256: 7c89dd063cdfb98f2bf8f86ca4ecbdb1105e784ab19cdc23c73ddfa47798a6ee

Contents?: true

Size: 1.7 KB

Versions: 5

Compression:

Stored size: 1.7 KB

Contents

require "metamorpher/terms/literal"

module Metamorpher
  module Terms
    shared_examples "a derivation builder" do
      describe "derivation!" do
        it "should create an instance of Derivation" do
          built = subject.derivation!(:method) do |method|
            Literal.new(name: (method.name.to_s + "s").to_sym)
          end

          expect(built.base).to eq([:method])
          expect(built.derivation.call(Literal.new(name: :dog))).to eq(Literal.new(name: :dogs))
        end

        it "should capture all arguments as the base" do
          built = subject.derivation!(:key, :value)

          expect(built.base).to eq([:key, :value])
        end

        it "should derive the first argument if no block is passed" do
          built = subject.derivation!(:key, :value)

          derived = built.derivation.call(
            Literal.new(name: :dog),
            Literal.new(name: :lassie)
          )

          expect(derived).to eq(Literal.new(name: :dog))
        end

        it "should provide a builder for use in the block" do
          built = subject.derivation!(:key, :value) do |key, value, builder|
            builder.pair(key, value)
          end

          derived = built.derivation.call(
            Literal.new(name: :dog),
            Literal.new(name: :lassie)
          )

          paired = Literal.new(
            name: :pair,
            children: [
              Literal.new(name: :dog),
              Literal.new(name: :lassie)
            ]
          )

          expect(derived).to eq(paired)
        end

        it "should raise if no arguments are passed" do
          expect { subject.derivation! { nil } }.to raise_error(ArgumentError)
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
metamorpher-0.2.6 spec/support/shared_examples/shared_examples_for_derivation_builders.rb
metamorpher-0.2.5 spec/support/shared_examples/shared_examples_for_derivation_builders.rb
metamorpher-0.2.4 spec/support/shared_examples/shared_examples_for_derivation_builders.rb
metamorpher-0.2.3 spec/support/shared_examples/shared_examples_for_derivation_builders.rb
metamorpher-0.2.2 spec/support/shared_examples/shared_examples_for_derivation_builders.rb