Skip to content

Commit 07eae21

Browse files
authored
Merge pull request #73 from agrberg/ar/humanizer-sub-daily-support
Add humanizer support for hourly, minutely, and secondly frequencies
2 parents 0f5b2a2 + 0ca60e5 commit 07eae21

2 files changed

Lines changed: 74 additions & 1 deletion

File tree

lib/rrule/humanizer.rb

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ def to_s
4848

4949
raise 'Implement Until' if until_option
5050
if count_option
51-
add 'for'
51+
add 'for' unless subdaily?
5252
add count_option
5353
add plural?(count_option) ? 'times' : 'time'
5454
end
@@ -89,6 +89,25 @@ def plural?(num)
8989
num.to_i % 100 != 1
9090
end
9191

92+
def subdaily?
93+
%w[HOURLY MINUTELY SECONDLY].include?(freq_option)
94+
end
95+
96+
def hourly
97+
add interval_option if interval_option != 1
98+
add plural?(interval_option) ? 'hours' : 'hour'
99+
end
100+
101+
def minutely
102+
add interval_option if interval_option != 1
103+
add plural?(interval_option) ? 'minutes' : 'minute'
104+
end
105+
106+
def secondly
107+
add interval_option if interval_option != 1
108+
add plural?(interval_option) ? 'seconds' : 'second'
109+
end
110+
92111
def daily
93112
add interval_option if interval_option != 1
94113

spec/rule_spec.rb

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2824,6 +2824,60 @@
28242824

28252825
it { expect(rrule.humanize).to eq 'every month on the 14th and 15th' }
28262826
end
2827+
2828+
context 'every hour' do
2829+
let(:rule) { 'FREQ=HOURLY;INTERVAL=1' }
2830+
2831+
it { expect(rrule.humanize).to eq 'every hour' }
2832+
end
2833+
2834+
context 'every 2 hours' do
2835+
let(:rule) { 'FREQ=HOURLY;INTERVAL=2' }
2836+
2837+
it { expect(rrule.humanize).to eq 'every 2 hours' }
2838+
end
2839+
2840+
context 'every 2 hours 5 times' do
2841+
let(:rule) { 'FREQ=HOURLY;INTERVAL=2;COUNT=5' }
2842+
2843+
it { expect(rrule.humanize).to eq 'every 2 hours 5 times' }
2844+
end
2845+
2846+
context 'every minute' do
2847+
let(:rule) { 'FREQ=MINUTELY;INTERVAL=1' }
2848+
2849+
it { expect(rrule.humanize).to eq 'every minute' }
2850+
end
2851+
2852+
context 'every 30 minutes' do
2853+
let(:rule) { 'FREQ=MINUTELY;INTERVAL=30' }
2854+
2855+
it { expect(rrule.humanize).to eq 'every 30 minutes' }
2856+
end
2857+
2858+
context 'every 15 minutes 10 times' do
2859+
let(:rule) { 'FREQ=MINUTELY;INTERVAL=15;COUNT=10' }
2860+
2861+
it { expect(rrule.humanize).to eq 'every 15 minutes 10 times' }
2862+
end
2863+
2864+
context 'every second' do
2865+
let(:rule) { 'FREQ=SECONDLY;INTERVAL=1' }
2866+
2867+
it { expect(rrule.humanize).to eq 'every second' }
2868+
end
2869+
2870+
context 'every 30 seconds' do
2871+
let(:rule) { 'FREQ=SECONDLY;INTERVAL=30' }
2872+
2873+
it { expect(rrule.humanize).to eq 'every 30 seconds' }
2874+
end
2875+
2876+
context 'every hour 1 time' do
2877+
let(:rule) { 'FREQ=HOURLY;INTERVAL=1;COUNT=1' }
2878+
2879+
it { expect(rrule.humanize).to eq 'every hour 1 time' }
2880+
end
28272881
end
28282882

28292883
describe '#is_finite?' do

0 commit comments

Comments
 (0)