inoculate 0.1.0 → 0.2.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 +4 -4
- data/CHANGELOG.md +6 -2
- data/README.md +2 -0
- data/lib/inoculate/initialization.rb +0 -2
- data/lib/inoculate/manufacturer.rb +9 -19
- data/lib/inoculate/porter.rb +4 -1
- data/lib/inoculate/version.rb +1 -1
- data/sig/inoculate.rbs +0 -5
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e63449f9ee05019e70acf85faafd0f2adf6554704f560de31b66b12c01e54aeb
|
4
|
+
data.tar.gz: e6975710a5802d37bd4b84de1345dbd10a10a5cf8538096cd8ffea8459997af9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 95e7e8d09278118af12987096c2919419a66b6ea298d6556a3e7df113403e0fa4edd363a1d19172eef8d4739ffdf10b4e8180b19151cdd19361d3c2ccd861200
|
7
|
+
data.tar.gz: 9dd927feda03995336037f58b86e9c97be8e2bf83f4ac8a101ee67b10e0d40106bdf0f62a138ef046135ef24f759074c289ef61153c8044d02db08b63e4b20be
|
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,12 @@
|
|
1
|
-
## v0.
|
1
|
+
## v0.2.0 \[2022-10-11]
|
2
|
+
|
3
|
+
* Build modules at initialization time so that usage is always thread-safe.
|
4
|
+
|
5
|
+
## v0.1.0 \[2022-10-10]
|
2
6
|
|
3
7
|
* Add transient dependency registration.
|
4
8
|
* Add initialization process for gem.
|
5
9
|
|
6
|
-
## v0.0.0
|
10
|
+
## v0.0.0 \[2022-10-05]
|
7
11
|
|
8
12
|
* Initial gem setup.
|
data/README.md
CHANGED
@@ -3,6 +3,8 @@
|
|
3
3
|
Inoculate is a small, thread-safe dependency injection library configured entirely with Ruby.
|
4
4
|
It provides several life-cycles and provides dependency access through private accessors.
|
5
5
|
|
6
|
+
[](https://badge.fury.io/rb/inoculate)
|
7
|
+
|
6
8
|
---
|
7
9
|
|
8
10
|
## What's in the box?
|
@@ -7,8 +7,6 @@
|
|
7
7
|
module Inoculate
|
8
8
|
# The main configuration entrypoint for Inoculate. Use this to set up named dependencies.
|
9
9
|
#
|
10
|
-
# @note This method is not thread safe.
|
11
|
-
#
|
12
10
|
# @example A simple dependency configuration
|
13
11
|
# Inoculate.initialize do |config|
|
14
12
|
# config.transient(:http) { Faraday }
|
@@ -4,7 +4,6 @@ require "digest"
|
|
4
4
|
|
5
5
|
module Inoculate
|
6
6
|
# Registers and builds dependency injection modules.
|
7
|
-
# @todo building needs to be thread-safe
|
8
7
|
# @todo singleton life cycle
|
9
8
|
# @todo instance life cycle
|
10
9
|
# @todo thread singleton life cycle
|
@@ -52,34 +51,25 @@ module Inoculate
|
|
52
51
|
raise Errors::AlreadyRegistered if @registered_blueprints.has_key? name
|
53
52
|
raise Errors::RequiresCallable unless builder.respond_to?(:call) || block
|
54
53
|
|
55
|
-
|
54
|
+
blueprint_name = name.to_sym
|
55
|
+
@registered_blueprints[blueprint_name] = {
|
56
|
+
lifecycle: :transient,
|
57
|
+
builder: builder || block,
|
58
|
+
accessor_module: build_module(blueprint_name, :transient, builder || block)
|
59
|
+
}
|
56
60
|
end
|
57
61
|
|
58
|
-
|
59
|
-
#
|
60
|
-
# @param name [Symbol] the dependency name to build an accessor module for
|
61
|
-
#
|
62
|
-
# @raise [Errors::UnknownName] if the dependency name is not registered
|
63
|
-
#
|
64
|
-
# @return [Module] the accessor module for accessing instances of the dependency
|
65
|
-
#
|
66
|
-
# @since 0.1.0
|
67
|
-
def build(name)
|
68
|
-
blueprint = @registered_blueprints[name]
|
69
|
-
raise Errors::UnknownName if blueprint.nil?
|
70
|
-
return blueprint[:accessor_module] unless blueprint[:accessor_module].nil?
|
62
|
+
private
|
71
63
|
|
64
|
+
def build_module(name, lifecycle, builder)
|
72
65
|
module_name = "I#{Digest::SHA1.hexdigest(name.to_s)}"
|
73
|
-
|
74
|
-
blueprint[:accessor_module] = Providers.module_eval do
|
66
|
+
Providers.module_eval do
|
75
67
|
const_set(module_name, Module.new do
|
76
68
|
private define_method(name) { builder.call }
|
77
69
|
end)
|
78
70
|
end
|
79
71
|
end
|
80
72
|
|
81
|
-
private
|
82
|
-
|
83
73
|
def validate_builder_name(name)
|
84
74
|
raise Errors::InvalidName, "name must be a symbol or convert to one" unless name.respond_to? :to_sym
|
85
75
|
begin
|
data/lib/inoculate/porter.rb
CHANGED
@@ -37,7 +37,10 @@ module Inoculate
|
|
37
37
|
m = Module.new do
|
38
38
|
define_method(method_name) do |*names|
|
39
39
|
names.each do |name|
|
40
|
-
|
40
|
+
mod = Inoculate.manufacturer.registered_blueprints.dig(name, :accessor_module)
|
41
|
+
raise Errors::UnknownName if mod.nil?
|
42
|
+
|
43
|
+
include(mod)
|
41
44
|
end
|
42
45
|
end
|
43
46
|
end
|
data/lib/inoculate/version.rb
CHANGED
data/sig/inoculate.rbs
CHANGED
@@ -33,11 +33,6 @@ module Inoculate
|
|
33
33
|
class Manufacturer
|
34
34
|
attr_reader registered_blueprints: Hash[builder_name, blueprint]
|
35
35
|
def transient: (builder_name | _ToSymbol, callable?) ?{ () -> void } -> void
|
36
|
-
def build: (builder_name) -> Module
|
37
|
-
|
38
|
-
private
|
39
|
-
|
40
|
-
def validate_builder_name: (builder_name) -> void
|
41
36
|
end
|
42
37
|
|
43
38
|
class Configurer
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: inoculate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephan Tarulli
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-10-
|
11
|
+
date: 2022-10-12 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: |
|
14
14
|
Inoculate is a small, thread-safe dependency injection library configured entirely with Ruby.
|