Class: Mxrb::OfficialMarketplace::DependencyResolver
- Inherits:
-
Object
- Object
- Mxrb::OfficialMarketplace::DependencyResolver
- Defined in:
- lib/mxrb/official_marketplace/dependency_resolver.rb
Overview
Discovers dependencies from unresolved qualified references inside the package MPR, then verifies Content API candidates against the MPK module.
Constant Summary collapse
- PLATFORM_MODULES =
rubocop:disable Metrics/ClassLength
%w[System].freeze
- OFFICIAL_CONTENT_IDS =
{ 'FeedbackModule' => 205_506, 'DataWidgets' => 116_540, 'Administration' => 23_513 }.freeze
- DATA_WIDGET_PATTERN =
/ \Acom\.mendix\.widget\.web\. (?:datagrid|datagriddatefilter|datagriddropdownfilter|datagridnumberfilter| datagridtextfilter|dropdownsort|gallery|selectionhelper|treenode)\. /ix- OFFICIAL_WIDGET_CONTENT_IDS =
{ DATA_WIDGET_PATTERN => 116_540, /\Acom\.mendix\.widget\.web\.combobox\.Combobox\z/i => 219_304 }.freeze
Instance Method Summary collapse
-
#initialize(target:, mpr:, installer:, api:, mendix_version:) ⇒ DependencyResolver
constructor
A new instance of DependencyResolver.
-
#resolve(identifier, apply: false, apply_resolved: false) ⇒ Object
rubocop:disable Metrics/AbcSize, Metrics/MethodLength.
Constructor Details
#initialize(target:, mpr:, installer:, api:, mendix_version:) ⇒ DependencyResolver
Returns a new instance of DependencyResolver.
75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/mxrb/official_marketplace/dependency_resolver.rb', line 75 def initialize(target:, mpr:, installer:, api:, mendix_version:) @target = File.(target) @mpr = File.(mpr) @installer = installer @api = api @mendix_version = mendix_version @resolved = {} @visited = {} @blockers = [] @project_modules = Mxrb.open(@mpr) { _1.modules.map(&:name) } @required_widget_ids = (@mpr) end |
Instance Method Details
#resolve(identifier, apply: false, apply_resolved: false) ⇒ Object
rubocop:disable Metrics/AbcSize, Metrics/MethodLength
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/mxrb/official_marketplace/dependency_resolver.rb', line 89 def resolve(identifier, apply: false, apply_resolved: false) lifecycle = Lifecycle.new(target: @target, mpr: @mpr, installer: @installer) root, entry = lifecycle.installed(identifier) Dir.mktmpdir('mxrb-marketplace-dependencies-') do |temporary| @temporary = temporary visit(root, safe_path(entry.fetch('archive'))) dependencies = @resolved.values.freeze = plan = DependencyPlan.new( root:, dependencies:, widget_dependencies:, blockers: @blockers.uniq ) do apply_dependencies(dependencies, ) end plan.apply! if apply plan.apply_resolved! if apply_resolved plan.expire! unless apply || apply_resolved return plan end ensure @temporary = nil end |