carb-container 0.2.0 → 0.3.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 +4 -4
- data/README.md +69 -3
- data/lib/carb/container/registerer.rb +14 -5
- data/lib/carb/container/registration_glue.rb +9 -1
- data/lib/carb/container/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 14c4ecb86c8b6ad0344f83c69a88197abc40fd28
|
4
|
+
data.tar.gz: 98914be8b62f72dbed25e62fe0df868994694b02
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9407ea0ee8bc049976ba4b782e59799b4a9d93885a1c308c7778091100aa8a06683ce7d2b6238d03deebff40f6ea88d963636d741768caa576e8fe80350a5737
|
7
|
+
data.tar.gz: 849aab3233cc33197af4a87fdc2c547d186384c9537297c366efd914a6820368a294e3d438eac7c35406bd0fd78b677fedb3934fef55e38911e63d5e22f3b034
|
data/README.md
CHANGED
@@ -3,6 +3,50 @@
|
|
3
3
|
A set of simple container objects to store dependencies. Can be used in
|
4
4
|
conjuction with [carb-inject](https://github.com/Carburetor/carb-inject) as
|
5
5
|
an IoC container.
|
6
|
+
Check the following example usage:
|
7
|
+
|
8
|
+
```ruby
|
9
|
+
# Optional, used to auto convert class names to symbol
|
10
|
+
require "active_support/inflector/methods"
|
11
|
+
|
12
|
+
Container = Carb::Container::RegistryContainer.new
|
13
|
+
Carb::Container::RegistrationGlue.call(Container)
|
14
|
+
|
15
|
+
class Foo
|
16
|
+
carb_container as: :myfoo
|
17
|
+
|
18
|
+
def hello
|
19
|
+
"foo"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class Bar
|
24
|
+
carb_container
|
25
|
+
|
26
|
+
def hello
|
27
|
+
"bar"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
class Baz
|
32
|
+
def hello
|
33
|
+
"baz"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
Container.register(:special_baz, -> { Baz.new })
|
38
|
+
|
39
|
+
# Now let's use the container to fetch various dependencies
|
40
|
+
foo_class = Container[:myfoo]
|
41
|
+
bar_class = Container[:bar]
|
42
|
+
foo = foo_class.new
|
43
|
+
bar = bar_class.new
|
44
|
+
baz = Container[:special_baz]
|
45
|
+
|
46
|
+
foo.hello # => "foo"
|
47
|
+
bar.hello # => "bar"
|
48
|
+
baz.hello # => "baz"
|
49
|
+
```
|
6
50
|
|
7
51
|
## Installation
|
8
52
|
|
@@ -61,9 +105,10 @@ container[:my_class].new.hello
|
|
61
105
|
|
62
106
|
### Carb::Container::RegistrationGlue
|
63
107
|
|
64
|
-
A utility class that
|
65
|
-
that you can easily register any newly
|
66
|
-
optional, for people who don't like monkey
|
108
|
+
A utility class that makes the method `carb_container` available as class
|
109
|
+
class method in all classes so, that you can easily register any newly
|
110
|
+
created class. This is entirely optional, for people who don't like monkey
|
111
|
+
patching, can be skipped.
|
67
112
|
|
68
113
|
```ruby
|
69
114
|
MyContainer = Carb::Container::RegistryContainer.new
|
@@ -94,6 +139,27 @@ person.greet
|
|
94
139
|
person.bark
|
95
140
|
```
|
96
141
|
|
142
|
+
#### carb_container
|
143
|
+
|
144
|
+
This method accepts two options:
|
145
|
+
|
146
|
+
- `as:` which accepts a `Symbol` and is the name which will be used to
|
147
|
+
register the class. If not supplied and `activesupport` is present, it will
|
148
|
+
be inferred by class name in snake_case
|
149
|
+
- `init: false` by default the value is the same as the `init`
|
150
|
+
supplied to `RegistrationGlue` when invoked (which defaults to `false`).
|
151
|
+
When false, it will register the class itself as is, equivalent to calling
|
152
|
+
`mycontainer.register(:foo, -> { Foo })`, however if set to `true` it
|
153
|
+
store the dependency with a call to `new`, like
|
154
|
+
`mycontainer.register(:foo, -> { Foo.new })`, the class must have a
|
155
|
+
constructor without arguments
|
156
|
+
|
157
|
+
`RegistrationGlue` also accepts an option when called:
|
158
|
+
|
159
|
+
- `init: false` which can be set to `true` so that `carb_container` will
|
160
|
+
automatically supply `init: true` instead (check `carb_container` for
|
161
|
+
more details)
|
162
|
+
|
97
163
|
### Carb::Container::DelegateContainer
|
98
164
|
|
99
165
|
Special container which allows chaining containers together so that a
|
@@ -7,26 +7,35 @@ module Carb::Container
|
|
7
7
|
private
|
8
8
|
|
9
9
|
attr_reader :container
|
10
|
+
attr_reader :init
|
10
11
|
attr_reader :converter
|
11
12
|
|
12
13
|
# @param container [#register] object which will be used to register
|
13
14
|
# dependencies as {::Proc}
|
15
|
+
# @param init [Boolean] defaults to `false`. If `true`, carb_container will
|
16
|
+
# register classes as `-> { MyClass.new }` instead of `-> { MyClass }`
|
14
17
|
# @param converter [#call] object which accepts a string and converts it
|
15
18
|
# into a valid method name. It's used to convert class name to a method
|
16
19
|
# name. By default it uses an instance of {ClassNameToMethodName}
|
17
|
-
def initialize(
|
20
|
+
def initialize(
|
21
|
+
container,
|
22
|
+
init: false,
|
23
|
+
converter: ClassNameToMethodName.new
|
24
|
+
)
|
18
25
|
@container = container
|
26
|
+
@init = init
|
19
27
|
@converter = converter
|
20
|
-
def_carb_container(container, converter)
|
28
|
+
def_carb_container(container, init, converter)
|
21
29
|
end
|
22
30
|
|
23
31
|
private
|
24
32
|
|
25
|
-
def def_carb_container(kontainer, convert)
|
26
|
-
define_method(:carb_container) do |as: nil|
|
33
|
+
def def_carb_container(kontainer, auto_init, convert)
|
34
|
+
define_method(:carb_container) do |as: nil, init: auto_init|
|
27
35
|
as ||= convert.call(self.name.to_s)
|
28
36
|
as = as.to_sym
|
29
|
-
kontainer.register(as, -> { self })
|
37
|
+
kontainer.register(as, -> { self.new }) if init
|
38
|
+
kontainer.register(as, -> { self }) unless init
|
30
39
|
end
|
31
40
|
send(:protected, :carb_container)
|
32
41
|
end
|
@@ -10,6 +10,9 @@ module Carb::Container
|
|
10
10
|
# @param container [#register] a generic object, usually a
|
11
11
|
# {RegistryContainer} which responds to `#register(name, dependency)`,
|
12
12
|
# it's the only required argument
|
13
|
+
# @param init [Boolean] auto initialize classes by calling `#new` (without
|
14
|
+
# arguments) if true when `carb_container` is called. By default is
|
15
|
+
# `false`
|
13
16
|
# @param target [Class, Module] class where you want to add the class
|
14
17
|
# method `carb_container`. Usually it's the {::Module} class so it's
|
15
18
|
# available on all classes
|
@@ -21,11 +24,16 @@ module Carb::Container
|
|
21
24
|
# name. By default it uses an instance of {ClassNameToMethodName}
|
22
25
|
def call(
|
23
26
|
container,
|
27
|
+
init: false,
|
24
28
|
target: Module,
|
25
29
|
registerer: Registerer,
|
26
30
|
converter: ClassNameToMethodName.new
|
27
31
|
)
|
28
|
-
registerer_instance = registerer.new(
|
32
|
+
registerer_instance = registerer.new(
|
33
|
+
container,
|
34
|
+
init: init,
|
35
|
+
converter: converter
|
36
|
+
)
|
29
37
|
|
30
38
|
include_registerer(target, registerer_instance)
|
31
39
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: carb-container
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fire-Dragon-DoL
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-06-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: carb-core
|