dumpling 0.3.1 → 0.3.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/README.md +38 -5
- data/dumpling.gemspec +1 -1
- data/lib/dumpling/container.rb +37 -5
- data/lib/dumpling/registry.rb +10 -0
- data/lib/dumpling/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f385ef8e4373fe02d5a641294ad7cbc0393843db
|
4
|
+
data.tar.gz: e800048ab2616729db0086867caf77ea32ab5be3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b5a86fc3c310dd05bb3c9c4f498126f7b43b293d8296c6a288128923e530ea32a57dc765a8e89ec973f2486af64201f95e755cd196f5cdcc1534ac4e1d1dfc5b
|
7
|
+
data.tar.gz: cea6309abeae32d6d34f133c652071de233b7a1db0ba7270cb36355df96acbf6bde7e1f0d70b14ae650eeefb2c4d609ed45ed4144da01ef50fcdff4cacb3153e
|
data/README.md
CHANGED
@@ -36,6 +36,10 @@ Or install it yourself as:
|
|
36
36
|
|
37
37
|
### Basics
|
38
38
|
|
39
|
+
Use ```instance``` for long-lived objects. ```#get``` returns the same instance at each call
|
40
|
+
|
41
|
+
Use ```class``` for short-lived objects. ```#get``` returns a new instance on every call
|
42
|
+
|
39
43
|
```ruby
|
40
44
|
class UsersRepository
|
41
45
|
attr_writer :logger
|
@@ -52,11 +56,11 @@ Dumpling.configure do
|
|
52
56
|
end
|
53
57
|
end
|
54
58
|
|
55
|
-
# Every time you invoke the #get method you
|
59
|
+
# Every time you invoke the #get method you get a new instance of the #class
|
56
60
|
Dumpling.get(:users_repository) # => #<UsersRepository:0x00000000ebee20>
|
57
61
|
Dumpling.get(:users_repository) # => #<UsersRepository:0x00000000e8a8f0>
|
58
62
|
|
59
|
-
# Every time you invoke the #get method you
|
63
|
+
# Every time you invoke the #get method you get the same predefined #instance
|
60
64
|
Dumpling.get(:logger) # => #<Logger:0x00000000e281a0>
|
61
65
|
Dumpling.get(:logger) # => #<Logger:0x00000000e281a0>
|
62
66
|
```
|
@@ -133,27 +137,56 @@ end
|
|
133
137
|
```
|
134
138
|
|
135
139
|
### Defining abstract services
|
140
|
+
Abstract service cannot be instantiated (accessed outside of the container). Whenever you include an abstract service into a regular service, you inherit its dependencies.
|
136
141
|
|
137
142
|
```ruby
|
138
143
|
container = Dumpling::Container.new
|
139
144
|
container.configure do
|
140
145
|
abstract :repository do |s|
|
141
|
-
s.dependency :logger
|
142
|
-
s.dependency :persistence_adapter
|
146
|
+
s.dependency :logger # => #<Logger:0x00000000e281a0>
|
147
|
+
s.dependency :persistence_adapter # => #<Sequel:0x00000000e281a0>
|
143
148
|
end
|
144
149
|
|
145
150
|
set :users_repository do |s|
|
146
151
|
s.class UsersRepository
|
147
152
|
s.include :repository
|
148
153
|
end
|
154
|
+
end
|
155
|
+
|
156
|
+
container[:users_repository].logger # => #<Logger:0x00000000e281a0>
|
157
|
+
container[:users_repository].persistence_adapter # => #<Sequel:0x00000000e281a0>
|
149
158
|
|
159
|
+
container.configure do
|
150
160
|
set :posts_repository do |s|
|
151
161
|
s.class PostsRepository
|
152
162
|
s.include :repository
|
153
163
|
# overriding dependencies
|
154
|
-
s.dependency :postgres_adapter, attribute: :persistence_adapter
|
164
|
+
s.dependency :postgres_adapter, attribute: :persistence_adapter # => #<PG:0x00000000e281a0>
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
container[:users_repository].persistence_adapter # => #<PG:0x00000000e281a0>
|
169
|
+
```
|
170
|
+
|
171
|
+
### Duplicating a container
|
172
|
+
|
173
|
+
```ruby
|
174
|
+
original = Dumpling::Container.new
|
175
|
+
original.configure do
|
176
|
+
set :logger do |s|
|
177
|
+
s.instance Logger.new(STDOUT)
|
155
178
|
end
|
156
179
|
end
|
180
|
+
|
181
|
+
duplicate = original.dup
|
182
|
+
duplicate.get(:logger).equal?(original.get(:logger)) # => true
|
183
|
+
|
184
|
+
# Changes in the original container do not affect the duplicate and vise versa
|
185
|
+
original.set :game do |s|
|
186
|
+
s.instance 'Tetris'
|
187
|
+
end
|
188
|
+
|
189
|
+
duplicate.get(:game) # => BOOM! raise Dumpling::Errors::Container::Missing
|
157
190
|
```
|
158
191
|
|
159
192
|
## Development
|
data/dumpling.gemspec
CHANGED
@@ -21,6 +21,6 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_development_dependency 'bundler', '~> 1.11'
|
22
22
|
spec.add_development_dependency 'rake', '~> 11.1'
|
23
23
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
24
|
-
spec.add_development_dependency 'rubocop', '~> 0.
|
24
|
+
spec.add_development_dependency 'rubocop', '~> 0.40.0'
|
25
25
|
spec.add_development_dependency 'simplecov', '~> 0.11'
|
26
26
|
end
|
data/lib/dumpling/container.rb
CHANGED
@@ -5,11 +5,6 @@ module Dumpling
|
|
5
5
|
@abstract_services = Registry.new
|
6
6
|
end
|
7
7
|
|
8
|
-
def configure(&block)
|
9
|
-
instance_eval(&block)
|
10
|
-
self
|
11
|
-
end
|
12
|
-
|
13
8
|
def set(id, &block)
|
14
9
|
raise(Errors::Container::Duplicate, id) if @services.has?(id)
|
15
10
|
|
@@ -35,6 +30,26 @@ module Dumpling
|
|
35
30
|
|
36
31
|
alias :[] get
|
37
32
|
|
33
|
+
def configure(&block)
|
34
|
+
instance_eval(&block)
|
35
|
+
self
|
36
|
+
end
|
37
|
+
|
38
|
+
def initialize_dup(original)
|
39
|
+
@services = original.services.dup
|
40
|
+
@abstract_services = original.abstract_services.dup
|
41
|
+
super
|
42
|
+
end
|
43
|
+
|
44
|
+
def inspect
|
45
|
+
services = @services.keys.sort.map { |id| inspect_service(id) }
|
46
|
+
services.empty? ? to_s : "#{self}\n#{services.join("\n").strip}"
|
47
|
+
end
|
48
|
+
|
49
|
+
protected
|
50
|
+
|
51
|
+
attr_reader :services, :abstract_services
|
52
|
+
|
38
53
|
private
|
39
54
|
|
40
55
|
def create_specification
|
@@ -63,5 +78,22 @@ module Dumpling
|
|
63
78
|
def build_service(specification)
|
64
79
|
ServiceBuilder.new(@services, @abstract_services).build(specification)
|
65
80
|
end
|
81
|
+
|
82
|
+
def inspect_service(id)
|
83
|
+
service = @services.get(id)
|
84
|
+
string = id.to_s
|
85
|
+
string << inspect_service_object(service.instance, service.class).to_s
|
86
|
+
string << inspect_service_dependencies(service.dependencies).to_s
|
87
|
+
end
|
88
|
+
|
89
|
+
def inspect_service_object(service_instance, service_class)
|
90
|
+
service_object = (service_instance.nil? ? service_class.inspect : service_instance.inspect)
|
91
|
+
"\n --> #{service_instance.nil? ? 'class' : 'instance'}: #{service_object}"
|
92
|
+
end
|
93
|
+
|
94
|
+
def inspect_service_dependencies(dependencies)
|
95
|
+
dependencies = dependencies.keys.join(',')
|
96
|
+
"\n --> dependencies: #{dependencies}" unless dependencies.empty?
|
97
|
+
end
|
66
98
|
end
|
67
99
|
end
|
data/lib/dumpling/registry.rb
CHANGED
data/lib/dumpling/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dumpling
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anton Kuzmenko
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-06-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.
|
61
|
+
version: 0.40.0
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0.
|
68
|
+
version: 0.40.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: simplecov
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|