ghostwriter 1.3.0 → 1.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b1d172e04147a0336191fbdff8bcf50df22ca418127dc3fadd79c45b2137ad65
4
- data.tar.gz: d2ad779f40767c1c40088fd9d50593ec9ba2b811168fd13f94f191c721522546
3
+ metadata.gz: c2bacc9e2d98409f7220a3b21d0cc57f18ff9c6768fb3175c0f06fdbef767e95
4
+ data.tar.gz: 5dba28996b1589fb94c0edbf7b3897a7610267438389ed57dbb009377544be93
5
5
  SHA512:
6
- metadata.gz: 24a4919b7fff1b061c9bcd2dbee0144ac42a05b3383a3cc3769bfd2afab3373a48785f86e1e002e43597d06c7cd348d471057358597c461e53e6f8b129028f89
7
- data.tar.gz: 2267a86a05ee535949434a443efffe62d4d88879dbae58ff53b6d4eb03b21445d896815639c204f8e9a325f2283d1ee82ea85917a0e6b5940e9cdc97a0241266
6
+ metadata.gz: 101966376b10eec407d0a5b98bdb11ddfa3830c4532bc77b5e4ad4aeba41e05925c72dd78d25b6fc34f507f7ea9a32809757f735f8d6b6aa15d079a436c0db9b
7
+ data.tar.gz: dc870788a2971023a8276369d2953aa68f801edf31eeefd7bd6513400d453cf6e02fa728856f67a892e91fd8535c5607cca1cb244302d18e76bdc1c089b208e3
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- ruby-3.1.4
1
+ ruby-3.3.0
data/Gemfile CHANGED
@@ -7,12 +7,12 @@ gemspec
7
7
 
8
8
  group :development do
9
9
  gem 'bundler', '~> 2.4'
10
- gem 'rake', '~> 13.0'
11
- gem 'rubocop', '~> 1.55'
12
- gem 'rubocop-performance', '~> 1.19'
10
+ gem 'rake', '~> 13.2'
11
+ gem 'rubocop', '~> 1.69'
12
+ gem 'rubocop-performance', '~> 1.23'
13
13
  end
14
14
 
15
15
  group :test do
16
- gem 'rspec', '~> 3.12'
16
+ gem 'rspec', '~> 3.13'
17
17
  gem 'simplecov', '~> 0.22'
18
18
  end
data/RELEASE_NOTES.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # Release Notes
2
2
 
3
+ ## 1.4.0 (2023-09-13)
4
+
5
+ ### Major
6
+
7
+ * none
8
+
9
+ ### Minor
10
+
11
+ * Support for graceful handling of nested tables
12
+ * Increased minimum ruby to 3.3
13
+
14
+ ### Bugfixes
15
+
16
+ * none
17
+
3
18
  ## 1.3.0 (2023-09-13)
4
19
 
5
20
  ### Major
data/Rakefile CHANGED
@@ -1,5 +1,9 @@
1
+ #!/usr/bin/env rake
1
2
  # frozen_string_literal: true
2
3
 
4
+ # No longer require bundle exec
5
+ Gem.use_gemdeps 'Gemfile'
6
+
3
7
  require 'bundler/gem_tasks'
4
8
  require 'rspec/core/rake_task'
5
9
 
data/ghostwriter.gemspec CHANGED
@@ -31,7 +31,7 @@ Gem::Specification.new do |spec|
31
31
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
32
32
  spec.require_paths = ['lib']
33
33
 
34
- spec.required_ruby_version = '>= 3.1'
34
+ spec.required_ruby_version = '>= 3.3'
35
35
 
36
36
  spec.add_dependency 'nokogiri', '>= 1.12'
37
37
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Ghostwriter
4
- VERSION = '1.3.0'
4
+ VERSION = '1.4.0'
5
5
  end
@@ -149,21 +149,43 @@ module Ghostwriter
149
149
  module TableWriter
150
150
  def replace_tables(doc)
151
151
  doc.css('table').each do |table|
152
+ # TODO: nokogiri chokes on table:not(table table), but support may come later https://github.com/sparklemotion/nokogiri/issues/3207
153
+ next if complex? table
154
+
152
155
  # remove whitespace between nodes
153
156
  table.search('//text()[normalize-space()=""]').remove
154
157
 
155
158
  column_sizes = calculate_column_sizes(table)
156
159
 
157
- table.search('./thead/tr', './tbody/tr', './tr').each do |row|
158
- replace_table_nodes(row, column_sizes)
159
-
160
- row.replace("#{ row.inner_html }#{ @table_column }\n")
161
- end
160
+ fancy_rows! table, column_sizes
162
161
 
163
162
  add_table_header_underline(table, column_sizes)
164
163
 
165
164
  table.replace("\n#{ table.inner_html }\n")
166
165
  end
166
+
167
+ doc.css('table table').each do |table|
168
+ simple_rows! table
169
+ end
170
+ end
171
+
172
+ # complex just means it contains a table or is itself nested
173
+ def complex?(table)
174
+ !table.css('table').empty? || !table.ancestors('table').empty?
175
+ end
176
+
177
+ def fancy_rows!(table, column_sizes)
178
+ table.search('./thead/tr', './tbody/tr', './tr').each do |row|
179
+ replace_table_nodes(row, column_sizes)
180
+
181
+ row.replace("#{ row.inner_html }#{ @table_column }\n")
182
+ end
183
+ end
184
+
185
+ def simple_rows!(table)
186
+ table.search('./thead/tr', './tbody/tr', './tr').each do |row|
187
+ row.replace("\n#{ row.inner_html }\n")
188
+ end
167
189
  end
168
190
 
169
191
  def calculate_column_sizes(table)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ghostwriter
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robin Miller
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-09-13 00:00:00.000000000 Z
11
+ date: 2025-01-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -65,14 +65,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: '3.1'
68
+ version: '3.3'
69
69
  required_rubygems_version: !ruby/object:Gem::Requirement
70
70
  requirements:
71
71
  - - ">="
72
72
  - !ruby/object:Gem::Version
73
73
  version: '0'
74
74
  requirements: []
75
- rubygems_version: 3.4.18
75
+ rubygems_version: 3.5.3
76
76
  signing_key:
77
77
  specification_version: 4
78
78
  summary: Converts HTML to plain text