pandocomatic 0.2.5.0.betac → 0.2.5.0.betad

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 83da5ac4d9f87c0b60d2ec6275604fbc8c840448a0d4b2e8bcd3d814f43851a1
4
- data.tar.gz: 6c2aa725f3476c529b743a337b26e19c3135440e6972a5d8121c100cd8c95202
3
+ metadata.gz: c46b6b2c7d745668a59b28bb2f38823ece50c90f24bd53e31c586489e429cb88
4
+ data.tar.gz: 336889e4f77b7511034f62cb21ab42c01095818e79ebd3d758f30aecc8e10278
5
5
  SHA512:
6
- metadata.gz: 142b4f1a64096eb3ae1b7311d2639020d6af74af98c0cc28acf90fe6018dcdb9b7685408114452ba4b50f54acbc8629afb1a40ebf64a886e0f7bdaf4a388b8aa
7
- data.tar.gz: 1aa6c6e996c8c667f738ce40b09d5dafc2251536a1b2481502dca6627262fe2c84ca16597c0f62afcefec86b513e44bfaae2ec35926765b64f01d9f0061a6701
6
+ metadata.gz: f1f6304e2838a32387b88fd4a18f855e1ee90159262635b9f2cd2b3f568523868dcb157499dcd6fb886f77769ca5a687f68427f24ffb233cb8e6f914e0de9e00
7
+ data.tar.gz: 5f13e1a64e6b012726d55053df8bf0eb9a7bca879201f3c71d164ae526f6ad7db721b0032616471223e7910d88b202cc44791361ec1812e1fc06ae459e16bcc1
@@ -90,7 +90,9 @@ module Pandocomatic
90
90
  #
91
91
  # @return [String]
92
92
  def to_s
93
- "convert #{File.basename @src} #{"-> #{File.basename @dst}" unless @dst.nil?}"
93
+ str = "convert #{File.basename @src} #{"-> #{File.basename @dst}" unless @dst.nil?}"
94
+ str += "\n\t encountered multiple pandocomatic properties in the metadata. Only the last occurring pandocomatic property is being used." unless @metadata.unique?
95
+ str
94
96
  end
95
97
 
96
98
  private
@@ -46,7 +46,7 @@ module Pandocomatic
46
46
  super()
47
47
  @config = config
48
48
  @src = src
49
-
49
+
50
50
  metadata = PandocMetadata.load_file @src
51
51
 
52
52
  subcommands = []
@@ -23,11 +23,14 @@ module Pandocomatic
23
23
  # Generic class to handle input files and directories in a general manner.
24
24
  class Input
25
25
 
26
+ attr_reader :errors
27
+
26
28
  # Create a new Input
27
29
  #
28
30
  # @param input [String[]] a list of input files
29
31
  def initialize(input)
30
32
  @input_files = input
33
+ @errors = []
31
34
  end
32
35
 
33
36
  # The absolute path to this Input
@@ -57,6 +60,13 @@ module Pandocomatic
57
60
  def directory?()
58
61
  File.directory? @input_files.first
59
62
  end
63
+
64
+ # Does this input have encountered any errors?
65
+ #
66
+ # @return Boolean
67
+ def has_errors?()
68
+ not @errors.empty?
69
+ end
60
70
 
61
71
  # A string representation of this Input
62
72
  #
@@ -38,7 +38,7 @@ module Pandocomatic
38
38
  #
39
39
  # @return String
40
40
  def name()
41
- @tmp_file
41
+ @tmp_file.path
42
42
  end
43
43
 
44
44
  # Is this input a directory? A MultipleFilesInput cannot be a
@@ -83,35 +83,18 @@ module Pandocomatic
83
83
  # created in the same directory as the first input file
84
84
  @tmp_file = Tempfile.new(@input_files.first, File.dirname(self.absolute_path))
85
85
 
86
- # Read first file and its metadata
87
- metadata = PandocMetadata.load_file @input_files.first
86
+ contents = @input_files.map{|file|
87
+ @errors.push IOError.new(:file_does_not_exist, nil, file) unless File.exist? file
88
+ @errors.push IOError.new(:file_is_not_a_file, nil, file) unless File.file? file
89
+ @errors.push IOError.new(:file_is_not_readable, nil, file) unless File.readable? file
90
+ File.read File.absolute_path(file)
91
+ }.join("\n\n")
88
92
 
89
- strip_metadata =
90
- "markdown" == if metadata.pandoc_options.has_key? "from" then
91
- metadata.pandoc_options["from"]
92
- else
93
- template = @config.determine_template @input_files.first
94
- if not template.nil? and not template.dig("pandoc", "from").nil? then
95
- template["pandoc"]["from"]
96
- else
97
- if @config.is_markdown_file? @input_files.first then
98
- "markdown"
99
- else
100
- "unknown"
101
- end
102
- end
103
- end
104
-
105
- @input_files.each_with_index do |filename, index|
106
- input = File.read File.absolute_path(filename)
107
- input = if 0 == index or not strip_metadata or not @config.is_markdown_file? filename then
108
- input
109
- else
110
- PandocMetadata.remove_metadata(input)
111
- end
112
- @tmp_file.write input
93
+ if not PandocMetadata.unique_pandocomatic_property? contents
94
+ warn "\nWarning: Encountered the pandocomatic metadata property more than once. Only the last occurrence of the pandocomatic metadata property is being used. Most likely you only want to use a pandocomatic metadata property in the first input file.\n\n"
113
95
  end
114
96
 
97
+ @tmp_file.write contents
115
98
  @tmp_file.rewind
116
99
  end
117
100
  end
@@ -36,7 +36,7 @@ module Pandocomatic
36
36
  #
37
37
  # @param input_document [String] a path to an input file
38
38
  # @return [String] the input document's metadata in the YAML format.
39
- def self.extract_metadata input_document
39
+ def self.extract_metadata(input_document)
40
40
  begin
41
41
  pandoc2yaml File.read(input_document)
42
42
  rescue StandardError => e
@@ -65,19 +65,31 @@ module Pandocomatic
65
65
  .join("\n")
66
66
  end
67
67
 
68
+ # Does the pandocomatic metadata property occur at most once?
69
+ #
70
+ # @return [Boolean] False if the pandocomatic metadata property does
71
+ # occur multiple times.
72
+ def self.unique_pandocomatic_property?(input)
73
+ 1 >= input
74
+ .scan(METADATA_BLOCK)
75
+ .map {|match| YAML.load "---#{match.join()}..."}
76
+ .count {|yaml| yaml.key? "pandocomatic_" or yaml.key? "pandocomatic"}
77
+ end
78
+
68
79
  # Collect the metadata embedded in the src file and create a new
69
80
  # PandocMetadata instance
70
81
  #
71
82
  # @param src [String] the path to the file to load metadata from
72
83
  # @return [PandocMetadata] the metadata in the source file, or an empty
73
84
  # one if no such metadata is contained in the source file.
74
- def self.load_file src
75
- yaml_metadata = extract_metadata src
85
+ def self.load_file(src)
86
+ input = File.read src
87
+ yaml_metadata = pandoc2yaml input
76
88
 
77
89
  if yaml_metadata.empty? then
78
- return PandocMetadata.new
90
+ PandocMetadata.new
79
91
  else
80
- return PandocMetadata.new YAML.load(yaml_metadata)
92
+ PandocMetadata.new YAML.load(yaml_metadata), unique_pandocomatic_property?(input)
81
93
  end
82
94
  end
83
95
 
@@ -86,10 +98,21 @@ module Pandocomatic
86
98
  #
87
99
  # @param hash [Hash] initial properties for this new PandocMetadata
88
100
  # object
101
+ # @param unique [Boolean = true] the pandocomatic property did occur
102
+ # at most once.
89
103
  # @return [PandocMetadata]
90
- def initialize hash = {}
91
- super
104
+ def initialize(hash = {}, unique = true)
105
+ super()
92
106
  merge! hash
107
+ @unique = unique
108
+ end
109
+
110
+ # Did the metadata contain multiple pandocomatic blocks?
111
+ #
112
+ # @return [Boolean] True if at most one pandocomatic block was present
113
+ # in the metadata
114
+ def unique?()
115
+ @unique
93
116
  end
94
117
 
95
118
  # Does this PandocMetadata object use a template?
@@ -66,6 +66,14 @@ module Pandocomatic
66
66
  # version option. If given, the help is printed.
67
67
  HelpPrinter.new().print
68
68
  else
69
+ # When using multiple input files, errors reading these
70
+ # files are already encountered at this point. If there
71
+ # are any errors, there is no reason to continue.
72
+ if configuration.input.has_errors?
73
+ ConfigurationErrorsPrinter.new(configuration.input.all_errors).print
74
+ exit ERROR_STATUS
75
+ end
76
+
69
77
  # Run the pandocomatic converter configured according to the options
70
78
  # given.
71
79
  #
@@ -108,7 +116,7 @@ module Pandocomatic
108
116
  warn "An unexpected error has occurred. You can report this bug via https://github.com/htdebeer/pandocomatic/issues/new."
109
117
  raise e
110
118
  ensure
111
- configuration.clean_up!
119
+ configuration.clean_up! unless configuration.nil?
112
120
  end
113
121
  end
114
122
  end
metadata CHANGED
@@ -1,53 +1,53 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pandocomatic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5.0.betac
4
+ version: 0.2.5.0.betad
5
5
  platform: ruby
6
6
  authors:
7
7
  - Huub de Beer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-22 00:00:00.000000000 Z
11
+ date: 2019-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: paru
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: 0.3.2
20
17
  - - ">="
21
18
  - !ruby/object:Gem::Version
22
19
  version: 0.3.2.0
20
+ - - "~>"
21
+ - !ruby/object:Gem::Version
22
+ version: 0.3.2
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - "~>"
28
- - !ruby/object:Gem::Version
29
- version: 0.3.2
30
27
  - - ">="
31
28
  - !ruby/object:Gem::Version
32
29
  version: 0.3.2.0
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: 0.3.2
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: optimist
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - "~>"
37
+ - - ">="
38
38
  - !ruby/object:Gem::Version
39
39
  version: 3.0.0
40
- - - ">="
40
+ - - "~>"
41
41
  - !ruby/object:Gem::Version
42
42
  version: 3.0.0
43
43
  type: :runtime
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
46
46
  requirements:
47
- - - "~>"
47
+ - - ">="
48
48
  - !ruby/object:Gem::Version
49
49
  version: 3.0.0
50
- - - ">="
50
+ - - "~>"
51
51
  - !ruby/object:Gem::Version
52
52
  version: 3.0.0
53
53
  - !ruby/object:Gem::Dependency
@@ -156,7 +156,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
156
156
  requirements:
157
157
  - pandoc, a universal document converer <http://pandoc.org>
158
158
  rubyforge_project:
159
- rubygems_version: 2.7.7
159
+ rubygems_version: 3.0.0.beta1
160
160
  signing_key:
161
161
  specification_version: 4
162
162
  summary: Automating the use of pandoc