manufacturable 2.0.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
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.