mpp_reader 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +36 -0
- data/LICENSE.txt +504 -0
- data/README.md +77 -0
- data/exe/mpp_reader +5 -0
- data/lib/mpp_reader/assignment.rb +8 -0
- data/lib/mpp_reader/blocks/fixed_data.rb +83 -0
- data/lib/mpp_reader/blocks/fixed_meta.rb +62 -0
- data/lib/mpp_reader/blocks/props.rb +47 -0
- data/lib/mpp_reader/blocks/var2_data.rb +39 -0
- data/lib/mpp_reader/blocks/var_meta.rb +38 -0
- data/lib/mpp_reader/calendar.rb +19 -0
- data/lib/mpp_reader/cfbf/directory.rb +84 -0
- data/lib/mpp_reader/cfbf/fat.rb +75 -0
- data/lib/mpp_reader/cfbf/file.rb +114 -0
- data/lib/mpp_reader/cfbf/header.rb +40 -0
- data/lib/mpp_reader/cli.rb +110 -0
- data/lib/mpp_reader/comp_obj.rb +37 -0
- data/lib/mpp_reader/decode.rb +105 -0
- data/lib/mpp_reader/errors.rb +13 -0
- data/lib/mpp_reader/field_map.rb +106 -0
- data/lib/mpp_reader/field_reader.rb +119 -0
- data/lib/mpp_reader/field_tables.rb +4156 -0
- data/lib/mpp_reader/project.rb +70 -0
- data/lib/mpp_reader/reader14.rb +455 -0
- data/lib/mpp_reader/relation.rb +11 -0
- data/lib/mpp_reader/resource.rb +5 -0
- data/lib/mpp_reader/rtf_text.rb +92 -0
- data/lib/mpp_reader/task.rb +21 -0
- data/lib/mpp_reader/version.rb +3 -0
- data/lib/mpp_reader.rb +66 -0
- metadata +77 -0
data/lib/mpp_reader.rb
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
require_relative "mpp_reader/version"
|
|
2
|
+
require_relative "mpp_reader/errors"
|
|
3
|
+
require_relative "mpp_reader/decode"
|
|
4
|
+
require_relative "mpp_reader/rtf_text"
|
|
5
|
+
require_relative "mpp_reader/cfbf/header"
|
|
6
|
+
require_relative "mpp_reader/cfbf/fat"
|
|
7
|
+
require_relative "mpp_reader/cfbf/directory"
|
|
8
|
+
require_relative "mpp_reader/cfbf/file"
|
|
9
|
+
require_relative "mpp_reader/blocks/props"
|
|
10
|
+
require_relative "mpp_reader/blocks/var_meta"
|
|
11
|
+
require_relative "mpp_reader/blocks/var2_data"
|
|
12
|
+
require_relative "mpp_reader/blocks/fixed_meta"
|
|
13
|
+
require_relative "mpp_reader/blocks/fixed_data"
|
|
14
|
+
require_relative "mpp_reader/field_map"
|
|
15
|
+
require_relative "mpp_reader/field_reader"
|
|
16
|
+
require_relative "mpp_reader/comp_obj"
|
|
17
|
+
require_relative "mpp_reader/task"
|
|
18
|
+
require_relative "mpp_reader/resource"
|
|
19
|
+
require_relative "mpp_reader/assignment"
|
|
20
|
+
require_relative "mpp_reader/relation"
|
|
21
|
+
require_relative "mpp_reader/calendar"
|
|
22
|
+
require_relative "mpp_reader/reader14"
|
|
23
|
+
require_relative "mpp_reader/project"
|
|
24
|
+
|
|
25
|
+
# Pure Ruby reader for Microsoft Project .mpp files (MPP14 format,
|
|
26
|
+
# Project 2010-2021). Binary format knowledge ported from MPXJ
|
|
27
|
+
# (https://github.com/joniles/mpxj, LGPL).
|
|
28
|
+
module MppReader
|
|
29
|
+
# File-format identifiers (from the CompObj stream) this gem supports:
|
|
30
|
+
# MPP14 is the format written by Project 2010 through 2021. MPT are
|
|
31
|
+
# templates, GLOBAL is the global.mpt enterprise template.
|
|
32
|
+
SUPPORTED_FORMATS = %w[MSProject.MPP14 MSProject.MPT14 MSProject.GLOBAL14].freeze
|
|
33
|
+
|
|
34
|
+
# Known older generations, for clear error messages only.
|
|
35
|
+
KNOWN_UNSUPPORTED = {
|
|
36
|
+
"MSProject.MPP4" => "Project 4.x/95",
|
|
37
|
+
"MSProject.MPP8" => "Project 98",
|
|
38
|
+
"MSProject.MPT8" => "Project 98",
|
|
39
|
+
"MSProject.MPP9" => "Project 2000/2002",
|
|
40
|
+
"MSProject.MPT9" => "Project 2000/2002",
|
|
41
|
+
"MSProject.GLOBAL9" => "Project 2000/2002",
|
|
42
|
+
"MSProject.MPP12" => "Project 2003/2007",
|
|
43
|
+
"MSProject.MPT12" => "Project 2003/2007",
|
|
44
|
+
"MSProject.GLOBAL12" => "Project 2003/2007"
|
|
45
|
+
}.freeze
|
|
46
|
+
|
|
47
|
+
# Opens an .mpp file (path, binary String, or IO) and returns a Project.
|
|
48
|
+
def self.open(source)
|
|
49
|
+
cfbf = Cfbf::File.read(source)
|
|
50
|
+
comp_obj_stream = cfbf.stream("\x01CompObj")
|
|
51
|
+
if comp_obj_stream.nil?
|
|
52
|
+
raise InvalidFormatError, "OLE file has no CompObj stream - not an MS Project file"
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
comp_obj = CompObj.new(comp_obj_stream)
|
|
56
|
+
format = comp_obj.file_format
|
|
57
|
+
unless SUPPORTED_FORMATS.include?(format)
|
|
58
|
+
product = KNOWN_UNSUPPORTED[format]
|
|
59
|
+
detail = product ? "#{format} (written by #{product})" : format.inspect
|
|
60
|
+
raise UnsupportedFormatError,
|
|
61
|
+
"unsupported file format #{detail} - only MPP14 (Project 2010-2021) is supported"
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
Project.new(cfbf, comp_obj)
|
|
65
|
+
end
|
|
66
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: mpp_reader
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Bart Duchesne
|
|
8
|
+
bindir: exe
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies: []
|
|
12
|
+
description: 'Reads MS Project .mpp files (MPP14 format, Project 2010-2021) into structured
|
|
13
|
+
Ruby objects: tasks, resources, assignments and calendars. Binary format ported
|
|
14
|
+
from MPXJ. No native extensions, no runtime dependencies.'
|
|
15
|
+
email:
|
|
16
|
+
- bduc@dyndaco.be
|
|
17
|
+
executables:
|
|
18
|
+
- mpp_reader
|
|
19
|
+
extensions: []
|
|
20
|
+
extra_rdoc_files: []
|
|
21
|
+
files:
|
|
22
|
+
- CHANGELOG.md
|
|
23
|
+
- LICENSE.txt
|
|
24
|
+
- README.md
|
|
25
|
+
- exe/mpp_reader
|
|
26
|
+
- lib/mpp_reader.rb
|
|
27
|
+
- lib/mpp_reader/assignment.rb
|
|
28
|
+
- lib/mpp_reader/blocks/fixed_data.rb
|
|
29
|
+
- lib/mpp_reader/blocks/fixed_meta.rb
|
|
30
|
+
- lib/mpp_reader/blocks/props.rb
|
|
31
|
+
- lib/mpp_reader/blocks/var2_data.rb
|
|
32
|
+
- lib/mpp_reader/blocks/var_meta.rb
|
|
33
|
+
- lib/mpp_reader/calendar.rb
|
|
34
|
+
- lib/mpp_reader/cfbf/directory.rb
|
|
35
|
+
- lib/mpp_reader/cfbf/fat.rb
|
|
36
|
+
- lib/mpp_reader/cfbf/file.rb
|
|
37
|
+
- lib/mpp_reader/cfbf/header.rb
|
|
38
|
+
- lib/mpp_reader/cli.rb
|
|
39
|
+
- lib/mpp_reader/comp_obj.rb
|
|
40
|
+
- lib/mpp_reader/decode.rb
|
|
41
|
+
- lib/mpp_reader/errors.rb
|
|
42
|
+
- lib/mpp_reader/field_map.rb
|
|
43
|
+
- lib/mpp_reader/field_reader.rb
|
|
44
|
+
- lib/mpp_reader/field_tables.rb
|
|
45
|
+
- lib/mpp_reader/project.rb
|
|
46
|
+
- lib/mpp_reader/reader14.rb
|
|
47
|
+
- lib/mpp_reader/relation.rb
|
|
48
|
+
- lib/mpp_reader/resource.rb
|
|
49
|
+
- lib/mpp_reader/rtf_text.rb
|
|
50
|
+
- lib/mpp_reader/task.rb
|
|
51
|
+
- lib/mpp_reader/version.rb
|
|
52
|
+
homepage: https://github.com/bduc/ms-project-reader-ruby
|
|
53
|
+
licenses:
|
|
54
|
+
- LGPL-2.1-or-later
|
|
55
|
+
metadata:
|
|
56
|
+
source_code_uri: https://github.com/bduc/ms-project-reader-ruby
|
|
57
|
+
changelog_uri: https://github.com/bduc/ms-project-reader-ruby/blob/main/CHANGELOG.md
|
|
58
|
+
bug_tracker_uri: https://github.com/bduc/ms-project-reader-ruby/issues
|
|
59
|
+
rubygems_mfa_required: 'true'
|
|
60
|
+
rdoc_options: []
|
|
61
|
+
require_paths:
|
|
62
|
+
- lib
|
|
63
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - ">="
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '3.1'
|
|
68
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
69
|
+
requirements:
|
|
70
|
+
- - ">="
|
|
71
|
+
- !ruby/object:Gem::Version
|
|
72
|
+
version: '0'
|
|
73
|
+
requirements: []
|
|
74
|
+
rubygems_version: 4.0.3
|
|
75
|
+
specification_version: 4
|
|
76
|
+
summary: Pure Ruby reader for Microsoft Project .mpp files
|
|
77
|
+
test_files: []
|