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 +4 -4
- data/chickadee.gemspec +2 -2
- data/lib/chickadee/application.rb +45 -0
- data/lib/chickadee/block_installer.rb +13 -0
- data/lib/chickadee/bootstrapper.rb +12 -0
- data/lib/chickadee/container.rb +7 -1
- data/lib/chickadee/version.rb +1 -1
- data/lib/chickadee.rb +2 -5
- data/spec/application_spec.rb +51 -0
- data/spec/block_installer_spec.rb +20 -0
- data/spec/bootstrapper_spec.rb +38 -0
- metadata +13 -7
- data/lib/chickadee/domain/repository.rb +0 -35
- data/spec/domain/repository_spec.rb +0 -48
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5346abec5cf88cbf41caed36032cce6c236937c0
|
4
|
+
data.tar.gz: 061c5644687a02958f07caaa01d5562dd5f619ba
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
12
|
-
spec.summary = %q{Lightweight
|
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
|
data/lib/chickadee/container.rb
CHANGED
data/lib/chickadee/version.rb
CHANGED
data/lib/chickadee.rb
CHANGED
@@ -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:
|
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-
|
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
|
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/
|
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
|
117
|
+
summary: Lightweight command library
|
114
118
|
test_files:
|
115
|
-
- spec/
|
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
|