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 +4 -4
- data/lib/crystal_clear/instantiator/provider_instantiator.rb +1 -10
- data/lib/crystal_clear/instantiator/singleton_provider_instantiator.rb +19 -0
- data/lib/crystal_clear/provider.rb +12 -0
- data/lib/crystal_clear/registration_builder.rb +6 -0
- data/lib/crystal_clear/resolver.rb +10 -0
- data/lib/crystal_clear/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4d73a83f2207f99739fac6dd09847da492c4adacf4f84d2e81dc91dcbb531a7b
|
4
|
+
data.tar.gz: 4a5bbbc38ad3bfe860ea8e470e8e93b2d8fd79317f8659a1a6c33f363aefb827
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
@@ -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
|
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.
|
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-
|
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
|