manufacturable 1.6.0 → 2.2.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/dispatcher.rb +20 -0
- 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 +4 -6
- data/manufacturable.gemspec +1 -1
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 34e0bee5e73591bee5d9bbcdb20761596facb07dbf15f6fedb61a2af2d2baf78
|
4
|
+
data.tar.gz: b83684b6cf6bde99726921e683597cdf06a622ac0662509f433f5d53cf848824
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8fcaa04eb2f22748b66a3755d3d1d739f77aa0a5c7e37dbaff2d5d67810c740c8b4f73b09565fe60b054ed4d25d12d8e7b75406c435ff73002b0b456c76e0f3f
|
7
|
+
data.tar.gz: 3430e40a0395c0ee22b67e5ae1fe9180c062eebe37a08bd6a2628f3c110e45d10cf1cf46225fd4a418653d787ea38e0069801fe76ce7a5c1d0171f0bce727763
|
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,20 @@
|
|
1
|
+
module Manufacturable
|
2
|
+
class Dispatcher
|
3
|
+
attr_reader :message, :receiver
|
4
|
+
|
5
|
+
def initialize(message:, receiver:)
|
6
|
+
@message = message
|
7
|
+
@receiver = receiver
|
8
|
+
end
|
9
|
+
|
10
|
+
def method_missing(name, *args, **kwargs)
|
11
|
+
return super unless respond_to?(name)
|
12
|
+
|
13
|
+
Manufacturable.build_one(receiver, name, *args, **kwargs).public_send(message)
|
14
|
+
end
|
15
|
+
|
16
|
+
def respond_to_missing?(name, include_private = false)
|
17
|
+
Manufacturable.builds?(receiver, name) || super
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -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,8 @@ require 'manufacturable/factory'
|
|
4
4
|
require 'manufacturable/item'
|
5
5
|
require 'manufacturable/object_factory'
|
6
6
|
require 'manufacturable/railtie'
|
7
|
+
require 'manufacturable/simple_registrar'
|
8
|
+
require 'manufacturable/dispatcher'
|
7
9
|
|
8
10
|
module Manufacturable
|
9
11
|
def self.build(*args, **kwargs, &block)
|
@@ -26,12 +28,8 @@ module Manufacturable
|
|
26
28
|
Builder.builds?(type, key)
|
27
29
|
end
|
28
30
|
|
29
|
-
def self.
|
30
|
-
|
31
|
-
end
|
32
|
-
|
33
|
-
def self.registered_keys(type)
|
34
|
-
Registrar.registered_keys(type)
|
31
|
+
def self.register_dependency(key, value)
|
32
|
+
SimpleRegistrar.register(key, value)
|
35
33
|
end
|
36
34
|
|
37
35
|
def self.reset!
|
data/manufacturable.gemspec
CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
|
|
12
12
|
spec.license = "MIT"
|
13
13
|
spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
|
14
14
|
|
15
|
-
|
15
|
+
spec.metadata = {
|
16
16
|
"bug_tracker_uri" => "https://github.com/first-try-software/manufacturable/issues",
|
17
17
|
"homepage_uri" => spec.homepage,
|
18
18
|
"source_code_uri" => "https://github.com/first-try-software/manufacturable"
|
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:
|
4
|
+
version: 2.2.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-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -106,11 +106,14 @@ files:
|
|
106
106
|
- lib/manufacturable.rb
|
107
107
|
- lib/manufacturable/builder.rb
|
108
108
|
- lib/manufacturable/config.rb
|
109
|
+
- lib/manufacturable/dispatcher.rb
|
109
110
|
- lib/manufacturable/factory.rb
|
111
|
+
- lib/manufacturable/injector.rb
|
110
112
|
- lib/manufacturable/item.rb
|
111
113
|
- lib/manufacturable/object_factory.rb
|
112
114
|
- lib/manufacturable/railtie.rb
|
113
115
|
- lib/manufacturable/registrar.rb
|
116
|
+
- lib/manufacturable/simple_registrar.rb
|
114
117
|
- lib/manufacturable/version.rb
|
115
118
|
- manufacturable.gemspec
|
116
119
|
homepage: https://github.com/first-try-software/manufacturable
|
@@ -135,7 +138,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
135
138
|
- !ruby/object:Gem::Version
|
136
139
|
version: '0'
|
137
140
|
requirements: []
|
138
|
-
rubygems_version: 3.
|
141
|
+
rubygems_version: 3.3.11
|
139
142
|
signing_key:
|
140
143
|
specification_version: 4
|
141
144
|
summary: Manufacturable is a factory that builds self-registering objects.
|