Commit 86c3ee2
Changed files (2)
lib
spank
spec
unit
lib/spank/ioc.rb
@@ -1,11 +1,18 @@
module Spank
class IOC
- def self.bind_to(container)
- @@container = container
- end
+ class << self
+ def bind_to(container)
+ @@container = container
+ end
+
+ def resolve(symbol)
+ raise ContainerError.new unless class_variable_defined?(:@@container)
+ @@container.resolve(symbol)
+ end
- def self.resolve(symbol)
- @@container.resolve(symbol)
+ def unbind
+ remove_class_variable(:@@container) if class_variable_defined?(:@@container)
+ end
end
end
end
spec/unit/ioc_spec.rb
@@ -1,6 +1,10 @@
require "spec_helper"
describe Spank::IOC do
+ after :each do
+ Spank::IOC.unbind
+ end
+
context "when bound to a container" do
let(:container) { double }
let(:component) { double }
@@ -12,8 +16,14 @@ describe Spank::IOC do
let(:result) { Spank::IOC.resolve(:idbconnection) }
- it "should resove items from that container" do
+ it "resolves the item from the container" do
result.should == component
end
end
+
+ context "when nothing is bound" do
+ it "raises a meaningful exception" do
+ expect { Spank::IOC.resolve(:food) }.to raise_error(Spank::ContainerError)
+ end
+ end
end