chickadee 5.0.1 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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