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 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