service_container 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/di.rb +43 -0
- metadata +44 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 4367bca35ecb50760faf9afe65f82504a3f1e61f
|
4
|
+
data.tar.gz: f116ed953eb79109b65d0611365af49fee4b38f8
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2490f9922ceecd85073ba8cd52d260b2fde4bf64d3ea6e9d3f29d5eee966fd9d8809f4b0e1712ea9a9da4e4086e5c117b58ef634dfb492f17d024cc0b4a11bde
|
7
|
+
data.tar.gz: c3a8e0fade9428ce517b8afe9f978e4c0b7c369930869b7aa39d287e98af9787dfdd614224ef0e40a37f16eee5153be3c0bfa01ec991bb02321932793acab4d4
|
data/lib/di.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
module DI
|
2
|
+
# ServiceContainer is used for registering services.
|
3
|
+
# It is also where the objects are stored.
|
4
|
+
#
|
5
|
+
# You may register a service by providing a name and a block used to create the service.
|
6
|
+
# i.e. set(:your_service_name) {...} method.
|
7
|
+
#
|
8
|
+
# Services may be retrieved by asking for them by name
|
9
|
+
# i.e get(:your_service_name) method.
|
10
|
+
#
|
11
|
+
class ServiceContainer
|
12
|
+
# Thrown when a service cannot be located by name.
|
13
|
+
MissingServiceError = Class.new(StandardError)
|
14
|
+
|
15
|
+
# Thrown when a duplicate service is registered.
|
16
|
+
DuplicateServiceError = Class.new(StandardError)
|
17
|
+
|
18
|
+
def initialize
|
19
|
+
@services = {}
|
20
|
+
end
|
21
|
+
|
22
|
+
# Registers a service named +name+. The +block+ will be used to
|
23
|
+
# create the service on demand. It is recommended that symbols be
|
24
|
+
# used as the name of a service.
|
25
|
+
def set(name, &block)
|
26
|
+
if @services[name]
|
27
|
+
fail DuplicateServiceError, "A service already exists with name '#{name}'"
|
28
|
+
end
|
29
|
+
@services[name] = block
|
30
|
+
end
|
31
|
+
|
32
|
+
def get(name)
|
33
|
+
service_block(name).call(self)
|
34
|
+
end
|
35
|
+
|
36
|
+
# Return the block that creates the named service. Throw an
|
37
|
+
# exception if no service creation block of the given name can be
|
38
|
+
# found in the container
|
39
|
+
def service_block(name)
|
40
|
+
@services[name] || fail(MissingServiceError, "No service is registered with the name '#{name}'")
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
metadata
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: service_container
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.5.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Chanaka Sandaruwan
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-07-20 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: A small dependendency injection container
|
14
|
+
email: chanakasan@gmail.com
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- lib/di.rb
|
20
|
+
homepage: https://github.com/chanakasan/ruby-service_container
|
21
|
+
licenses:
|
22
|
+
- Apache License, Version 2.0
|
23
|
+
metadata: {}
|
24
|
+
post_install_message:
|
25
|
+
rdoc_options: []
|
26
|
+
require_paths:
|
27
|
+
- lib
|
28
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
29
|
+
requirements:
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
34
|
+
requirements:
|
35
|
+
- - ">="
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
requirements: []
|
39
|
+
rubyforge_project:
|
40
|
+
rubygems_version: 2.2.3
|
41
|
+
signing_key:
|
42
|
+
specification_version: 4
|
43
|
+
summary: A light-weight IOC container
|
44
|
+
test_files: []
|