dateseq 0.0.5 → 1.0.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 +4 -4
- data/README.md +1 -0
- data/bin/dateseq +3 -0
- data/lib/dateseq/version.rb +1 -1
- data/lib/dateseq.rb +20 -0
- data/spec/dateseq_spec.rb +37 -9
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9d5b585480ff9b265644656e7ce47d257715e10ba421d3f077a1032df08b34b7
|
4
|
+
data.tar.gz: 8ed9bf1daf04981a1f77ca2d302bd946cedd8a8dec4d44a4605c064db260aaa9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b17fefafc9fe3a8317854742111ce7cf1fd69d04af20e355553899c47ab3a67529fc957ca86ed476a6a0f2a47f4dd34d5b23f8d6beaa9c46867bb4e69c8bca5f
|
7
|
+
data.tar.gz: 17b144155d8d1a626f5a57636990181fd006858c06d836c79dc1599121e0232284e6846529d9ffd8281c8adf43211a8b1810cca50f1c8ae2c4d1ddafd68c0015
|
data/README.md
CHANGED
@@ -35,6 +35,7 @@ Or install it yourself as:
|
|
35
35
|
-f, --format FORMAT Set date format (default is '%Y%m%d')
|
36
36
|
-s, --separator SEP Set separator charactor (default is '\n')
|
37
37
|
-i, --increments NUM Set date increment steps (default is 1)
|
38
|
+
-m, --monthly Set to monthly mode
|
38
39
|
-h, --help Show this message
|
39
40
|
-v, --version Show version
|
40
41
|
|
data/bin/dateseq
CHANGED
@@ -23,6 +23,9 @@ opt.on('-i', '--increments NUM',
|
|
23
23
|
'Set date increment steps (default is 1)') do |v|
|
24
24
|
options[:increments] = v.to_i
|
25
25
|
end
|
26
|
+
opt.on('-m', '--monthly', 'Set to monthly mode') do
|
27
|
+
options[:mode] = :monthly
|
28
|
+
end
|
26
29
|
opt.on('-h', '--help', 'Show this message') do
|
27
30
|
abort(opt.help)
|
28
31
|
end
|
data/lib/dateseq/version.rb
CHANGED
data/lib/dateseq.rb
CHANGED
@@ -9,16 +9,36 @@ module Dateseq
|
|
9
9
|
@format = options[:format] || '%Y%m%d'
|
10
10
|
@sep = options[:sep] || "\n"
|
11
11
|
@increments = options[:increments] || 1
|
12
|
+
@mode = options[:mode] || :daily
|
12
13
|
end
|
13
14
|
|
14
15
|
def sequence(from_date, to_date)
|
15
16
|
from = Date.parse(from_date)
|
16
17
|
to = Date.parse(to_date)
|
18
|
+
case @mode
|
19
|
+
when :daily
|
20
|
+
sequence_daily(from, to)
|
21
|
+
when :monthly
|
22
|
+
sequence_monthly(from, to)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def sequence_daily(from, to)
|
17
27
|
from.step(to, @increments).map do |date|
|
18
28
|
date.strftime(@format)
|
19
29
|
end
|
20
30
|
end
|
21
31
|
|
32
|
+
def sequence_monthly(from, to)
|
33
|
+
i = 0
|
34
|
+
res = []
|
35
|
+
while (date = from >> i) <= to
|
36
|
+
res << date.strftime(@format)
|
37
|
+
i += @increments
|
38
|
+
end
|
39
|
+
res
|
40
|
+
end
|
41
|
+
|
22
42
|
def sequence_str(from_date, to_date)
|
23
43
|
sequence(from_date, to_date).join(@sep)
|
24
44
|
end
|
data/spec/dateseq_spec.rb
CHANGED
@@ -21,29 +21,29 @@ describe Dateseq::Generator do
|
|
21
21
|
|
22
22
|
let(:generator) { described_class.new(options) }
|
23
23
|
|
24
|
-
describe '#sequence' do
|
24
|
+
describe '#sequence daily' do
|
25
25
|
context '20131230 to 20140101' do
|
26
26
|
let(:from) { '20131230' }
|
27
27
|
let(:to) { '20140101' }
|
28
|
-
let(:options) { { format: '%Y%m%d' } }
|
28
|
+
let(:options) { { format: '%Y%m%d', mode: :daily } }
|
29
29
|
let(:expected) { %w(20131230 20131231 20140101) }
|
30
30
|
it_behaves_like 'generate date sequence'
|
31
31
|
end
|
32
32
|
|
33
|
-
context '2013-12-30 to 2014-01-
|
33
|
+
context '2013-12-30 to 2014-01-21 with increments 7' do
|
34
34
|
let(:from) { '2013-12-30' }
|
35
|
-
let(:to) { '2014-01-
|
36
|
-
let(:options) { { format: '%Y-%m-%d' } }
|
37
|
-
let(:expected) { %w(2013-12-30
|
35
|
+
let(:to) { '2014-01-21' }
|
36
|
+
let(:options) { { format: '%Y-%m-%d', mode: :daily, increments: 7 } }
|
37
|
+
let(:expected) { %w(2013-12-30 2014-01-06 2014-01-13 2014-01-20) }
|
38
38
|
it_behaves_like 'generate date sequence'
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
-
describe '#sequence_str' do
|
42
|
+
describe '#sequence_str daily' do
|
43
43
|
context '20131230 to 20140101' do
|
44
44
|
let(:from) { '20131230' }
|
45
45
|
let(:to) { '20140101' }
|
46
|
-
let(:options) { { format: '%Y%m%d' } }
|
46
|
+
let(:options) { { format: '%Y%m%d', mode: :daily } }
|
47
47
|
let(:expected) { "20131230\n20131231\n20140101" }
|
48
48
|
it_behaves_like 'generate date sequence_str'
|
49
49
|
end
|
@@ -51,9 +51,37 @@ describe Dateseq::Generator do
|
|
51
51
|
context '2013/12/30 to 2014/01/01' do
|
52
52
|
let(:from) { '2013/12/30' }
|
53
53
|
let(:to) { '2014/01/01' }
|
54
|
-
let(:options) { { format: '%Y/%m/%d', sep: "\t" } }
|
54
|
+
let(:options) { { format: '%Y/%m/%d', mode: :daily, sep: "\t" } }
|
55
55
|
let(:expected) { "2013/12/30\t2013/12/31\t2014/01/01" }
|
56
56
|
it_behaves_like 'generate date sequence_str'
|
57
57
|
end
|
58
58
|
end
|
59
|
+
|
60
|
+
describe '#sequence monthly' do
|
61
|
+
context '20211231 to 20220501' do
|
62
|
+
let(:from) { '20211231' }
|
63
|
+
let(:to) { '20220501' }
|
64
|
+
let(:options) { { format: '%Y%m%d', mode: :monthly } }
|
65
|
+
let(:expected) { %w(20211231 20220131 20220228 20220331 20220430) }
|
66
|
+
it_behaves_like 'generate date sequence'
|
67
|
+
end
|
68
|
+
|
69
|
+
context '20211201 to 20220801 with increments 2' do
|
70
|
+
let(:from) { '20211201' }
|
71
|
+
let(:to) { '20220801' }
|
72
|
+
let(:options) { { format: '%Y%m%d', mode: :monthly, increments: 2 } }
|
73
|
+
let(:expected) { %w(20211201 20220201 20220401 20220601 20220801) }
|
74
|
+
it_behaves_like 'generate date sequence'
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe '#sequence_str monthly' do
|
79
|
+
context '2021-12-31 to 2022-05-01' do
|
80
|
+
let(:from) { '2021-12-31' }
|
81
|
+
let(:to) { '2022-05-01' }
|
82
|
+
let(:options) { { format: '%F', mode: :monthly } }
|
83
|
+
let(:expected) { "2021-12-31\n2022-01-31\n2022-02-28\n2022-03-31\n2022-04-30" }
|
84
|
+
it_behaves_like 'generate date sequence_str'
|
85
|
+
end
|
86
|
+
end
|
59
87
|
end
|