manufacturable 1.6.0 → 2.2.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: 1feea379db04261f90df6f10fba0eca3fddcbf5ba6b4e912a2b9e110ba6a16f0
4
- data.tar.gz: 2d8345f1bf8ac8bf5af40ec365a3dedb3bc27e0e8873eb879731d19aa98a94f4
3
+ metadata.gz: 34e0bee5e73591bee5d9bbcdb20761596facb07dbf15f6fedb61a2af2d2baf78
4
+ data.tar.gz: b83684b6cf6bde99726921e683597cdf06a622ac0662509f433f5d53cf848824
5
5
  SHA512:
6
- metadata.gz: a0c9267425d0782095662830afa73a9a9a5fec0fb5df11d820bc04365f70ca042fff9842f81910c28dd9ec8f7b6eade54f2eef6cf02f28019851f4c6e0f9ffbf
7
- data.tar.gz: ad0a90d1041cb5111955a34cec43ec917bd85f0418cc4ccfc3b83be2674a01522a8bb190069f3be29568b75389f891325b79d0eab6855f235abde1b07ef438b1
6
+ metadata.gz: 8fcaa04eb2f22748b66a3755d3d1d739f77aa0a5c7e37dbaff2d5d67810c740c8b4f73b09565fe60b054ed4d25d12d8e7b75406c435ff73002b0b456c76e0f3f
7
+ data.tar.gz: 3430e40a0395c0ee22b67e5ae1fe9180c062eebe37a08bd6a2628f3c110e45d10cf1cf46225fd4a418653d787ea38e0069801fe76ce7a5c1d0171f0bce727763
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,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, 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.6.0"
2
+ VERSION = "2.2.0"
3
3
  end
@@ -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.registered_types
30
- Registrar.registered_types
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!
@@ -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
- spec.metadata = {
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: 1.6.0
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: 2021-09-06 00:00:00.000000000 Z
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.2.15
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.