chickadee 6.0.3 → 6.0.5

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: a85851be3f9c855878761477fc8a2cb63b4274f7
4
- data.tar.gz: 1f15807b90b107afd3aa9fac925398b35008fb47
3
+ metadata.gz: 883fe7efbded160bb722acc23475ad409e469d96
4
+ data.tar.gz: d274eb18c304b9a097a13a7f42905a13ad4b4842
5
5
  SHA512:
6
- metadata.gz: 269a2c7443bf7f111a4746400b430f43135237e5fb255dc8beb19ecd15ef61f1ac5141aac13251713b92cc90c4d859bcc0f7b403b48a79899d03402e9b623f16
7
- data.tar.gz: 55b8e051e85847266ca4879163b0534617e09e54e34b890bc8a141c8d0286a981c9bc0de69687635edaee00285b3a0185419b6f165fa31d3c31fd12380a00487
6
+ metadata.gz: bb75f18ee45cf9ffab735300d67fe2b76490a65cfbd85277d03b4587b429f3e065d93bbfc746509e8e26fdc5600581f53fff6d6e648332c394bcd61066bc0f43
7
+ data.tar.gz: 6db2a0e20e5b34ac3246fe669c9ce145342714f1d7094dc994067616e509db9c6f35b72c18575967709c73e39cc7ea92c59dd75f54828f1234de6e2c0101ec11
data/chickadee.gemspec CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_dependency "ioc", "~> 2.1.0"
21
+ spec.add_dependency "ioc", "~> 2.2.0"
22
22
 
23
23
  spec.add_development_dependency "bundler", "~> 1.3"
24
24
  spec.add_development_dependency "rake"
data/lib/chickadee.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  require 'chickadee/version'
2
- require 'chickadee/application'
2
+ require 'chickadee/container'
3
3
 
4
4
  module Chickadee
5
5
  end
@@ -0,0 +1,35 @@
1
+ require 'ioc'
2
+
3
+ module Chickadee
4
+ class Container < ::IOC::Container
5
+ def register_handler(*args)
6
+ auto_register(*args)
7
+ end
8
+
9
+ def auto_register(klass)
10
+ register(
11
+ underscore(demodulize(klass.name)).to_sym,
12
+ klass
13
+ )
14
+ end
15
+
16
+ def resolve_handler_for(request)
17
+ resolve(underscore(demodulize("#{request.class.name}Handler")).to_sym)
18
+ end
19
+
20
+ private
21
+
22
+ def underscore(str)
23
+ str
24
+ .gsub(/::/, '/')
25
+ .gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
26
+ .gsub(/([a-z\d])([A-Z])/,'\1_\2')
27
+ .tr("-", "_")
28
+ .downcase
29
+ end
30
+
31
+ def demodulize(constant_name)
32
+ constant_name.split('::').last
33
+ end
34
+ end
35
+ end
@@ -1,3 +1,3 @@
1
1
  module Chickadee
2
- VERSION = "6.0.3"
2
+ VERSION = "6.0.5"
3
3
  end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+ require 'chickadee/container'
3
+
4
+ describe Chickadee::Container do
5
+ describe '#auto_register' do
6
+ it 'registers class using class name' do
7
+ class TestClass; end
8
+ container = Chickadee::Container.new
9
+ container.auto_register(TestClass)
10
+ container.resolve(:test_class).wont_be_nil
11
+ end
12
+ end
13
+
14
+ describe '#register_handler' do
15
+ it 'registers handler using class name' do
16
+ class TestRequestHandler; end
17
+ container = Chickadee::Container.new
18
+ container.auto_register(TestRequestHandler)
19
+ container.resolve(:test_request_handler).wont_be_nil
20
+ end
21
+ end
22
+
23
+ describe '#resolve_handler_for' do
24
+ it 'registers handler using class name' do
25
+ class TestRequest; end
26
+ class TestRequestHandler; end
27
+ container = Chickadee::Container.new
28
+ request = TestRequest.new
29
+ container.register(:test_request_handler, TestRequestHandler)
30
+ container.resolve_handler_for(request).must_be_instance_of(TestRequestHandler)
31
+ end
32
+ end
33
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chickadee
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.0.3
4
+ version: 6.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Erik Lott
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 2.1.0
19
+ version: 2.2.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 2.1.0
26
+ version: 2.2.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -81,18 +81,10 @@ files:
81
81
  - Rakefile
82
82
  - chickadee.gemspec
83
83
  - lib/chickadee.rb
84
- - lib/chickadee/application.rb
85
- - lib/chickadee/application/block_installer.rb
86
- - lib/chickadee/application/bootstrapper.rb
87
- - lib/chickadee/application/container.rb
88
- - lib/chickadee/exceptions.rb
89
- - lib/chickadee/utils/string_inflections.rb
84
+ - lib/chickadee/container.rb
90
85
  - lib/chickadee/version.rb
91
- - spec/application/block_installer_spec.rb
92
- - spec/application/bootstrapper_spec.rb
93
- - spec/application_spec.rb
86
+ - spec/container_spec.rb
94
87
  - spec/spec_helper.rb
95
- - spec/utils/string_inflections_spec.rb
96
88
  homepage: ''
97
89
  licenses:
98
90
  - MIT
@@ -118,8 +110,5 @@ signing_key:
118
110
  specification_version: 4
119
111
  summary: Lightweight command library
120
112
  test_files:
121
- - spec/application/block_installer_spec.rb
122
- - spec/application/bootstrapper_spec.rb
123
- - spec/application_spec.rb
113
+ - spec/container_spec.rb
124
114
  - spec/spec_helper.rb
125
- - spec/utils/string_inflections_spec.rb
@@ -1,29 +0,0 @@
1
- require 'chickadee/application/container'
2
- require 'chickadee/application/bootstrapper'
3
- require 'chickadee/application/block_installer'
4
- require 'chickadee/utils/string_inflections'
5
-
6
- module Chickadee
7
- class Application
8
- def initialize(*installers, &block)
9
- installers = [*installers]
10
- installers << BlockInstaller.new(&block) if block_given?
11
- @bootstrapper = Bootstrapper.new(Container, *installers)
12
- end
13
-
14
- def handle(request)
15
- handler_registry_name = StringInflections.underscore(StringInflections.demodulize("#{request.class.name}Handler")).to_sym
16
- @bootstrapper
17
- .new_bootstrap_container
18
- .resolve(handler_registry_name)
19
- .handle(request)
20
- end
21
-
22
- def queue(request)
23
- @bootstrapper
24
- .new_bootstrap_container
25
- .resolve(:request_queue)
26
- .queue(request)
27
- end
28
- end
29
- end
@@ -1,11 +0,0 @@
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
@@ -1,12 +0,0 @@
1
- module Chickadee
2
- class Bootstrapper
3
- def initialize(container_class, *installers)
4
- @container_class = container_class
5
- @installers = installers
6
- end
7
-
8
- def new_bootstrap_container
9
- @container_class.install(*@installers)
10
- end
11
- end
12
- end
@@ -1,15 +0,0 @@
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,4 +0,0 @@
1
- module Chickadee
2
- class ChickadeeError < StandardError; end
3
- class RoutingError < StandardError; end
4
- end
@@ -1,20 +0,0 @@
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
@@ -1,20 +0,0 @@
1
- require 'spec_helper'
2
- require 'chickadee/application/block_installer'
3
- require 'chickadee/application/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
@@ -1,38 +0,0 @@
1
- require 'spec_helper'
2
- require 'chickadee/application/bootstrapper'
3
- require 'chickadee/application/container'
4
- require 'chickadee/application/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
@@ -1,23 +0,0 @@
1
- require 'spec_helper'
2
- require 'chickadee/application'
3
-
4
- describe Chickadee::Application do
5
- it 'can handle a request' do
6
- class RequestHandler
7
- def handle(request)
8
- request.is_success = true
9
- end
10
- end
11
-
12
- class Request
13
- attr_accessor :is_success
14
- end
15
-
16
- app = Chickadee::Application.new do
17
- register_handler(RequestHandler)
18
- end
19
- request = Request.new
20
- app.handle(request)
21
- request.is_success.must_equal(true)
22
- end
23
- end
@@ -1,30 +0,0 @@
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