chickadee 6.0.1 → 6.0.2
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/lib/chickadee/{block_installer.rb → application/block_installer.rb} +1 -3
- data/lib/chickadee/{bootstrapper.rb → application/bootstrapper.rb} +3 -3
- data/lib/chickadee/application/container.rb +15 -0
- data/lib/chickadee/application.rb +14 -23
- data/lib/chickadee/exceptions.rb +1 -0
- data/lib/chickadee/utils/string_inflections.rb +20 -0
- data/lib/chickadee/version.rb +1 -1
- data/spec/{block_installer_spec.rb → application/block_installer_spec.rb} +2 -2
- data/spec/{bootstrapper_spec.rb → application/bootstrapper_spec.rb} +3 -3
- data/spec/application_spec.rb +15 -37
- data/spec/utils/string_inflections_spec.rb +30 -0
- metadata +12 -9
- data/lib/chickadee/container.rb +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9ae3ac8453e16a736b621287feb437dffcd6f9f5
|
4
|
+
data.tar.gz: 346b0090f2fd811fbfba8eab282695f97ec743c1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7a678a42ca376f9555ad31c3a1672f82ad636c97095997dc4912dcb4ae26ce71414709a47798943a626a1735462c445e1f609e6d0220592598aaefc1e93db4ed
|
7
|
+
data.tar.gz: 166b7822c624fbbe1b6acc4f100310c7606c00db771fcbe7ee778c2f923583634a4b0e4e8f2f3243cc8ded7bff491bc9cd5d65b7dc982fccaa32560cdb5ebe23
|
@@ -1,12 +1,12 @@
|
|
1
1
|
module Chickadee
|
2
2
|
class Bootstrapper
|
3
|
-
def initialize(container_class,
|
3
|
+
def initialize(container_class, *installers)
|
4
4
|
@container_class = container_class
|
5
|
-
@
|
5
|
+
@installers = installers
|
6
6
|
end
|
7
7
|
|
8
8
|
def new_bootstrap_container
|
9
|
-
@container_class.install(
|
9
|
+
@container_class.install(*@installers)
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'ioc'
|
2
|
+
require 'chickadee/utils/string_inflections'
|
3
|
+
|
4
|
+
module Chickadee
|
5
|
+
class Container < ::IOC::Container
|
6
|
+
def register_service(service_name, service_object)
|
7
|
+
register(service_name, service_object, :as => :instance)
|
8
|
+
end
|
9
|
+
|
10
|
+
def register_handler(klass)
|
11
|
+
name = StringInflections.underscore(StringInflections.demodulize(klass.name)).to_sym
|
12
|
+
register(name, klass)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -1,33 +1,31 @@
|
|
1
|
-
require 'chickadee/container'
|
2
|
-
require 'chickadee/bootstrapper'
|
3
|
-
require 'chickadee/block_installer'
|
1
|
+
require 'chickadee/application/container'
|
2
|
+
require 'chickadee/application/bootstrapper'
|
3
|
+
require 'chickadee/application/block_installer'
|
4
|
+
require 'chickadee/utils/string_inflections'
|
4
5
|
|
5
6
|
module Chickadee
|
6
7
|
class Application
|
7
|
-
def self.
|
8
|
-
@
|
8
|
+
def self.install(&block)
|
9
|
+
@installer = BlockInstaller.new(&block)
|
9
10
|
end
|
10
11
|
|
11
|
-
def self.
|
12
|
-
|
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}'")
|
12
|
+
def self.installer
|
13
|
+
@installer
|
19
14
|
end
|
20
15
|
|
21
16
|
def initialize(&block)
|
22
|
-
|
17
|
+
installers = []
|
18
|
+
installers << self.class.installer if self.class.installer
|
19
|
+
installers << BlockInstaller.new(&block) if block_given?
|
20
|
+
@bootstrapper = Bootstrapper.new(Container, *installers)
|
23
21
|
end
|
24
22
|
|
25
23
|
def handle(request)
|
24
|
+
handler_registry_name = StringInflections.underscore(StringInflections.demodulize("#{request.class.name}Handler")).to_sym
|
26
25
|
@bootstrapper
|
27
26
|
.new_bootstrap_container
|
28
|
-
.
|
27
|
+
.resolve(handler_registry_name)
|
29
28
|
.handle(request)
|
30
|
-
nil
|
31
29
|
end
|
32
30
|
|
33
31
|
def queue(request)
|
@@ -35,13 +33,6 @@ module Chickadee
|
|
35
33
|
.new_bootstrap_container
|
36
34
|
.resolve(:request_queue)
|
37
35
|
.queue(request)
|
38
|
-
nil
|
39
|
-
end
|
40
|
-
|
41
|
-
private
|
42
|
-
|
43
|
-
def handler_class_for(request)
|
44
|
-
self.class.handler_class_for(request)
|
45
36
|
end
|
46
37
|
end
|
47
38
|
end
|
data/lib/chickadee/exceptions.rb
CHANGED
@@ -0,0 +1,20 @@
|
|
1
|
+
module Chickadee
|
2
|
+
module StringInflections
|
3
|
+
def self.underscore(str)
|
4
|
+
str
|
5
|
+
.gsub(/::/, '/')
|
6
|
+
.gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
|
7
|
+
.gsub(/([a-z\d])([A-Z])/,'\1_\2')
|
8
|
+
.tr("-", "_")
|
9
|
+
.downcase
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.deconstantize(constant_name)
|
13
|
+
constant_name.split( '::' )[0,constant_name.split( '::' ).length-1].join('::')
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.demodulize(constant_name)
|
17
|
+
constant_name.split('::').last
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/chickadee/version.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require 'chickadee/bootstrapper'
|
3
|
-
require 'chickadee/container'
|
4
|
-
require 'chickadee/block_installer'
|
2
|
+
require 'chickadee/application/bootstrapper'
|
3
|
+
require 'chickadee/application/container'
|
4
|
+
require 'chickadee/application/block_installer'
|
5
5
|
|
6
6
|
describe Chickadee::Bootstrapper do
|
7
7
|
describe '#new_bootstrap_container' do
|
data/spec/application_spec.rb
CHANGED
@@ -2,48 +2,26 @@ require 'spec_helper'
|
|
2
2
|
require 'chickadee/application'
|
3
3
|
|
4
4
|
describe Chickadee::Application do
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
app_class = Class.new(Chickadee::Application)
|
10
|
-
app_class.map(request_class => handler_class)
|
11
|
-
app_class.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 do
|
19
|
-
attr_accessor :output
|
20
|
-
end
|
21
|
-
handler_class = Class.new do
|
22
|
-
def handle(request)
|
23
|
-
request.output = "I have handled the request"
|
24
|
-
end
|
25
|
-
end
|
26
|
-
app_class = Class.new(Chickadee::Application)
|
27
|
-
app_class.map(request_class => handler_class)
|
28
|
-
request = request_class.new
|
29
|
-
app = app_class.new
|
30
|
-
app.handle(request)
|
31
|
-
request.output.must_equal('I have handled the request')
|
5
|
+
it 'can handle a request' do
|
6
|
+
class RequestHandler
|
7
|
+
def handle(request)
|
8
|
+
request.is_success = true
|
32
9
|
end
|
33
10
|
end
|
34
11
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
handler_class = Class.new
|
39
|
-
app_class = Class.new(Chickadee::Application)
|
40
|
-
request = request_class.new
|
41
|
-
app = app_class.new
|
12
|
+
class Request
|
13
|
+
attr_accessor :is_success
|
14
|
+
end
|
42
15
|
|
43
|
-
|
44
|
-
|
45
|
-
|
16
|
+
class App < Chickadee::Application
|
17
|
+
install do
|
18
|
+
register_handler(RequestHandler)
|
46
19
|
end
|
47
20
|
end
|
21
|
+
|
22
|
+
app = App.new
|
23
|
+
request = Request.new
|
24
|
+
app.handle(request)
|
25
|
+
request.is_success.must_equal(true)
|
48
26
|
end
|
49
27
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'chickadee/utils/string_inflections'
|
3
|
+
|
4
|
+
describe Chickadee::StringInflections do
|
5
|
+
describe '#underscore' do
|
6
|
+
it 'changes string to underscore' do
|
7
|
+
inflector.underscore("ThisIsAString").must_equal('this_is_a_string')
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'changes module notation to slash' do
|
11
|
+
inflector.underscore("ThisIs::AString").must_equal('this_is/a_string')
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '#deconstantize' do
|
16
|
+
it 'gets namespace for current constant' do
|
17
|
+
inflector.deconstantize('A::B::C').must_equal('A::B')
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe '#demodulize' do
|
22
|
+
it 'gets class name' do
|
23
|
+
inflector.demodulize('A::B::C').must_equal('C')
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def inflector
|
28
|
+
Chickadee::StringInflections
|
29
|
+
end
|
30
|
+
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: 6.0.
|
4
|
+
version: 6.0.2
|
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-04-
|
11
|
+
date: 2014-04-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ioc
|
@@ -82,15 +82,17 @@ files:
|
|
82
82
|
- chickadee.gemspec
|
83
83
|
- lib/chickadee.rb
|
84
84
|
- lib/chickadee/application.rb
|
85
|
-
- lib/chickadee/block_installer.rb
|
86
|
-
- lib/chickadee/bootstrapper.rb
|
87
|
-
- lib/chickadee/container.rb
|
85
|
+
- lib/chickadee/application/block_installer.rb
|
86
|
+
- lib/chickadee/application/bootstrapper.rb
|
87
|
+
- lib/chickadee/application/container.rb
|
88
88
|
- lib/chickadee/exceptions.rb
|
89
|
+
- lib/chickadee/utils/string_inflections.rb
|
89
90
|
- lib/chickadee/version.rb
|
91
|
+
- spec/application/block_installer_spec.rb
|
92
|
+
- spec/application/bootstrapper_spec.rb
|
90
93
|
- spec/application_spec.rb
|
91
|
-
- spec/block_installer_spec.rb
|
92
|
-
- spec/bootstrapper_spec.rb
|
93
94
|
- spec/spec_helper.rb
|
95
|
+
- spec/utils/string_inflections_spec.rb
|
94
96
|
homepage: ''
|
95
97
|
licenses:
|
96
98
|
- MIT
|
@@ -116,7 +118,8 @@ signing_key:
|
|
116
118
|
specification_version: 4
|
117
119
|
summary: Lightweight command library
|
118
120
|
test_files:
|
121
|
+
- spec/application/block_installer_spec.rb
|
122
|
+
- spec/application/bootstrapper_spec.rb
|
119
123
|
- spec/application_spec.rb
|
120
|
-
- spec/block_installer_spec.rb
|
121
|
-
- spec/bootstrapper_spec.rb
|
122
124
|
- spec/spec_helper.rb
|
125
|
+
- spec/utils/string_inflections_spec.rb
|