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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/di.rb +43 -0
  3. 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: []