manufacturable 2.0.0 → 2.1.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/.gitignore +1 -0
- data/lib/manufacturable/builder.rb +7 -4
- data/lib/manufacturable/injector.rb +26 -0
- data/lib/manufacturable/registrar.rb +10 -10
- data/lib/manufacturable/simple_registrar.rb +33 -0
- data/lib/manufacturable/version.rb +1 -1
- data/lib/manufacturable.rb +5 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 80f96d22a3a77b6f7a8a9c8ad091d3c029a987b818de6682f04fa5ce4cfbd994
|
4
|
+
data.tar.gz: 0f06a6a29bb44f9aa343cc559cb5432c433ade07cf80aa0310f75d5d51c1350c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fb004ece1ebfc46f34c30966126512df5871055a18da5b9612bccc3e781a29d44294de8fc00bdaef4faee23898467467eb84f17a8e2484ddb4812aa404e25336
|
7
|
+
data.tar.gz: db4a2ce06aa5fff612aeac6eedd14c6e86cccf354ac522a6a9e8477ca94067eb5c8cf448a53b5befb7f4ffd7ce0dcac457a9b3528d3f371a3865ada01541e209
|
data/.gitignore
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'manufacturable/injector'
|
1
2
|
require 'manufacturable/registrar'
|
2
3
|
|
3
4
|
module Manufacturable
|
@@ -48,13 +49,15 @@ module Manufacturable
|
|
48
49
|
end
|
49
50
|
|
50
51
|
def instances
|
51
|
-
@instances ||= klasses.map
|
52
|
-
klass.new(*args, **kwargs_with_key).tap { |instance| block&.call(instance) }
|
53
|
-
end
|
52
|
+
@instances ||= klasses.map { |klass| inject(klass) }
|
54
53
|
end
|
55
54
|
|
56
55
|
def last_instance
|
57
|
-
last_klass
|
56
|
+
inject(last_klass) unless last_klass.nil?
|
57
|
+
end
|
58
|
+
|
59
|
+
def inject(klass)
|
60
|
+
Injector.inject(klass, *args, **kwargs_with_key).tap { |instance| block&.call(instance) }
|
58
61
|
end
|
59
62
|
|
60
63
|
def klasses
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'manufacturable/simple_registrar'
|
2
|
+
|
3
|
+
module Manufacturable
|
4
|
+
class Injector
|
5
|
+
class << self
|
6
|
+
def inject(klass, *args, **kwargs)
|
7
|
+
params = dependencies_for(klass).merge(**kwargs)
|
8
|
+
klass.new(*args, **params)
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def dependencies_for(klass)
|
14
|
+
return {} unless klass.private_method_defined?(:initialize)
|
15
|
+
|
16
|
+
params = klass
|
17
|
+
.instance_method(:initialize)
|
18
|
+
.parameters
|
19
|
+
.select { |(type, name)| type == :keyreq }
|
20
|
+
.map(&:last)
|
21
|
+
|
22
|
+
SimpleRegistrar.entries(*params)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -6,8 +6,8 @@ module Manufacturable
|
|
6
6
|
DEFAULT_KEY = :__default__
|
7
7
|
|
8
8
|
class << self
|
9
|
-
def register(type, key,
|
10
|
-
self.new(registry, type, key).register(
|
9
|
+
def register(type, key, value)
|
10
|
+
self.new(registry, type, key).register(value)
|
11
11
|
end
|
12
12
|
|
13
13
|
def get(type, key)
|
@@ -37,13 +37,13 @@ module Manufacturable
|
|
37
37
|
@registry, @type, @key = registry, type, key
|
38
38
|
end
|
39
39
|
|
40
|
-
def register(
|
40
|
+
def register(value)
|
41
41
|
assign_set if set.nil?
|
42
|
-
set.add(
|
42
|
+
set.add(value)
|
43
43
|
end
|
44
44
|
|
45
45
|
def get
|
46
|
-
|
46
|
+
merged_values.empty? ? default_values : merged_values
|
47
47
|
end
|
48
48
|
|
49
49
|
private
|
@@ -60,19 +60,19 @@ module Manufacturable
|
|
60
60
|
@registry[@type][registry_key]
|
61
61
|
end
|
62
62
|
|
63
|
-
def
|
64
|
-
|
63
|
+
def merged_values
|
64
|
+
key_values.merge(all_values)
|
65
65
|
end
|
66
66
|
|
67
|
-
def
|
67
|
+
def key_values
|
68
68
|
get_for(registry_key)
|
69
69
|
end
|
70
70
|
|
71
|
-
def
|
71
|
+
def all_values
|
72
72
|
get_for(ALL_KEY)
|
73
73
|
end
|
74
74
|
|
75
|
-
def
|
75
|
+
def default_values
|
76
76
|
get_for(DEFAULT_KEY)
|
77
77
|
end
|
78
78
|
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Manufacturable
|
2
|
+
class SimpleRegistrar
|
3
|
+
class << self
|
4
|
+
def register(key, value)
|
5
|
+
self.new(registry, key).register(value)
|
6
|
+
end
|
7
|
+
|
8
|
+
def entries(*keys)
|
9
|
+
registry.slice(*keys)
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def registry
|
15
|
+
@registry ||= Hash.new
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def initialize(registry, key)
|
20
|
+
@registry, @key = registry, key
|
21
|
+
end
|
22
|
+
|
23
|
+
def register(value)
|
24
|
+
@registry[registry_key] = value
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def registry_key
|
30
|
+
@registry_key ||= (@key.respond_to?(:to_sym) && @key.to_sym) || @key
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/manufacturable.rb
CHANGED
@@ -4,6 +4,7 @@ require 'manufacturable/factory'
|
|
4
4
|
require 'manufacturable/item'
|
5
5
|
require 'manufacturable/object_factory'
|
6
6
|
require 'manufacturable/railtie'
|
7
|
+
require 'manufacturable/simple_registrar'
|
7
8
|
|
8
9
|
module Manufacturable
|
9
10
|
def self.build(*args, **kwargs, &block)
|
@@ -26,6 +27,10 @@ module Manufacturable
|
|
26
27
|
Builder.builds?(type, key)
|
27
28
|
end
|
28
29
|
|
30
|
+
def self.register_dependency(key, value)
|
31
|
+
SimpleRegistrar.register(key, value)
|
32
|
+
end
|
33
|
+
|
29
34
|
def self.reset!
|
30
35
|
Registrar.reset!
|
31
36
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: manufacturable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alan Ridlehoover
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2022-04-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -107,10 +107,12 @@ files:
|
|
107
107
|
- lib/manufacturable/builder.rb
|
108
108
|
- lib/manufacturable/config.rb
|
109
109
|
- lib/manufacturable/factory.rb
|
110
|
+
- lib/manufacturable/injector.rb
|
110
111
|
- lib/manufacturable/item.rb
|
111
112
|
- lib/manufacturable/object_factory.rb
|
112
113
|
- lib/manufacturable/railtie.rb
|
113
114
|
- lib/manufacturable/registrar.rb
|
115
|
+
- lib/manufacturable/simple_registrar.rb
|
114
116
|
- lib/manufacturable/version.rb
|
115
117
|
- manufacturable.gemspec
|
116
118
|
homepage: https://github.com/first-try-software/manufacturable
|
@@ -135,7 +137,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
135
137
|
- !ruby/object:Gem::Version
|
136
138
|
version: '0'
|
137
139
|
requirements: []
|
138
|
-
rubygems_version: 3.
|
140
|
+
rubygems_version: 3.3.11
|
139
141
|
signing_key:
|
140
142
|
specification_version: 4
|
141
143
|
summary: Manufacturable is a factory that builds self-registering objects.
|