html-proofer 3.18.6 → 3.18.7

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: e2d6deb85601ff3f5e5df02999f1b55f29231e5658f1d4fa9986c002b3cc0263
4
- data.tar.gz: e20a007144a866b41b97eb36a964ca1372d693ade77acc69a9c9e706b353c8ef
3
+ metadata.gz: 406cf6b61f0416a7f9f6874cd43e855288bc047ff7e2ec8ba374acdc57c1898b
4
+ data.tar.gz: fc44f71f75c1b830182d2ef60aed3abcc816ee7671cb7c4d74c174e75edf30be
5
5
  SHA512:
6
- metadata.gz: c51154450eb20c04c0b7038effb12ab8d258457ea5560421b5a2a0739342504afebb8fd092fe4378838a076636ff2665eb691f513b8b34b49af2e89ffba988c2
7
- data.tar.gz: fcb7bf492588fabc991caf1f779fca14a7b553d3ce00dbf55ba24aebf3c39f7613af6a408d94c3a3faaeb21dceb8265ece91ca9bf4320aee7d4f3dca133ba4de
6
+ metadata.gz: 47501eb3aa242423f2e748ed52d3fa5ed8c9ae35c839602d27de0b1712a0c1e22d8cfe20781569d469439ecc75bc3f853100f6aae63ee1c3f6174641cc102f7e
7
+ data.tar.gz: 30348fc2649b3210038813bf05e24f10d0ca775e1253a2ba04c79c282b1822bc3ed89e45c0652e44889b9bf82a6022fdc25db70407425c144b15875fe0c53ad0
@@ -11,6 +11,8 @@ module HTMLProofer
11
11
  DEFAULT_STORAGE_DIR = File.join('tmp', '.htmlproofer')
12
12
  DEFAULT_CACHE_FILE_NAME = 'cache.log'
13
13
 
14
+ URI_REGEXP = URI::DEFAULT_PARSER.make_regexp
15
+
14
16
  attr_reader :exists, :cache_log, :storage_dir, :cache_file
15
17
 
16
18
  def initialize(logger, options)
@@ -30,6 +32,8 @@ module HTMLProofer
30
32
  end
31
33
 
32
34
  def within_timeframe?(time)
35
+ return false if time.nil?
36
+
33
37
  (@parsed_timeframe..@cache_time).cover?(Time.parse(time))
34
38
  end
35
39
 
@@ -71,10 +75,14 @@ module HTMLProofer
71
75
  @cache_log[clean_url(url)] = data
72
76
  end
73
77
 
74
- def detect_url_changes(found)
75
- existing_urls = @cache_log.keys.map { |url| clean_url(url) }
78
+ def detect_url_changes(found, type)
76
79
  found_urls = found.keys.map { |url| clean_url(url) }
77
80
 
81
+ # if there were no urls, bail
82
+ return {} if found_urls.empty?
83
+
84
+ existing_urls = @cache_log.keys.map { |url| clean_url(url) }
85
+
78
86
  # prepare to add new URLs detected
79
87
  additions = found.reject do |url, _|
80
88
  url = clean_url(url)
@@ -91,19 +99,20 @@ module HTMLProofer
91
99
  @logger.log :info, "Adding #{new_link_text} to the cache..."
92
100
 
93
101
  # remove from cache URLs that no longer exist
94
- del = 0
102
+ deletions = 0
95
103
  @cache_log.delete_if do |url, _|
96
104
  url = clean_url(url)
105
+
97
106
  if found_urls.include?(url)
98
107
  false
99
- else
108
+ elsif url_matches_type?(url, type)
100
109
  @logger.log :debug, "Removing #{url} from cache check"
101
- del += 1
110
+ deletions += 1
102
111
  true
103
112
  end
104
113
  end
105
114
 
106
- del_link_text = pluralize(del, 'link', 'links')
115
+ del_link_text = pluralize(deletions, 'link', 'links')
107
116
  @logger.log :info, "Removing #{del_link_text} from the cache..."
108
117
 
109
118
  additions
@@ -113,21 +122,22 @@ module HTMLProofer
113
122
  # caches need access to this file. Write a proper versioned
114
123
  # schema in the future
115
124
  def write
116
- file = {}
117
- file = JSON.parse(File.read(cache_file)) if File.exist?(cache_file)
118
- File.write(cache_file, file.merge(@cache_log).to_json)
125
+ File.write(cache_file, @cache_log.to_json)
119
126
  end
120
127
 
121
128
  def load?
122
129
  @load.nil?
123
130
  end
124
131
 
125
- def retrieve_urls(urls)
126
- urls_to_check = detect_url_changes(urls)
132
+ def retrieve_urls(urls, type)
133
+ urls_to_check = detect_url_changes(urls, type)
134
+
127
135
  @cache_log.each_pair do |url, cache|
128
136
  next if within_timeframe?(cache['time']) && cache['message'].empty? # these were successes to skip
129
137
 
130
- urls_to_check[url] = cache['filenames'] # recheck expired links
138
+ if url_matches_type?(url, type)
139
+ urls_to_check[url] = cache['filenames'] # recheck expired links
140
+ end
131
141
  end
132
142
  urls_to_check
133
143
  end
@@ -154,9 +164,9 @@ module HTMLProofer
154
164
 
155
165
  @cache_file = File.join(storage_dir, cache_file_name)
156
166
 
157
- return unless File.exist?(cache_file)
167
+ return unless File.exist?(@cache_file)
158
168
 
159
- contents = File.read(cache_file)
169
+ contents = File.read(@cache_file)
160
170
  @cache_log = contents.empty? ? {} : JSON.parse(contents)
161
171
  end
162
172
 
@@ -174,5 +184,10 @@ module HTMLProofer
174
184
  @cache_datetime - Rational(measurement / 24.0)
175
185
  end.to_time
176
186
  end
187
+
188
+ def url_matches_type?(url, type)
189
+ return true if type == :internal && url !~ URI_REGEXP
190
+ return true if type == :external && url =~ URI_REGEXP
191
+ end
177
192
  end
178
193
  end
@@ -238,7 +238,7 @@ module HTMLProofer
238
238
  end
239
239
 
240
240
  def load_internal_cache
241
- urls_to_check = @cache.retrieve_urls(@internal_urls)
241
+ urls_to_check = @cache.retrieve_urls(@internal_urls, :internal)
242
242
  cache_text = pluralize(urls_to_check.count, 'internal link', 'internal links')
243
243
  @logger.log :info, "Found #{cache_text} in the cache..."
244
244
 
@@ -26,7 +26,7 @@ module HTMLProofer
26
26
  @external_urls = remove_query_values
27
27
 
28
28
  if @cache.use_cache?
29
- urls_to_check = @cache.retrieve_urls(@external_urls)
29
+ urls_to_check = @cache.retrieve_urls(@external_urls, :external)
30
30
  external_link_checker(urls_to_check)
31
31
  @cache.write
32
32
  else
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module HTMLProofer
4
- VERSION = '3.18.6'
4
+ VERSION = '3.18.7'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: html-proofer
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.18.6
4
+ version: 3.18.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Garen Torikian
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-21 00:00:00.000000000 Z
11
+ date: 2021-03-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable