Class: Mxrb::OfficialMarketplace::ModulePackageReader

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

Overview

Parses and safely stages a Mendix module package archive.

Defined Under Namespace

Classes: Descriptor

Instance Method Summary collapse

Constructor Details

#initialize(archive) ⇒ ModulePackageReader

Returns a new instance of ModulePackageReader.



14
15
16
# File 'lib/mxrb/official_marketplace/module_package_importer.rb', line 14

def initialize(archive)
  @archive = archive
end

Instance Method Details

#descriptorObject

Raises:



18
19
20
21
22
23
24
# File 'lib/mxrb/official_marketplace/module_package_importer.rb', line 18

def descriptor
  package_xml = @archive.find_entry('package.xml')
  raise MarketplaceError, 'package.xml is missing' unless package_xml

  document = REXML::Document.new(package_xml.get_input_stream.read)
  build_descriptor(document, parse_manifest)
end

#extract_project(descriptor, temporary) ⇒ Object

Raises:



26
27
28
29
30
31
# File 'lib/mxrb/official_marketplace/module_package_importer.rb', line 26

def extract_project(descriptor, temporary)
  entry = @archive.find_entry(descriptor.project_file)
  raise MarketplaceError, "package project not found: #{descriptor.project_file}" unless entry

  copy_entry(entry, File.join(temporary, 'source.mpr'))
end

#stage_files(files, temporary) ⇒ Object



33
34
35
36
37
38
39
40
41
# File 'lib/mxrb/official_marketplace/module_package_importer.rb', line 33

def stage_files(files, temporary)
  root = File.join(temporary, 'assets')
  files.to_h do |relative|
    entry = @archive.find_entry(relative) || @archive.find_entry(relative.tr('/', '\\'))
    raise MarketplaceError, "declared package file is missing: #{relative}" unless entry&.file?

    [relative, copy_entry(entry, File.join(root, relative))]
  end
end