manufacturable 1.5.1 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ed7ea8785e7afdcc33f4071742a85a6e4074b64cb54a19274df867a6ac6cff8f
4
- data.tar.gz: a3d15704c9600dfa8f7565c4f8eb43979b3e97d945c91dcbaf4e29fe0794a6e1
3
+ metadata.gz: 80f96d22a3a77b6f7a8a9c8ad091d3c029a987b818de6682f04fa5ce4cfbd994
4
+ data.tar.gz: 0f06a6a29bb44f9aa343cc559cb5432c433ade07cf80aa0310f75d5d51c1350c
5
5
  SHA512:
6
- metadata.gz: d93e23562e81927917d9313b18c9a0ae0678716b4d718d62d8ada471e539e32f1ae5705c2ac33cc7bbc5f82f32a7fb4120ed314d0f11c06600653be825e63a9e
7
- data.tar.gz: 9038acc6b59bbf7792bdae8a556753fb42c3f4f65f7ce17e565952585bed3f99ac8a25cea20c558c867e8e9f957a7e3c4e73eafefaafe634fd37a993ec7b6dc0
6
+ metadata.gz: fb004ece1ebfc46f34c30966126512df5871055a18da5b9612bccc3e781a29d44294de8fc00bdaef4faee23898467467eb84f17a8e2484ddb4812aa404e25336
7
+ data.tar.gz: db4a2ce06aa5fff612aeac6eedd14c6e86cccf354ac522a6a9e8477ca94067eb5c8cf448a53b5befb7f4ffd7ce0dcac457a9b3528d3f371a3865ada01541e209
data/.gitignore CHANGED
@@ -11,3 +11,4 @@
11
11
  .rspec_status
12
12
 
13
13
  Gemfile.lock
14
+ .DS_Store
@@ -1,3 +1,4 @@
1
+ require 'manufacturable/injector'
1
2
  require 'manufacturable/registrar'
2
3
 
3
4
  module Manufacturable
@@ -14,6 +15,10 @@ module Manufacturable
14
15
  self.new(*args, **kwargs, &block).build_all
15
16
  end
16
17
 
18
+ def self.builds?(*args, **kwargs, &block)
19
+ self.new(*args, **kwargs, &block).builds?
20
+ end
21
+
17
22
  def build
18
23
  return_first? ? instances.first : instances
19
24
  end
@@ -26,6 +31,10 @@ module Manufacturable
26
31
  instances
27
32
  end
28
33
 
34
+ def builds?
35
+ Registrar.registered_keys(type).include?(key)
36
+ end
37
+
29
38
  private
30
39
 
31
40
  attr_reader :type, :key, :args, :kwargs, :block
@@ -40,13 +49,15 @@ module Manufacturable
40
49
  end
41
50
 
42
51
  def instances
43
- @instances ||= klasses.map do |klass|
44
- klass.new(*args, **kwargs_with_key).tap { |instance| block&.call(instance) }
45
- end
52
+ @instances ||= klasses.map { |klass| inject(klass) }
46
53
  end
47
54
 
48
55
  def last_instance
49
- last_klass&.new(*args, **kwargs_with_key)&.tap { |instance| block&.call(instance) }
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) }
50
61
  end
51
62
 
52
63
  def klasses
@@ -27,5 +27,9 @@ module Manufacturable
27
27
 
28
28
  Builder.build_all(@type, key, *args)
29
29
  end
30
+
31
+ def builds?(key)
32
+ Builder.builds?(@type, key)
33
+ end
30
34
  end
31
35
  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, klass)
10
- self.new(registry, type, key).register(klass)
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(klass)
40
+ def register(value)
41
41
  assign_set if set.nil?
42
- set.add(klass)
42
+ set.add(value)
43
43
  end
44
44
 
45
45
  def get
46
- merged_klasses.empty? ? default_klasses : merged_klasses
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 merged_klasses
64
- key_klasses.merge(all_klasses)
63
+ def merged_values
64
+ key_values.merge(all_values)
65
65
  end
66
66
 
67
- def key_klasses
67
+ def key_values
68
68
  get_for(registry_key)
69
69
  end
70
70
 
71
- def all_klasses
71
+ def all_values
72
72
  get_for(ALL_KEY)
73
73
  end
74
74
 
75
- def default_klasses
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
@@ -1,3 +1,3 @@
1
1
  module Manufacturable
2
- VERSION = "1.5.1"
2
+ VERSION = "2.1.0"
3
3
  end
@@ -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)
@@ -22,12 +23,12 @@ module Manufacturable
22
23
  Builder.build_all(*args, **kwargs, &block)
23
24
  end
24
25
 
25
- def self.registered_types
26
- Registrar.registered_types
26
+ def self.builds?(type, key)
27
+ Builder.builds?(type, key)
27
28
  end
28
29
 
29
- def self.registered_keys(type)
30
- Registrar.registered_keys(type)
30
+ def self.register_dependency(key, value)
31
+ SimpleRegistrar.register(key, value)
31
32
  end
32
33
 
33
34
  def self.reset!
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: 1.5.1
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: 2021-09-05 00:00:00.000000000 Z
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.2.15
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.