spec/rake/funnel/support/internal/instantiate_symbol_spec.rb in rake-funnel-0.3.2.pre vs spec/rake/funnel/support/internal/instantiate_symbol_spec.rb in rake-funnel-0.4.0.pre
- old
+ new
@@ -1,183 +1,182 @@
-describe Rake::Funnel::Support::InstantiateSymbol do
- module Creatable
- class One
- end
-
- class Two
- end
-
- class Three
- end
- end
-
- class ExplicitModuleDefinition
- include Rake::Funnel::Support::InstantiateSymbol
- instantiate Creatable
-
- class Nested
- end
- end
-
- class ImplicitModuleDefinition
- include Rake::Funnel::Support::InstantiateSymbol
-
- class Nested
- end
- end
-
- describe 'module methods' do
- subject {
- ExplicitModuleDefinition.new
- }
-
- describe 'instance methods' do
- it 'should not be public' do
- expect(subject).not_to respond_to(:create)
- expect(subject).not_to respond_to(:available)
- end
- end
-
- describe 'class methods' do
- it 'should not be public' do
- expect(subject.class).not_to respond_to(:instantiate)
- end
- end
- end
-
- describe 'inspection' do
- context 'implicit module' do
- subject {
- ImplicitModuleDefinition.new
- }
-
- it 'should yield constants in self' do
- expect(subject.send(:available)).to eq([:ClassMethods, :Nested])
- end
- end
-
- context 'explicit module' do
- subject {
- ExplicitModuleDefinition.new
- }
-
- it 'should yield sorted constants in module' do
- expect(subject.send(:available)).to eq([:One, :Three, :Two])
- end
- end
-
- context 'multiple uses' do
- subject {
- [
- ExplicitModuleDefinition.new,
- ImplicitModuleDefinition.new
- ]
- }
-
- it 'should not overlap' do
- first = subject[0].send(:available)
- second = subject[1].send(:available)
-
- expect(first).not_to include(second)
- end
- end
- end
-
- describe 'instantiation' do
- subject {
- ExplicitModuleDefinition.new
- }
-
- context 'with instance' do
- it 'should return instance' do
- instance = Object.new
-
- expect(subject.send(:create, instance)).to eq(instance)
- end
- end
-
-
- context 'with nil' do
- it 'should return nil' do
- expect(subject.send(:create, nil)).to eq(nil)
- end
- end
-
- context 'symbol not defined' do
- it 'should fail' do
- expect { subject.send(:create, :does_not_exist) }.to raise_error 'Unknown type to instantiate: :does_not_exist. Available types are: [:One, :Three, :Two]'
- end
- end
-
- context 'instantiation fails' do
- class WillFail
- include Rake::Funnel::Support::InstantiateSymbol
-
- class Failure
- def initialize
- raise "BAM!"
- end
- end
- end
-
- subject {
- WillFail.new
- }
-
- it 'should fail' do
- expect { subject.send(:create, :Failure) }.to raise_error "BAM!"
- end
- end
-
- context 'instantiation succeeds' do
- it 'should return instance' do
- expect(subject.send(:create, :One)).to be_an_instance_of(Creatable::One)
- end
- end
-
- describe 'args' do
- module CreatableWithArgs
- class None
- def initialize
- end
- end
-
- class Single
- def initialize(arg)
- end
- end
-
- class Multiple
- def initialize(arg1, arg2)
- end
- end
- end
-
- class WithArgs
- include Rake::Funnel::Support::InstantiateSymbol
- instantiate CreatableWithArgs
- end
-
- subject {
- WithArgs.new
- }
-
- context 'no argument' do
- it 'should not pass arg' do
- expect(subject.send(:create, :None)).to be_an_instance_of(CreatableWithArgs::None)
- end
- end
-
- context 'single argument' do
- it 'should pass arg' do
- expect(subject.send(:create, :Single, 1)).to be_an_instance_of(CreatableWithArgs::Single)
- end
- end
-
- context 'multiple argument' do
- it 'should pass args' do
- expect(subject.send(:create, :Multiple, 1, 2)).to be_an_instance_of(CreatableWithArgs::Multiple)
- end
- end
- end
- end
-end
+describe Rake::Funnel::Support::InstantiateSymbol do
+ module Creatable
+ class One
+ end
+
+ class Two
+ end
+
+ class Three
+ end
+ end
+
+ class ExplicitModuleDefinition
+ include Rake::Funnel::Support::InstantiateSymbol
+ instantiate Creatable
+
+ class Nested
+ end
+ end
+
+ class ImplicitModuleDefinition
+ include Rake::Funnel::Support::InstantiateSymbol
+
+ class Nested
+ end
+ end
+
+ describe 'module methods' do
+ subject {
+ ExplicitModuleDefinition.new
+ }
+
+ describe 'instance methods' do
+ it 'should not be public' do
+ expect(subject).not_to respond_to(:create)
+ expect(subject).not_to respond_to(:available)
+ end
+ end
+
+ describe 'class methods' do
+ it 'should not be public' do
+ expect(subject.class).not_to respond_to(:instantiate)
+ end
+ end
+ end
+
+ describe 'inspection' do
+ context 'implicit module' do
+ subject {
+ ImplicitModuleDefinition.new
+ }
+
+ it 'should yield constants in self' do
+ expect(subject.send(:available)).to eq([:ClassMethods, :Nested])
+ end
+ end
+
+ context 'explicit module' do
+ subject {
+ ExplicitModuleDefinition.new
+ }
+
+ it 'should yield sorted constants in module' do
+ expect(subject.send(:available)).to eq([:One, :Three, :Two])
+ end
+ end
+
+ context 'multiple uses' do
+ subject {
+ [
+ ExplicitModuleDefinition.new,
+ ImplicitModuleDefinition.new
+ ]
+ }
+
+ it 'should not overlap' do
+ first = subject[0].send(:available)
+ second = subject[1].send(:available)
+
+ expect(first).not_to include(second)
+ end
+ end
+ end
+
+ describe 'instantiation' do
+ subject {
+ ExplicitModuleDefinition.new
+ }
+
+ context 'with instance' do
+ it 'should return instance' do
+ instance = Object.new
+
+ expect(subject.send(:create, instance)).to eq(instance)
+ end
+ end
+
+ context 'with nil' do
+ it 'should return nil' do
+ expect(subject.send(:create, nil)).to eq(nil)
+ end
+ end
+
+ context 'symbol not defined' do
+ it 'should fail' do
+ expect { subject.send(:create, :does_not_exist) }.to raise_error 'Unknown type to instantiate: :does_not_exist. Available types are: [:One, :Three, :Two]'
+ end
+ end
+
+ context 'instantiation fails' do
+ class WillFail
+ include Rake::Funnel::Support::InstantiateSymbol
+
+ class Failure
+ def initialize
+ fail 'BAM!'
+ end
+ end
+ end
+
+ subject {
+ WillFail.new
+ }
+
+ it 'should fail' do
+ expect { subject.send(:create, :Failure) }.to raise_error 'BAM!'
+ end
+ end
+
+ context 'instantiation succeeds' do
+ it 'should return instance' do
+ expect(subject.send(:create, :One)).to be_an_instance_of(Creatable::One)
+ end
+ end
+
+ describe 'args' do
+ module CreatableWithArgs
+ class None
+ def initialize
+ end
+ end
+
+ class Single
+ def initialize(_arg)
+ end
+ end
+
+ class Multiple
+ def initialize(_arg1, _arg2)
+ end
+ end
+ end
+
+ class WithArgs
+ include Rake::Funnel::Support::InstantiateSymbol
+ instantiate CreatableWithArgs
+ end
+
+ subject {
+ WithArgs.new
+ }
+
+ context 'no argument' do
+ it 'should not pass arg' do
+ expect(subject.send(:create, :None)).to be_an_instance_of(CreatableWithArgs::None)
+ end
+ end
+
+ context 'single argument' do
+ it 'should pass arg' do
+ expect(subject.send(:create, :Single, 1)).to be_an_instance_of(CreatableWithArgs::Single)
+ end
+ end
+
+ context 'multiple argument' do
+ it 'should pass args' do
+ expect(subject.send(:create, :Multiple, 1, 2)).to be_an_instance_of(CreatableWithArgs::Multiple)
+ end
+ end
+ end
+ end
+end