Sha256: a58da58227be0e136b4c8c79777ff2681e083891d709f8882dfcf92215b12419

Contents?: true

Size: 1.58 KB

Versions: 1

Compression:

Stored size: 1.58 KB

Contents

require 'spec_helper'

module Test
  module Hunter
    class Beast; end
    class Bear < Beast; end
    class Lion < Beast; end
    class Grizly < Bear; end
    class Argumented
      def initialize( arg )
        @arg = arg
      end
      attr_reader :arg
    end
    class Implicit; end

    class Zoo
      include Scorpion::King

      feed_on do
        bear Bear
      end
    end
  end
end

describe Scorpion::Hunter do

  let( :hunter ) do
    Scorpion::Hunter.new do
      hunt_for Test::Hunter::Bear
      hunt_for Test::Hunter::Lion, :male
      hunt_for Test::Hunter::Grizly, :female
      hunt_for Test::Hunter::Argumented

      capture Test::Hunter::Lion, :tame
      hunt_for Test::Hunter::Zoo
    end
  end

  it "spawns prey" do
    expect( hunter.hunt! Test::Hunter::Beast ).to be_a Test::Hunter::Bear
  end

  it "spawns a new instance for multiple requests" do
    first = hunter.hunt! Test::Hunter::Beast
    expect( hunter.hunt! Test::Hunter::Beast ).not_to eq first
  end

  it "spawns the same instance for captured prey" do
    first = hunter.hunt_by_traits! Test::Hunter::Beast, :tame
    expect( hunter.hunt_by_traits! Test::Hunter::Beast, :tame ).to be first
  end

  it "injects nested kings" do
    zoo = hunter.hunt! Test::Hunter::Zoo
    expect( zoo.bear ).to be_a Test::Hunter::Bear
  end

  it "accepts arguments that are passed to constructor" do
    obj = hunter.hunt! Test::Hunter::Argumented, :awesome
    expect( obj.arg ).to eq :awesome
  end

  it "implicitly spawns Class contracts" do
    expect( hunter.hunt! Test::Hunter::Implicit ).to be_a Test::Hunter::Implicit
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
scorpion-ioc-0.1.0 spec/lib/scorpion/hunter_spec.rb