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 +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
|