module Morpheus::Morpkg

A module for building .morpkg files

Public Class Methods

build_package(source_directory, outfile=nil, do_overwrite=false) click to toggle source

write a .morpkg file for a package source directory validates manifest data default outfile is code-version.morpkg returns outfile (filename) or raises exception

# File lib/morpheus/morpkg.rb, line 23
def self.build_package(source_directory, outfile=nil, do_overwrite=false)
  source_directory = File.expand_path(source_directory)
  manifest = self.parse_package_manifest(source_directory)
  code = manifest["code"]
  version = manifest["version"]
  org = manifest["org"] || manifest["organization"]
  type = manifest["type"]
  if code.nil? || code.empty?
    raise "Package manifest data missing: code"
  end
  if version.nil? || version.empty?
    raise "Package manifest data missing: version"
  end
  # if org.nil? || org.empty?
  #   raise "Package manifest data missing: org"
  # end
  # if type.nil? || type.empty?
  #   raise "Package manifest data missing: type"
  # end
  if outfile.nil? || outfile.empty?
    # outfile = "#{orig_dir}/#{type}-#{code}-#{version}.morpkg"
    # outfile = File.join(File.dirname(source_directory), "#{type}-#{code}-#{version}.morpkg")
    outfile = File.join(File.dirname(source_directory), "#{code}-#{version}.morpkg")
  elsif File.directory?(outfile)
    outfile = File.join(outfile, "#{code}-#{version}.morpkg")
  end
  if Dir.exist?(outfile)
    raise "Invalid package target. #{outfile} is the name of an existing directory."
  end
  if File.exist?(outfile)
    if do_overwrite
      # don't delete, just overwrite.
      # File.delete(outfile)
    else
      raise "Invalid package target. File already exists: #{outfile}"
    end
  end
  # build directories if needed
  if !Dir.exist?(File.dirname(outfile))
    Dir.mkdir(File.dirname(outfile))
  end

  # write the .morpkg file and return filename
  zf = ZipFileGenerator.new(source_directory, outfile)
  zf.write()
  
  return outfile
end
parse_package_manifest(source_directory) click to toggle source

parse the manifest json data for a package source directory

# File lib/morpheus/morpkg.rb, line 9
def self.parse_package_manifest(source_directory)
  source_directory = File.expand_path(source_directory)
  manifest_filename = File.join(source_directory, "package-manifest.json")
  if !File.exist?(manifest_filename)
    raise "Package manifest file not found: #{manifest_filename}"
  end
  manifest = JSON.parse(File.read(manifest_filename))
  return manifest
end