dependency_manager 0.0.1
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 +7 -0
- data/.gitignore +11 -0
- data/.rspec +3 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +99 -0
- data/Guardfile +70 -0
- data/LICENSE.txt +21 -0
- data/README.md +566 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/dependency_manager.gemspec +44 -0
- data/lib/dependency_manager.rb +9 -0
- data/lib/dependency_manager/config_schema_macros.rb +74 -0
- data/lib/dependency_manager/container.rb +119 -0
- data/lib/dependency_manager/dependency_tree.rb +29 -0
- data/lib/dependency_manager/factory.rb +257 -0
- data/lib/dependency_manager/resolver.rb +49 -0
- data/lib/dependency_manager/version.rb +3 -0
- metadata +136 -0
@@ -0,0 +1,49 @@
|
|
1
|
+
module DependencyManager
|
2
|
+
# Resolves a factories dependencies against the currently loaded dependency
|
3
|
+
# list. Checks for potential missing dependencies and reconciles against
|
4
|
+
# optional and required dependencies.
|
5
|
+
class Resolver
|
6
|
+
# If dependencies are not present
|
7
|
+
class MissingDependencies < ArgumentError; end
|
8
|
+
|
9
|
+
# Creates a new Resolver
|
10
|
+
#
|
11
|
+
# @param factory: [Factory]
|
12
|
+
# Factory instance
|
13
|
+
#
|
14
|
+
# @param loaded_dependencies: [Hash[Symbol, Any]]
|
15
|
+
# Map of currently loaded dependencies
|
16
|
+
#
|
17
|
+
# @return [Resolver]
|
18
|
+
def initialize(factory:, loaded_dependencies:)
|
19
|
+
@factory = factory
|
20
|
+
@loaded_dependencies = loaded_dependencies
|
21
|
+
end
|
22
|
+
|
23
|
+
# Resolves dependencies from the currently loaded dependencies
|
24
|
+
#
|
25
|
+
# @raise [MissingDependencies]
|
26
|
+
# When there are missing dependencies required by the current factory
|
27
|
+
# that will prevent the factory from building
|
28
|
+
#
|
29
|
+
# @return [Hash[Symbol, Any]]
|
30
|
+
# Dependencies necessary to build the factory
|
31
|
+
def resolve
|
32
|
+
# Resolve required dependencies from our current list
|
33
|
+
resolved_dependencies = @loaded_dependencies.slice(*@factory.dependencies)
|
34
|
+
required_dependencies = @factory.required_dependencies
|
35
|
+
|
36
|
+
# But check if there are a few missing. Optional dependencies not included in this
|
37
|
+
missing_dependencies = required_dependencies.reject do |dependency_name|
|
38
|
+
!!resolved_dependencies[dependency_name]
|
39
|
+
end
|
40
|
+
|
41
|
+
if missing_dependencies.any?
|
42
|
+
error = missing_dependencies.join(', ')
|
43
|
+
raise MissingDependencies, "Dependencies for `#{@factory.const_name}` are not present: #{error}"
|
44
|
+
end
|
45
|
+
|
46
|
+
resolved_dependencies
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
metadata
ADDED
@@ -0,0 +1,136 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dependency_manager
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Brandon Weaver
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-05-05 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: guard-rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '4.7'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '4.7'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: dry-schema
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.5'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.5'
|
83
|
+
description: Manages and loads large collections of dependencies and wraps them into
|
84
|
+
a service container for later consumption
|
85
|
+
email:
|
86
|
+
- keystonelemur@gmail.com
|
87
|
+
executables: []
|
88
|
+
extensions: []
|
89
|
+
extra_rdoc_files: []
|
90
|
+
files:
|
91
|
+
- ".gitignore"
|
92
|
+
- ".rspec"
|
93
|
+
- CODE_OF_CONDUCT.md
|
94
|
+
- Gemfile
|
95
|
+
- Gemfile.lock
|
96
|
+
- Guardfile
|
97
|
+
- LICENSE.txt
|
98
|
+
- README.md
|
99
|
+
- Rakefile
|
100
|
+
- bin/console
|
101
|
+
- bin/setup
|
102
|
+
- dependency_manager.gemspec
|
103
|
+
- lib/dependency_manager.rb
|
104
|
+
- lib/dependency_manager/config_schema_macros.rb
|
105
|
+
- lib/dependency_manager/container.rb
|
106
|
+
- lib/dependency_manager/dependency_tree.rb
|
107
|
+
- lib/dependency_manager/factory.rb
|
108
|
+
- lib/dependency_manager/resolver.rb
|
109
|
+
- lib/dependency_manager/version.rb
|
110
|
+
homepage: https://www.github/com/baweaver/dependency_manager
|
111
|
+
licenses:
|
112
|
+
- MIT
|
113
|
+
metadata:
|
114
|
+
homepage_uri: https://www.github/com/baweaver/dependency_manager
|
115
|
+
source_code_uri: https://www.github/com/baweaver/dependency_manager
|
116
|
+
changelog_uri: https://www.github/com/baweaver/dependency_manager/CHANGELOG.md
|
117
|
+
post_install_message:
|
118
|
+
rdoc_options: []
|
119
|
+
require_paths:
|
120
|
+
- lib
|
121
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - ">="
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - ">="
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '0'
|
131
|
+
requirements: []
|
132
|
+
rubygems_version: 3.1.6
|
133
|
+
signing_key:
|
134
|
+
specification_version: 4
|
135
|
+
summary: Dependency Management for applications with several dependencies
|
136
|
+
test_files: []
|