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.
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: []