Sha256: c03db95a69b583f87673b9dd36ece348577884442ab88a281a7ea5db685b7abf

Contents?: true

Size: 1.97 KB

Versions: 1

Compression:

Stored size: 1.97 KB

Contents

require File.expand_path(File.dirname(__FILE__) + '/spec_helper')

describe "Aspector" do
  it "should work" do
    klass = Class.new do
      def value
        @value ||= []
      end

      def test
        value << "test"
      end

      def do_before
        value << "do_before"
      end

      def do_after result
        value << "do_after"
        result
      end

      def do_around &block
        value << "do_around_before"
        result = block.call
        value << "do_around_after"
        result
      end
    end

    aspector(klass) do
      before :test, :do_before
      after  :test, :do_after
      around :test, :do_around
    end

    obj = klass.new
    obj.test
    obj.value.should == %w"do_before do_around_before test do_around_after do_after"
  end

  it "multiple aspects should work together" do
    klass = Class.new do
      def value
        @value ||= []
      end

      def test
        value << "test"
      end
    end

    aspector(klass) do
      before(:test) { value << 'first_aspect' }
    end

    aspector(klass) do
      before(:test) { value << 'second_aspect' }
    end

    obj = klass.new
    obj.test
    obj.value.should == %w"second_aspect first_aspect test"
  end

  it "treating Aspect as regular class should work" do
    klass = Class.new do
      def value
        @value ||= []
      end

      def test
        value << "test"
      end
    end

    class TestAspect < Aspector::Base
      before(:test) { value << 'before_test' }
    end

    TestAspect.apply(klass)

    obj = klass.new
    obj.test
    obj.value.should == %w"before_test test"
  end

  it "applied multiple times" do
    klass = Class.new do
      def value
        @value ||= []
      end

      def test
        value << "test"
      end
    end

    aspect = Aspector do
      before(:test) { value << 'before_test' }
    end

    aspect.apply(klass)
    aspect.apply(klass)

    obj = klass.new
    obj.test
    obj.value.should == %w"before_test before_test test"
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
aspector-0.7.0 spec/aspector_spec.rb