chickadee 5.0.1 → 6.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 871e65cb068b6e2eb467213a26ea40286830e230
4
- data.tar.gz: f230411964c0057999e89a1c57d31eb7d46c2814
3
+ metadata.gz: 5346abec5cf88cbf41caed36032cce6c236937c0
4
+ data.tar.gz: 061c5644687a02958f07caaa01d5562dd5f619ba
5
5
  SHA512:
6
- metadata.gz: 392759454c5da3fcbd8923c17a303b0cfd8f9491051d67ac2e85ab81a96b6dba1fe43e03128361d1d73ce71366f7e4c94002ec37a165f85544ada8c8617c5cd8
7
- data.tar.gz: 4ebd961899eacc991a7fa985b68b3a936c08146a6e32c89bfecfdd7196a2c095a12c53b34ea2075c1cc12d6db8fe5a61c88ab00ae4c32c34ad281b386dc65194
6
+ metadata.gz: 8355e6886c6e8a68df91c9e9db56e4195124158f0b43824b253db467fb72644612009a90c8819e0fdc9ded3d5f21e67800eb706f99f3b6b1465b625659ee2651
7
+ data.tar.gz: 7b690ffc396bb88187f1bc7a0e76482825fbed8297732f47e5bfe0c93ec7929695dea640c6073eb490715d1065eb4caa1c2593fa176b21507d35e85d80f231c5
data/chickadee.gemspec CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
8
8
  spec.version = Chickadee::VERSION
9
9
  spec.authors = ["Erik Lott"]
10
10
  spec.email = ["erik.lott@evrium.com"]
11
- spec.description = %q{Lightweight domain driven design library}
12
- spec.summary = %q{Lightweight domain driven design library}
11
+ spec.description = %q{Lightweight command library}
12
+ spec.summary = %q{Lightweight command library}
13
13
  spec.homepage = ""
14
14
  spec.license = "MIT"
15
15
 
@@ -0,0 +1,45 @@
1
+ require 'chickadee/container'
2
+ require 'chickadee/bootstrapper'
3
+ require 'chickadee/block_installer'
4
+
5
+ module Chickadee
6
+ class Application
7
+ def self.handler_map
8
+ @handler_map ||= {}
9
+ end
10
+
11
+ def self.map(hash)
12
+ handler_map.update(hash)
13
+ end
14
+
15
+ def self.handler_class_for(request)
16
+ handler_map.fetch(request.class)
17
+ rescue KeyError => e
18
+ raise(ArgumentError, "Unrecognized request class: '#{request.class.name}'")
19
+ end
20
+
21
+ def initialize(&block)
22
+ @bootstrapper = Bootstrapper.new(Container, BlockInstaller.new(&block))
23
+ end
24
+
25
+ def handle(request)
26
+ @bootstrapper
27
+ .new_bootstrap_container
28
+ .resolve_anonymous(handler_class_for(request))
29
+ .handle(request)
30
+ end
31
+
32
+ def queue(request)
33
+ @bootstrapper
34
+ .new_bootstrap_container
35
+ .resolve(:request_queue)
36
+ .queue(request)
37
+ end
38
+
39
+ private
40
+
41
+ def handler_class_for(request)
42
+ self.class.handler_class_for(request)
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,13 @@
1
+ module Chickadee
2
+ class BlockInstaller
3
+ def initialize(&block)
4
+ @block = block
5
+ end
6
+
7
+ def install(c)
8
+ c.instance_eval(&@block) if @block
9
+ end
10
+ end
11
+ end
12
+
13
+
@@ -0,0 +1,12 @@
1
+ module Chickadee
2
+ class Bootstrapper
3
+ def initialize(container_class, installer)
4
+ @container_class = container_class
5
+ @installer = installer
6
+ end
7
+
8
+ def new_bootstrap_container
9
+ @container_class.install(@installer)
10
+ end
11
+ end
12
+ end
@@ -1,3 +1,9 @@
1
+ require 'ioc'
2
+
1
3
  module Chickadee
2
- class Container < ::IOC::Container; end
4
+ class Container < ::IOC::Container
5
+ def register_service(service_name, service_object)
6
+ register(service_name, service_object, :as => :instance)
7
+ end
8
+ end
3
9
  end
@@ -1,3 +1,3 @@
1
1
  module Chickadee
2
- VERSION = "5.0.1"
2
+ VERSION = "6.0.0"
3
3
  end
data/lib/chickadee.rb CHANGED
@@ -1,8 +1,5 @@
1
- require 'ioc'
2
1
  require 'chickadee/version'
3
- require 'chickadee/exceptions'
4
- require 'chickadee/container'
5
- require 'chickadee/domain/repository'
2
+ require 'chickadee/application'
6
3
 
7
4
  module Chickadee
8
- end
5
+ end
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+ require 'chickadee/application'
3
+
4
+ describe Chickadee::Application do
5
+ describe '::handle' do
6
+ it 'can map a request to a handler' do
7
+ request_class = Class.new
8
+ handler_class = Class.new
9
+ klass = Class.new(Chickadee::Application)
10
+ klass.map(request_class => handler_class)
11
+ klass.handler_class_for(request_class.new).must_equal(handler_class)
12
+ end
13
+ end
14
+
15
+ describe '#map' do
16
+ context 'when the request has been mapped' do
17
+ it 'can handle a request' do
18
+ request_class = Class.new
19
+ handler_class = Class.new do
20
+ def handle(request)
21
+ "I have handled the request"
22
+ end
23
+ end
24
+ klass = Class.new(Chickadee::Application)
25
+ klass.map(request_class => handler_class)
26
+ request = request_class.new
27
+ app = klass.new
28
+ app.handle(request).must_equal('I have handled the request')
29
+ end
30
+ end
31
+
32
+ context 'when the request has not been mapped' do
33
+ it 'can handle a request' do
34
+ request_class = Class.new
35
+ handler_class = Class.new do
36
+ def handle(request)
37
+ "I have handled the request"
38
+ end
39
+ end
40
+ klass = Class.new(Chickadee::Application)
41
+ request = request_class.new
42
+
43
+ app = klass.new
44
+
45
+ proc {
46
+ app.handle(request).must_raise(ArgumentError)
47
+ }
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+ require 'chickadee/block_installer'
3
+ require 'chickadee/container'
4
+
5
+ describe Chickadee::BlockInstaller do
6
+ it 'can install from block' do
7
+ service = stub
8
+ installer = Chickadee::BlockInstaller.new do
9
+ register_service(:my_service, service)
10
+ end
11
+ container = Chickadee::Container.install(installer)
12
+ container.resolve(:my_service).must_equal(service)
13
+ end
14
+
15
+ it 'can install without block' do
16
+ service = stub
17
+ installer = Chickadee::BlockInstaller.new
18
+ Chickadee::Container.install(installer)
19
+ end
20
+ end
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+ require 'chickadee/bootstrapper'
3
+ require 'chickadee/container'
4
+ require 'chickadee/block_installer'
5
+
6
+ describe Chickadee::Bootstrapper do
7
+ describe '#new_bootstrap_container' do
8
+ it 'returns container instance' do
9
+ container_class = Chickadee::Container
10
+ installer = Chickadee::BlockInstaller.new
11
+ bootstrapper = Chickadee::Bootstrapper.new(container_class, installer)
12
+
13
+ bootstrapper.new_bootstrap_container.must_be_instance_of(Chickadee::Container)
14
+ end
15
+
16
+ it 'returns new container instance each call' do
17
+ container_class = Chickadee::Container
18
+ installer = Chickadee::BlockInstaller.new
19
+ bootstrapper = Chickadee::Bootstrapper.new(container_class, installer)
20
+
21
+ c1 = bootstrapper.new_bootstrap_container
22
+ c2 = bootstrapper.new_bootstrap_container
23
+ c1.wont_equal(c2)
24
+ end
25
+
26
+ it 'installs container' do
27
+ service = stub
28
+ container_class = Chickadee::Container
29
+ installer = Chickadee::BlockInstaller.new do
30
+ register_service(:my_service, service)
31
+ end
32
+ bootstrapper = Chickadee::Bootstrapper.new(container_class, installer)
33
+ container = bootstrapper.new_bootstrap_container
34
+
35
+ container.resolve(:my_service).must_equal(service)
36
+ end
37
+ end
38
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chickadee
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.1
4
+ version: 6.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Erik Lott
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-11 00:00:00.000000000 Z
11
+ date: 2014-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ioc
@@ -66,7 +66,7 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: 1.0.0
69
- description: Lightweight domain driven design library
69
+ description: Lightweight command library
70
70
  email:
71
71
  - erik.lott@evrium.com
72
72
  executables: []
@@ -81,11 +81,15 @@ files:
81
81
  - Rakefile
82
82
  - chickadee.gemspec
83
83
  - lib/chickadee.rb
84
+ - lib/chickadee/application.rb
85
+ - lib/chickadee/block_installer.rb
86
+ - lib/chickadee/bootstrapper.rb
84
87
  - lib/chickadee/container.rb
85
- - lib/chickadee/domain/repository.rb
86
88
  - lib/chickadee/exceptions.rb
87
89
  - lib/chickadee/version.rb
88
- - spec/domain/repository_spec.rb
90
+ - spec/application_spec.rb
91
+ - spec/block_installer_spec.rb
92
+ - spec/bootstrapper_spec.rb
89
93
  - spec/spec_helper.rb
90
94
  homepage: ''
91
95
  licenses:
@@ -110,7 +114,9 @@ rubyforge_project:
110
114
  rubygems_version: 2.2.2
111
115
  signing_key:
112
116
  specification_version: 4
113
- summary: Lightweight domain driven design library
117
+ summary: Lightweight command library
114
118
  test_files:
115
- - spec/domain/repository_spec.rb
119
+ - spec/application_spec.rb
120
+ - spec/block_installer_spec.rb
121
+ - spec/bootstrapper_spec.rb
116
122
  - spec/spec_helper.rb
@@ -1,35 +0,0 @@
1
- module Chickadee
2
- module Repository
3
- def self.included(base)
4
- base.extend ClassMethods
5
- end
6
-
7
- module ClassMethods
8
- def set_hydrator(klass)
9
- @hydrator = klass
10
- end
11
-
12
- def hydrator
13
- @hydrator
14
- end
15
-
16
- def inherited(subclass)
17
- subclass.set_hydrator(hydrator)
18
- end
19
- end
20
-
21
- private
22
-
23
- def hydrate(rows)
24
- if rows.is_a?(Array)
25
- rows.map{|row| hydrate(row)}
26
- else
27
- hydrator.hydrate(rows)
28
- end
29
- end
30
-
31
- def hydrator
32
- self.class.hydrator || raise(NotImplementedError)
33
- end
34
- end
35
- end
@@ -1,48 +0,0 @@
1
- require 'spec_helper'
2
- require 'chickadee/domain/repository'
3
-
4
- describe Chickadee::Repository do
5
- describe '::set_hydrator' do
6
- it 'assigns hydrator' do
7
- hydrator = stub
8
- klass = define_repository_class
9
- klass.set_hydrator(hydrator)
10
- klass.hydrator.must_equal(hydrator)
11
- end
12
- end
13
-
14
- describe '::hydrator' do
15
- it 'returns hydrator' do
16
- hydrator = stub
17
- klass = define_repository_class
18
- klass.set_hydrator(hydrator)
19
- klass.hydrator.must_equal(hydrator)
20
- end
21
- end
22
-
23
- it 'can inherit hydrator' do
24
- hydrator = stub
25
- class1 = Class.new do
26
- include Chickadee::Repository
27
- set_hydrator(hydrator)
28
- end
29
- class2 = Class.new(class1)
30
- class2.hydrator.must_equal(hydrator)
31
- end
32
-
33
- it 'doesnt share hydrator across classes implementing the module' do
34
- hydrator = stub
35
- class1 = Class.new do
36
- include Chickadee::Repository
37
- set_hydrator(hydrator)
38
- end
39
- class2 = Class.new do
40
- include Chickadee::Repository
41
- end
42
- class2.hydrator.must_be_nil
43
- end
44
-
45
- def define_repository_class
46
- Class.new{include Chickadee::Repository}
47
- end
48
- end