Skip to content

Commit 79f7a94

Browse files
authored
Merge pull request #536 from gjtorikian/do-time-yourself
Do time duration yourself
2 parents 966a222 + 7eee152 commit 79f7a94

File tree

3 files changed

+95
-9
lines changed

3 files changed

+95
-9
lines changed

html-proofer.gemspec

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ Gem::Specification.new do |gem|
2626
gem.add_dependency 'yell', '~> 2.0'
2727
gem.add_dependency 'parallel', '~> 1.3'
2828
gem.add_dependency 'addressable', '~> 2.3'
29-
gem.add_dependency 'timerizer', '~> 0.3'
3029

3130
gem.add_development_dependency 'redcarpet'
3231
gem.add_development_dependency 'rubocop'

lib/html-proofer/cache.rb

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
# frozen_string_literal: true
22

33
require_relative 'utils'
4-
4+
require 'date'
55
require 'json'
6-
require 'timerizer'
76

87
module HTMLProofer
98
class Cache
@@ -18,15 +17,16 @@ def initialize(logger, options)
1817
@logger = logger
1918
@cache_log = {}
2019

20+
@cache_datetime = DateTime.now
21+
@cache_time = @cache_datetime.to_time
22+
2123
if options.nil? || options.empty?
2224
define_singleton_method('use_cache?') { false }
2325
else
2426
define_singleton_method('use_cache?') { true }
2527
setup_cache!(options)
2628
@parsed_timeframe = parsed_timeframe(options[:timeframe])
2729
end
28-
29-
@cache_time = Time.now
3030
end
3131

3232
def within_timeframe?(time)
@@ -46,13 +46,13 @@ def parsed_timeframe(timeframe)
4646
time = time.to_i
4747
case date
4848
when 'M'
49-
time.months.ago
49+
time_ago(time, :months)
5050
when 'w'
51-
time.weeks.ago
51+
time_ago(time, :weeks)
5252
when 'd'
53-
time.days.ago
53+
time_ago(time, :days)
5454
when 'h'
55-
time.hours.ago
55+
time_ago(time, :hours)
5656
else
5757
raise ArgumentError, "#{date} is not a valid timeframe!"
5858
end
@@ -162,5 +162,20 @@ def setup_cache!(options)
162162
contents = File.read(cache_file)
163163
@cache_log = contents.empty? ? {} : JSON.parse(contents)
164164
end
165+
166+
private
167+
168+
def time_ago(measurement, unit)
169+
case unit
170+
when :months
171+
@cache_datetime >> -measurement
172+
when :weeks
173+
@cache_datetime - measurement * 7
174+
when :days
175+
@cache_datetime - measurement
176+
when :hours
177+
@cache_datetime - Rational(measurement/24.0)
178+
end.to_time
179+
end
165180
end
166181
end

spec/html-proofer/cache_spec.rb

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,82 @@
99

1010
let(:default_cache_options) { { storage_dir: storage_dir } }
1111

12+
let (:logger) { HTMLProofer::Log.new(:debug) }
13+
1214
def read_cache(cache_file)
1315
JSON.parse File.read(cache_file)
1416
end
1517

18+
context 'with time parser' do
19+
it 'understands months' do
20+
now_time = Time.local(2019, 9, 6, 12, 0, 0)
21+
Timecop.freeze(now_time)
22+
23+
cache = HTMLProofer::Cache.new(logger, { timeframe: '2M' })
24+
25+
check_time = Time.local(2019, 8, 6, 12, 0, 0).to_s
26+
27+
expect(cache.within_timeframe?(check_time)).to be true
28+
29+
check_time = Time.local(2019, 5, 6, 12, 0, 0).to_s
30+
31+
expect(cache.within_timeframe?(check_time)).to be false
32+
33+
Timecop.return
34+
end
35+
36+
it 'understands days' do
37+
now_time = Time.local(2019, 9, 6, 12, 0, 0)
38+
Timecop.freeze(now_time)
39+
40+
cache = HTMLProofer::Cache.new(logger, { timeframe: '2d' })
41+
42+
check_time = Time.local(2019, 9, 5, 12, 0, 0).to_s
43+
44+
expect(cache.within_timeframe?(check_time)).to be true
45+
46+
check_time = Time.local(2019, 5, 6, 12, 0, 0).to_s
47+
48+
expect(cache.within_timeframe?(check_time)).to be false
49+
50+
Timecop.return
51+
end
52+
53+
it 'understands weeks' do
54+
now_time = Time.local(2019, 9, 6, 12, 0, 0)
55+
Timecop.freeze(now_time)
56+
57+
cache = HTMLProofer::Cache.new(logger, { timeframe: '2w' })
58+
59+
check_time = Time.local(2019, 8, 30, 12, 0, 0).to_s
60+
61+
expect(cache.within_timeframe?(check_time)).to be true
62+
63+
check_time = Time.local(2019, 5, 6, 12, 0, 0).to_s
64+
65+
expect(cache.within_timeframe?(check_time)).to be false
66+
67+
Timecop.return
68+
end
69+
70+
it 'understands hours' do
71+
now_time = Time.local(2019, 9, 6, 12, 0, 0)
72+
Timecop.freeze(now_time)
73+
74+
cache = HTMLProofer::Cache.new(logger, { timeframe: '3h' })
75+
76+
check_time = Time.local(2019, 9, 6, 9, 0, 0).to_s
77+
78+
expect(cache.within_timeframe?(check_time)).to be true
79+
80+
check_time = Time.local(2019, 5, 6, 12, 0, 0).to_s
81+
82+
expect(cache.within_timeframe?(check_time)).to be false
83+
84+
Timecop.return
85+
end
86+
end
87+
1688
context 'with .htmlproofer.log' do
1789
let(:cache_file_name) { '.htmlproofer.log' }
1890

0 commit comments

Comments
 (0)