shirinji 0.0.2 → 0.0.3
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/CODE_OF_CONDUCT.md +10 -0
- data/Gemfile.lock +1 -1
- data/README.md +26 -0
- data/lib/shirinji/bean.rb +5 -2
- data/lib/shirinji/map.rb +5 -5
- data/lib/shirinji/resolver.rb +6 -0
- data/lib/shirinji/scope.rb +4 -7
- data/lib/shirinji/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f263ef5a2e01c4aa04a72dccf8c114b250559983
|
4
|
+
data.tar.gz: 70517a5f3fe891b5bf4061156af846c657a0b8d9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e64293607acfd7fa5fa90a853a799521c2d9eb1c29b7c4dfae4a5ed8d293be40507d370b535f6133b1ef22aacafb9f1e8709dc1cf0fd8ae3baa646fd5e697d8f
|
7
|
+
data.tar.gz: e14c3e48100be30c67057578a303353e65b9e0d01acd0435358a5fe796f8bdb0a119c49d6b26452bb84ce6a62675affa4b9d63552b8db9978bc1b7b7cec40c2d
|
data/CODE_OF_CONDUCT.md
ADDED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -247,6 +247,32 @@ resolver.resolve(:sign_up_user_service)
|
|
247
247
|
#=> <#SignUpUserService @publish_user_statistics_service=<#PublishUserStatisticsService ...> ...>
|
248
248
|
```
|
249
249
|
|
250
|
+
Shirinji provides scopes to help you organize your dependencies
|
251
|
+
|
252
|
+
```ruby
|
253
|
+
map = Shirinji::Map.new do
|
254
|
+
scope module: :Services, suffix: :service, klass_suffix: :Service do
|
255
|
+
scope module: :User, prefix: :user do
|
256
|
+
bean(:signup, klass: 'Signup')
|
257
|
+
end
|
258
|
+
end
|
259
|
+
|
260
|
+
# is the same as
|
261
|
+
bean(:user_signup_service, klass: 'Services::User::SignupService')
|
262
|
+
end
|
263
|
+
```
|
264
|
+
|
265
|
+
If you need a dependency to return a class instead of an instance, you can disable
|
266
|
+
the bean construction
|
267
|
+
|
268
|
+
```ruby
|
269
|
+
map = Shirinji::Map.new do
|
270
|
+
bean(:foo, klass: 'Foo', construct: false)
|
271
|
+
end
|
272
|
+
|
273
|
+
resolver.resolve(:foo) #=> Foo
|
274
|
+
```
|
275
|
+
|
250
276
|
Shirinji also provide a caching mecanism to achieve singleton pattern without having to implement
|
251
277
|
the pattern in your classes. It means the same class can be used as a singleton AND a regular class
|
252
278
|
at the same time without any code change.
|
data/lib/shirinji/bean.rb
CHANGED
@@ -2,9 +2,11 @@
|
|
2
2
|
|
3
3
|
module Shirinji
|
4
4
|
class Bean
|
5
|
-
attr_reader :name, :class_name, :value, :access, :attributes
|
5
|
+
attr_reader :name, :class_name, :value, :access, :attributes, :construct
|
6
6
|
|
7
|
-
def initialize(
|
7
|
+
def initialize(
|
8
|
+
name, class_name: nil, value: nil, access:, construct: true, &block
|
9
|
+
)
|
8
10
|
check_params!(class_name, value)
|
9
11
|
|
10
12
|
@name = name
|
@@ -12,6 +14,7 @@ module Shirinji
|
|
12
14
|
@value = value
|
13
15
|
@access = access
|
14
16
|
@attributes = {}
|
17
|
+
@construct = construct
|
15
18
|
|
16
19
|
instance_eval(&block) if block
|
17
20
|
end
|
data/lib/shirinji/map.rb
CHANGED
@@ -48,19 +48,19 @@ module Shirinji
|
|
48
48
|
# @param name [Symbol] the name you want to register your bean
|
49
49
|
# @option [String] :klass the classname the bean is registering
|
50
50
|
# @option [*] :value the object registered by the bean
|
51
|
+
# @option [Boolean] :construct whether the bean should be constructed or not
|
51
52
|
# @option [Symbol] :access either :singleton or :instance.
|
52
53
|
# @yield additional method to construct our bean
|
53
54
|
# @raise [ArgumentError] if trying to register a bean that already exist
|
54
|
-
def bean(name, klass: nil,
|
55
|
+
def bean(name, klass: nil, access: :singleton, **others, &block)
|
55
56
|
name = name.to_sym
|
56
57
|
|
57
58
|
raise_if_name_already_taken!(name)
|
58
59
|
|
59
|
-
options =
|
60
|
+
options = others.merge(
|
60
61
|
access: access,
|
61
|
-
class_name: klass
|
62
|
-
|
63
|
-
}
|
62
|
+
class_name: klass && klass.freeze
|
63
|
+
)
|
64
64
|
|
65
65
|
beans[name] = Bean.new(name, **options, &block)
|
66
66
|
end
|
data/lib/shirinji/resolver.rb
CHANGED
@@ -24,6 +24,11 @@ module Shirinji
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
+
def reload(map)
|
28
|
+
@map = map
|
29
|
+
reset_cache
|
30
|
+
end
|
31
|
+
|
27
32
|
def reset_cache
|
28
33
|
@singletons = {}
|
29
34
|
end
|
@@ -40,6 +45,7 @@ module Shirinji
|
|
40
45
|
|
41
46
|
def resolve_class_bean(bean)
|
42
47
|
klass, params = resolve_class(bean)
|
48
|
+
return klass unless bean.construct
|
43
49
|
return klass.new if params.empty?
|
44
50
|
|
45
51
|
check_params!(params)
|
data/lib/shirinji/scope.rb
CHANGED
@@ -18,15 +18,12 @@ module Shirinji
|
|
18
18
|
instance_eval(&block) if block
|
19
19
|
end
|
20
20
|
|
21
|
-
def bean(name, klass: nil,
|
21
|
+
def bean(name, klass: nil, **others, &block)
|
22
22
|
chunks = [mod, "#{klass}#{klass_suffix}"].compact
|
23
|
-
options =
|
24
|
-
|
25
|
-
klass: klass ? chunks.join('::') : nil,
|
26
|
-
value: value
|
27
|
-
}
|
23
|
+
options = others.merge(klass: klass ? chunks.join('::') : nil)
|
24
|
+
scoped_name = [prefix, name, suffix].compact.join('_')
|
28
25
|
|
29
|
-
parent.bean(
|
26
|
+
parent.bean(scoped_name, **options, &block)
|
30
27
|
end
|
31
28
|
|
32
29
|
def scope(**options, &block)
|
data/lib/shirinji/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shirinji
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Florian Dutey
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-04-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -65,6 +65,7 @@ files:
|
|
65
65
|
- ".ruby-gemset"
|
66
66
|
- ".ruby-version"
|
67
67
|
- ".travis.yml"
|
68
|
+
- CODE_OF_CONDUCT.md
|
68
69
|
- Gemfile
|
69
70
|
- Gemfile.lock
|
70
71
|
- README.md
|