shirinji 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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