Module: MppReader

Defined in:
lib/mpp_reader.rb,
lib/mpp_reader/cli.rb,
lib/mpp_reader/task.rb,
lib/mpp_reader/decode.rb,
lib/mpp_reader/errors.rb,
lib/mpp_reader/project.rb,
lib/mpp_reader/version.rb,
lib/mpp_reader/calendar.rb,
lib/mpp_reader/cfbf/fat.rb,
lib/mpp_reader/comp_obj.rb,
lib/mpp_reader/reader14.rb,
lib/mpp_reader/relation.rb,
lib/mpp_reader/resource.rb,
lib/mpp_reader/rtf_text.rb,
lib/mpp_reader/cfbf/file.rb,
lib/mpp_reader/field_map.rb,
lib/mpp_reader/assignment.rb,
lib/mpp_reader/cfbf/header.rb,
lib/mpp_reader/blocks/props.rb,
lib/mpp_reader/field_reader.rb,
lib/mpp_reader/field_tables.rb,
lib/mpp_reader/cfbf/directory.rb,
lib/mpp_reader/blocks/var_meta.rb,
lib/mpp_reader/blocks/var2_data.rb,
lib/mpp_reader/blocks/fixed_data.rb,
lib/mpp_reader/blocks/fixed_meta.rb

Overview

GENERATED FILE - do not edit by hand. Built by tool/generate_field_tables.rb from the MPXJ sources (common/MPP*Field.java and *Field.java enums).

Defined Under Namespace

Modules: Blocks, Cfbf, Decode, FieldTables, RtfText Classes: Assignment, CLI, Calendar, CompObj, CorruptFileError, Duration, Error, FieldMap, FieldReader, InvalidFormatError, Project, Reader14, Relation, Resource, Task, UnsupportedFormatError

Constant Summary collapse

SUPPORTED_FORMATS =

File-format identifiers (from the CompObj stream) this gem supports: MPP14 is the format written by Project 2010 through 2021. MPT are templates, GLOBAL is the global.mpt enterprise template.

%w[MSProject.MPP14 MSProject.MPT14 MSProject.GLOBAL14].freeze
KNOWN_UNSUPPORTED =

Known older generations, for clear error messages only.

{
  "MSProject.MPP4" => "Project 4.x/95",
  "MSProject.MPP8" => "Project 98",
  "MSProject.MPT8" => "Project 98",
  "MSProject.MPP9" => "Project 2000/2002",
  "MSProject.MPT9" => "Project 2000/2002",
  "MSProject.GLOBAL9" => "Project 2000/2002",
  "MSProject.MPP12" => "Project 2003/2007",
  "MSProject.MPT12" => "Project 2003/2007",
  "MSProject.GLOBAL12" => "Project 2003/2007"
}.freeze
VERSION =
"0.1.0"

Class Method Summary collapse

Class Method Details

.open(source) ⇒ Object

Opens an .mpp file (path, binary String, or IO) and returns a Project.



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/mpp_reader.rb', line 48

def self.open(source)
  cfbf = Cfbf::File.read(source)
  comp_obj_stream = cfbf.stream("\x01CompObj")
  if comp_obj_stream.nil?
    raise InvalidFormatError, "OLE file has no CompObj stream - not an MS Project file"
  end

  comp_obj = CompObj.new(comp_obj_stream)
  format = comp_obj.file_format
  unless SUPPORTED_FORMATS.include?(format)
    product = KNOWN_UNSUPPORTED[format]
    detail = product ? "#{format} (written by #{product})" : format.inspect
    raise UnsupportedFormatError,
          "unsupported file format #{detail} - only MPP14 (Project 2010-2021) is supported"
  end

  Project.new(cfbf, comp_obj)
end