Class: Metanorma::Release::AssetProcessor

Inherits:
Object
  • Object
show all
Defined in:
lib/metanorma/release/asset_processor.rb

Defined Under Namespace

Classes: ProcessResult

Constant Summary collapse

CANONICALIZE_PATTERN =
/-ed\d+(\.\d+)?-/

Instance Method Summary collapse

Constructor Details

#initialize(output_dir:, routing:, canonicalize: true) ⇒ AssetProcessor

Returns a new instance of AssetProcessor.



16
17
18
19
20
# File 'lib/metanorma/release/asset_processor.rb', line 16

def initialize(output_dir:, routing:, canonicalize: true)
  @output_dir = output_dir
  @routing = routing
  @canonicalize = canonicalize
end

Instance Method Details

#process(zip_data, metadata) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/metanorma/release/asset_processor.rb', line 22

def process(zip_data, )
  files = []

  Dir.mktmpdir do |tmp_dir|
    zip_path = File.join(tmp_dir, 'archive.zip')
    File.binwrite(zip_path, zip_data)

    Zip::File.open(zip_path) do |zip_file|
      zip_file.each do |entry|
        next if entry.directory?

        raw_name = File.basename(entry.name)
        file_name = @canonicalize ? canonicalize_name(raw_name) : raw_name
        relative_path = @routing.compute_path(file_name, )
        dest_path = File.join(@output_dir, relative_path)

        FileUtils.mkdir_p(File.dirname(dest_path))
        entry.extract(dest_path) { true }

        files << DocumentFile.new(name: file_name, path: relative_path)
      end
    end
  end

  ProcessResult.new(files: files, channels: ['channels'])
end