dateseq 0.0.4 → 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: 3a181e21b26cb80b06328a19ca5a8b01709556b01e5840dd653d552da68d15db
4
- data.tar.gz: '0586f2a9e65c5463a12acaddbff677b0a8eb48aecf20cc309f013a57db9df305'
3
+ metadata.gz: 9d5b585480ff9b265644656e7ce47d257715e10ba421d3f077a1032df08b34b7
4
+ data.tar.gz: 8ed9bf1daf04981a1f77ca2d302bd946cedd8a8dec4d44a4605c064db260aaa9
5
5
  SHA512:
6
- metadata.gz: 9e63e1131f63cc5d61627e610249c36f97e706c720c3472dbb80114af0ee09c30b85ad0f9be7260122c783814c7cd302a06aeaa420e942bc5323a65a70c3a5be
7
- data.tar.gz: 6cae8ce41f398bf9f60c79100d18aa1e2421cd829d150eb3ff396fb192cf0f6302951a5d09c6f186ef7a25ef27d4186c01368b306543658a41e6342ebb13ff19
6
+ metadata.gz: b17fefafc9fe3a8317854742111ce7cf1fd69d04af20e355553899c47ab3a67529fc957ca86ed476a6a0f2a47f4dd34d5b23f8d6beaa9c46867bb4e69c8bca5f
7
+ data.tar.gz: 17b144155d8d1a626f5a57636990181fd006858c06d836c79dc1599121e0232284e6846529d9ffd8281c8adf43211a8b1810cca50f1c8ae2c4d1ddafd68c0015
data/README.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Dateseq
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/dateseq.svg)](https://badge.fury.io/rb/dateseq)
4
+ [![Build Status](https://github.com/masa21kik/dateseq/workflows/test/badge.svg?branch=master)](https://github.com/masa21kik/dateseq/actions?query=workflow%3Atest)
5
+ [![Maintainability](https://api.codeclimate.com/v1/badges/3127d2fbb669ab278d24/maintainability)](https://codeclimate.com/github/masa21kik/dateseq/maintainability)
6
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/3127d2fbb669ab278d24/test_coverage)](https://codeclimate.com/github/masa21kik/dateseq/test_coverage)
7
+
3
8
  Generate date sequence like seq command
4
9
 
5
10
  ## Installation
@@ -29,6 +34,8 @@ Or install it yourself as:
29
34
  Options:
30
35
  -f, --format FORMAT Set date format (default is '%Y%m%d')
31
36
  -s, --separator SEP Set separator charactor (default is '\n')
37
+ -i, --increments NUM Set date increment steps (default is 1)
38
+ -m, --monthly Set to monthly mode
32
39
  -h, --help Show this message
33
40
  -v, --version Show version
34
41
 
data/bin/dateseq CHANGED
@@ -19,9 +19,12 @@ opt.on('-s', '--separator SEP',
19
19
  else v
20
20
  end
21
21
  end
22
- opt.on('-p', '--step NUM',
23
- 'Set date step (default is 1)') do |v|
24
- options[:step] = v.to_i
22
+ opt.on('-i', '--increments NUM',
23
+ 'Set date increment steps (default is 1)') do |v|
24
+ options[:increments] = v.to_i
25
+ end
26
+ opt.on('-m', '--monthly', 'Set to monthly mode') do
27
+ options[:mode] = :monthly
25
28
  end
26
29
  opt.on('-h', '--help', 'Show this message') do
27
30
  abort(opt.help)
@@ -1,4 +1,4 @@
1
1
  # Date Sequence
2
2
  module Dateseq
3
- VERSION = '0.0.4'
3
+ VERSION = '1.0.0'
4
4
  end
data/lib/dateseq.rb CHANGED
@@ -8,17 +8,37 @@ module Dateseq
8
8
  def initialize(options)
9
9
  @format = options[:format] || '%Y%m%d'
10
10
  @sep = options[:sep] || "\n"
11
- @step = options[:step] || 1
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)
17
- from.step(to, @step).map do |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)
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.4
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - masa21kik