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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6592918ec7c5048cac69e110ebd09e5845fc59ebc5153d4fd6f289f3613e9b05
4
- data.tar.gz: 2ab88ebebdae5afbc65d1b1513a36a45a94ae5712b7fe94229d7430201719bfd
3
+ metadata.gz: 80f96d22a3a77b6f7a8a9c8ad091d3c029a987b818de6682f04fa5ce4cfbd994
4
+ data.tar.gz: 0f06a6a29bb44f9aa343cc559cb5432c433ade07cf80aa0310f75d5d51c1350c
5
5
  SHA512:
6
- metadata.gz: cba737b5b3b0bceea6096f4cf9cd4e776fabb261432d20efa798f63cfa1d6fe58a0e221e17679dd13f14babafc7b974bcf91a05ad85ab3bee1dcb9d2d3f4bde6
7
- data.tar.gz: 594665a88f75ffdc145dfaefe5e528247da47567e8ec6bc7cb650a4931396530c5a595f427a68bdfb3acce912890e31db95d8243ce8a45eaeb841d414d2a8d6b
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
@@ -48,13 +49,15 @@ module Manufacturable
48
49
  end
49
50
 
50
51
  def instances
51
- @instances ||= klasses.map do |klass|
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&.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) }
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, 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 = "2.0.0"
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)
@@ -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.0.0
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-06 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.