Class: Mxrb::OfficialMarketplace::PackageEnvelope

Inherits:
Object
  • Object
show all
Defined in:
lib/mxrb/official_marketplace/widget_package_installer.rb

Overview

Validates the two official Marketplace package envelopes MXRB accepts. rubocop:disable Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity

Class Method Summary collapse

Class Method Details

.kind(path) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/mxrb/official_marketplace/widget_package_installer.rb', line 18

def self.kind(path)
  Zip::File.open(path) do |archive|
    package = archive.find_entry('package.xml')
    raise MarketplaceError, 'package.xml is missing' unless package

    document = REXML::Document.new(package.get_input_stream.read)
    names = document.root&.elements&.map(&:name) || []
    return :module if names.include?('modelerProject')
    return :widget if names.include?('clientModule')

    raise MarketplaceError, 'package.xml does not declare a module or widget'
  end
rescue Zip::Error, REXML::ParseException => e
  raise MarketplaceError, "invalid Mendix package: #{e.message}"
end