dateseq 0.0.5 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2b345d2347647a3aa5b765dd7a873c04984de660a6e99a902df80c4795f27e73
4
- data.tar.gz: 469aa2c975199da527777e332e52bc99d0e132f560c1f0c8c8b5ef98a068ebf4
3
+ metadata.gz: 9d5b585480ff9b265644656e7ce47d257715e10ba421d3f077a1032df08b34b7
4
+ data.tar.gz: 8ed9bf1daf04981a1f77ca2d302bd946cedd8a8dec4d44a4605c064db260aaa9
5
5
  SHA512:
6
- metadata.gz: 7c931ea90c8a792f491dc0f3469537b5eb08517e65fd0a8dd6ba7fcef8854261b990e4542c70e5f105ff717ee273745dae5e1cec8a38e6a9e8bffa64822ff989
7
- data.tar.gz: 10912c918a92bef27d18c681a3fb4452fa1eeac42d3200bbc56071ac50cd325ed49bba7c058326efe7a342e4e5f69845d8fedcca4caa9812c51c17138cb84db8
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
@@ -1,4 +1,4 @@
1
1
  # Date Sequence
2
2
  module Dateseq
3
- VERSION = '0.0.5'
3
+ VERSION = '1.0.0'
4
4
  end
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-01' do
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-01' }
36
- let(:options) { { format: '%Y-%m-%d' } }
37
- let(:expected) { %w(2013-12-30 2013-12-31 2014-01-01) }
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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dateseq
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - masa21kik