manufacturable 1.5.1 → 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: 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.