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.
@@ -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
@@ -0,0 +1,3 @@
1
+ module DependencyManager
2
+ VERSION = "0.0.1"
3
+ 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: []