service_container 0.5.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 +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: []
|