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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9e72d17d6ce2db50ed67b5ae251a372ad202620a
4
- data.tar.gz: c78b751572c478329040fb289fb405253e921f46
3
+ metadata.gz: f263ef5a2e01c4aa04a72dccf8c114b250559983
4
+ data.tar.gz: 70517a5f3fe891b5bf4061156af846c657a0b8d9
5
5
  SHA512:
6
- metadata.gz: f7efa6c82ec9558e7d89ca90bc26e5639d2fecc9d31dc1ef4d1bd3c0ff3e12b5f59f744a172633f5c02ed29e2812dbe8861e9cf78461d190795b74bc066bef07
7
- data.tar.gz: 9a445d8d26e846184318eb37a4fd824a628f5343f854f4cd7bace5b5aa01a3e1529379f6ff2f1293c556e92db513e5136e95b134a28a99e5500175d9547783f7
6
+ metadata.gz: e64293607acfd7fa5fa90a853a799521c2d9eb1c29b7c4dfae4a5ed8d293be40507d370b535f6133b1ef22aacafb9f1e8709dc1cf0fd8ae3baa646fd5e697d8f
7
+ data.tar.gz: e14c3e48100be30c67057578a303353e65b9e0d01acd0435358a5fe796f8bdb0a119c49d6b26452bb84ce6a62675affa4b9d63552b8db9978bc1b7b7cec40c2d
@@ -0,0 +1,10 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ Speech is free, you can tell anything you want.
6
+
7
+ ## Our Standards
8
+
9
+ Sue me.
10
+
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- shirinji (0.0.1)
4
+ shirinji (0.0.3)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
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(name, class_name: nil, value: nil, access:, &block)
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, value: nil, access: :singleton, &block)
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 ? klass.freeze : nil,
62
- value: value
63
- }
62
+ class_name: klass && klass.freeze
63
+ )
64
64
 
65
65
  beans[name] = Bean.new(name, **options, &block)
66
66
  end
@@ -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)
@@ -18,15 +18,12 @@ module Shirinji
18
18
  instance_eval(&block) if block
19
19
  end
20
20
 
21
- def bean(name, klass: nil, value: nil, access: :singleton, &block)
21
+ def bean(name, klass: nil, **others, &block)
22
22
  chunks = [mod, "#{klass}#{klass_suffix}"].compact
23
- options = {
24
- access: access,
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([prefix, name, suffix].compact.join('_'), **options, &block)
26
+ parent.bean(scoped_name, **options, &block)
30
27
  end
31
28
 
32
29
  def scope(**options, &block)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Shirinji
4
- VERSION = '0.0.2'
4
+ VERSION = '0.0.3'
5
5
  end
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.2
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-03-12 00:00:00.000000000 Z
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