crystal_clear 0.2.1 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cb9309b4bbb48f717389e2f5435724f2a3242ba31cbc38534e30cd7e89270dec
4
- data.tar.gz: 7758694d4a4c39af92b69d74d8870b91e4a6e9cea869df6230bb6b9d95871983
3
+ metadata.gz: 4d73a83f2207f99739fac6dd09847da492c4adacf4f84d2e81dc91dcbb531a7b
4
+ data.tar.gz: 4a5bbbc38ad3bfe860ea8e470e8e93b2d8fd79317f8659a1a6c33f363aefb827
5
5
  SHA512:
6
- metadata.gz: 68eb064946dcf6b0807fc8d9cc6c16698dd983dea5875cbbee892d26543d4eec1428b002ebad550f355fa67d0098a9ea6e4b1566f66cc920212e055674b698d8
7
- data.tar.gz: cfb3c13303372c91fbf12c058b264e805ab4831489da70ef6443e075a27f196a1600830535d71a7f7fc06c60623d246f9a393b853bce2e6a7a75b1b781d0905f
6
+ metadata.gz: 2449c3232478d64e2cb2eb48259befcddaed5625e21435ce88ebcdf755e16659a22faec7d4329ddffb50024c5356885b85d838073a2878287ffc42e23a7e4e8d
7
+ data.tar.gz: 60eaec3a450c33ebfc83b406295cdb1b80887bcbaf6a572f0692e0b081e0372efa6393057eb6601735f57ce4e7560ebee4eb8a706ec426221787d7db0506b482
@@ -1,4 +1,5 @@
1
1
  require_relative 'instantiator'
2
+ require_relative '../provider'
2
3
 
3
4
  module CrystalClear
4
5
  class ProviderInstantiator < Instantiator
@@ -13,14 +14,4 @@ module CrystalClear
13
14
  end
14
15
  end
15
16
 
16
- class Provider
17
-
18
- def initialize(class_name)
19
- @provided_class = class_name
20
- end
21
-
22
- def provide
23
- @provided_class.new
24
- end
25
- end
26
17
  end
@@ -0,0 +1,19 @@
1
+ require_relative 'instantiator'
2
+ require_relative '../provider'
3
+
4
+ module CrystalClear
5
+ class SingletonProviderInstantiator < Instantiator
6
+
7
+ # @param [Class<? extends CrystalClear::Provider>]
8
+ def initialize(provider_class)
9
+ @provider_class = provider_class
10
+ end
11
+
12
+ # @return [<? extends CrystalClear::Provider>]
13
+ def instantiate
14
+ @provider_instance ||= @provider_class.new
15
+ @provider_instance.provide
16
+ end
17
+ end
18
+
19
+ end
@@ -0,0 +1,12 @@
1
+ module CrystalClear
2
+ class Provider
3
+
4
+ def initialize(class_name)
5
+ @provided_class = class_name
6
+ end
7
+
8
+ def provide
9
+ @provided_class.new
10
+ end
11
+ end
12
+ end
@@ -2,6 +2,7 @@ require_relative 'instantiator/argumentless_instantiator'
2
2
  require_relative 'instantiator/pass_through_instantiator'
3
3
  require_relative 'instantiator/provider_instantiator'
4
4
  require_relative 'instantiator/singleton_instantiator'
5
+ require_relative 'instantiator/singleton_provider_instantiator'
5
6
  require_relative 'resolver'
6
7
 
7
8
  module CrystalClear
@@ -41,6 +42,11 @@ module CrystalClear
41
42
  self
42
43
  end
43
44
 
45
+ def resolves_to_singleton_provider(provider_class)
46
+ @block = lambda { |add_procedure| add_procedure.call(@classes, SingletonProviderInstantiator.new(provider_class), @clazz) }
47
+ self
48
+ end
49
+
44
50
  def build(add_procedure)
45
51
  @block.call(add_procedure)
46
52
  end
@@ -42,6 +42,16 @@ module CrystalClear
42
42
  register(CrystalClear::RegistrationBuilder.for(class_name).resolves_to_provider(provider_class))
43
43
  end
44
44
 
45
+ # @param [Class] provider_class
46
+ # @param [Class] class_name
47
+ # @return [CrystalClear::Resolver]
48
+ def register_singleton_provider(provider_class, class_name)
49
+ raise ArgumentError, "#{provider_class} is not a Class" unless provider_class.is_a?(Class)
50
+ raise ArgumentError, "#{provider_class} is not a Provider" unless provider_class < CrystalClear::Provider
51
+ raise ArgumentError, "#{class_name} is not a Class" unless class_name.is_a?(Class)
52
+ register(CrystalClear::RegistrationBuilder.for(class_name).resolves_to_singleton_provider(provider_class))
53
+ end
54
+
45
55
  private
46
56
 
47
57
  def storage
@@ -1,3 +1,3 @@
1
1
  module CrystalClear
2
- VERSION = "0.2.1"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crystal_clear
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jiri Stefek
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-12 00:00:00.000000000 Z
11
+ date: 2020-08-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -74,6 +74,8 @@ files:
74
74
  - lib/crystal_clear/instantiator/pass_through_instantiator.rb
75
75
  - lib/crystal_clear/instantiator/provider_instantiator.rb
76
76
  - lib/crystal_clear/instantiator/singleton_instantiator.rb
77
+ - lib/crystal_clear/instantiator/singleton_provider_instantiator.rb
78
+ - lib/crystal_clear/provider.rb
77
79
  - lib/crystal_clear/registration_builder.rb
78
80
  - lib/crystal_clear/resolver.rb
79
81
  - lib/crystal_clear/version.rb