Class: MakePDF::PDFWriter

Inherits:
Object
  • Object
show all
Includes:
PathManip
Defined in:
lib/make_pdf.rb

Direct Known Subclasses

CommandBased::Writer, FirefoxPDFWriter

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from PathManip

#relative_path

Constructor Details

#initialize(input_base_url:, output_base_path:, input_scheme: "file", input_host: nil, logger: Logger.new(), **options) ⇒ PDFWriter

Returns a new instance of PDFWriter.

Raises:

  • (ArgumentError)


70
71
72
73
74
75
# File 'lib/make_pdf.rb', line 70

def initialize(input_base_url:, output_base_path:, input_scheme: "file", input_host: nil, logger: Logger.new() ,**options)
  @logger = logger
  raise ArgumentError.new("Scheme `#{input_scheme}` requires an `input_host`.") if input_scheme != "file" && input_host.nil?
  @options = options.merge({ input_base_url:, output_base_path:, input_scheme:, input_host: })

end

Instance Attribute Details

#loggerObject (readonly)

Returns the value of attribute logger.



68
69
70
# File 'lib/make_pdf.rb', line 68

def logger
  @logger
end

#output_dirObject (readonly)

Returns the value of attribute output_dir.



68
69
70
# File 'lib/make_pdf.rb', line 68

def output_dir
  @output_dir
end

#source_urlObject (readonly)

Returns the value of attribute source_url.



68
69
70
# File 'lib/make_pdf.rb', line 68

def source_url
  @source_url
end

Instance Method Details

#make_output_filename(file, input_location:, output_base_path:, output_dir: ".", **options) ⇒ Object



100
101
102
103
104
105
106
107
108
# File 'lib/make_pdf.rb', line 100

def make_output_filename(file, input_location:, output_base_path:, output_dir: ".", **options)
  @logger.verbose("make_output_filename(#{file}, #{input_location}, #{output_base_path})")
  filename = make_pdf_filename(file, output_base_path:, output_dir:, input_location:,  **options) 
  output_base_path = path_of(output_base_path)
  output = output_base_path / relative_path_of(output_dir) / filename
  FileUtils::mkdir_p(output.dirname)
  @logger.debug("filename: #{filename} ⇒ #{output}")
  output
end

#make_pdf_filename(file, output_base_path:, input_location:, output_dir:, **options) ⇒ Object



92
93
94
95
96
97
98
# File 'lib/make_pdf.rb', line 92

def make_pdf_filename(file, output_base_path:, input_location:, output_dir:, **options)
  base_path = path_of(output_base_path) 
  filepath = make_relative_file(file, input_location:).sub_ext(".pdf")
  result = base_path / relative_path_of(output_dir) / filepath
  @logger.verbose("make_pdf_filename(#{file}, #{output_base_path}) → base_path: #{base_path}, filepath: #{filepath} ⇒ #{result}")
  result
end

#make_relative_file(file, input_location:, **options) ⇒ Object



77
78
79
# File 'lib/make_pdf.rb', line 77

def make_relative_file(file, input_location:, **options)
  path_of(file).relative_path_from(path_of(input_location))
end

#make_source_url(file, input_base_url:, output_base_path:, input_scheme:, input_host:, input_location:, **options) ⇒ Object



81
82
83
84
85
86
87
88
89
90
# File 'lib/make_pdf.rb', line 81

def make_source_url(file, input_base_url:, output_base_path:, input_scheme: , input_host: , input_location:, **options)
  target_file = make_relative_file(file, input_location:, **options)
  input_location = path_of(input_location)
  input_base_url = relative_path_of(input_base_url)
  if (input_scheme != "file")
    return input_scheme + "://" + input_host + "/" + (input_base_url / target_file).to_path
  else
    return (input_location / input_location / target_file).to_path
  end
end

#process(file, version: [], **options) ⇒ Object



110
111
112
113
114
115
116
117
118
119
# File 'lib/make_pdf.rb', line 110

def process(file, version: [], **options)
  options = @options.merge(options)
  output_filename = make_output_filename(file, version: version, **options)
  write(
    make_source_url(file, vesrsion: version, **options),
    output_filename,
    **options
  )
  output_filename
end