duration-range 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +34 -0
- data/lib/duration_range/common_functions.rb +35 -1
- data/lib/duration_range/date.rb +23 -1
- data/lib/duration_range/time.rb +23 -1
- data/lib/duration_range/version.rb +1 -1
- 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: 2906de236492e14acd76597c419e63417d7caad207afecd8ddcbb0818614055a
|
4
|
+
data.tar.gz: 610a910d62c6b9d3eedc64445752b9bebe1526da96c40f38c02ebfa4ff574db8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0a7c3a32aad450e98d5ecf58eab08b085fea3f41df8c55b675a13f70f5bfbf1565d40e0a7d7efe885a9aa4b8c1dfb2fc851d65e726e0ecfe8575662344c5bfb7
|
7
|
+
data.tar.gz: 7357529ea96eb43b21cc96bd620a96ede03c06408b49fcce07cc9f1c685f6e3abfd398015d9bdc4ae2e3e82218c32d357595ee7e8628fa88b325c35c3eb0947f
|
data/README.md
CHANGED
@@ -2,6 +2,34 @@
|
|
2
2
|
|
3
3
|
duration range data generator
|
4
4
|
|
5
|
+
## Features
|
6
|
+
|
7
|
+
generate Array / Hash of Date / Time
|
8
|
+
|
9
|
+
e.g.
|
10
|
+
|
11
|
+
```
|
12
|
+
{:begin=>Mon, 19 Apr 2021, :end=>Sun, 25 Apr 2021} # week as Hash of Date
|
13
|
+
[Mon, 19 Apr 2021, Tue, 20 Apr 2021, ... Sun, 25 Apr 2021] # week as Array of Date
|
14
|
+
{:begin=>2021-04-01 00:00:00 UTC, :end=>2021-05-01 00:00:00 UTC} # month as Hash of Time
|
15
|
+
```
|
16
|
+
|
17
|
+
available classes:
|
18
|
+
|
19
|
+
* DurationRange::Date ( default type Array )
|
20
|
+
* DurationRange::Time ( default type Hash )
|
21
|
+
|
22
|
+
available methods:
|
23
|
+
|
24
|
+
* this_week
|
25
|
+
* last_week
|
26
|
+
* next_week
|
27
|
+
* this_month
|
28
|
+
* last_month
|
29
|
+
* next_month
|
30
|
+
* month
|
31
|
+
* months
|
32
|
+
|
5
33
|
## Installation
|
6
34
|
|
7
35
|
Add this line to your application's Gemfile:
|
@@ -31,6 +59,12 @@ DurationRange::Date.new.last_month(as: :hash)
|
|
31
59
|
|
32
60
|
DurationRange::Time.new.last_month
|
33
61
|
# => {:begin=>2021-04-01 00:00:00 UTC, :end=>2021-05-01 00:00:00 UTC}
|
62
|
+
|
63
|
+
DurationRange::Time.new.month('2021-04')
|
64
|
+
# => {:begin=>2021-04-01 00:00:00 UTC, :end=>2021-05-01 00:00:00 UTC}
|
65
|
+
|
66
|
+
DurationRange::Date.new.months('2021-04', '2021-06')
|
67
|
+
# => [Thu, 01 Apr 2021, Fri, 02 Apr 2021, ... Wed, 30 Jun 2021]
|
34
68
|
```
|
35
69
|
|
36
70
|
## Development
|
@@ -31,12 +31,46 @@ module DurationRange
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
+
#
|
35
|
+
# @param month [String]
|
36
|
+
# @param as [Symbol]
|
37
|
+
# @return [Object]
|
38
|
+
#
|
39
|
+
def month_as_date(month, as:)
|
40
|
+
this_month_as_date(as: as, reference_date: ::Date.parse(month + '-01'))
|
41
|
+
end
|
42
|
+
|
43
|
+
#
|
44
|
+
# @param months [Array]
|
45
|
+
# @param as [Symbol]
|
46
|
+
# @return [Object]
|
47
|
+
#
|
48
|
+
# :reek:NilCheck :reek:TooMenyStatements
|
49
|
+
def months_as_date(*months, as:)
|
50
|
+
min = nil
|
51
|
+
max = nil
|
52
|
+
months.each { |mon|
|
53
|
+
dates = month_as_date(mon, as: :hash)
|
54
|
+
begin_date = dates[:begin]
|
55
|
+
end_date = dates[:end]
|
56
|
+
|
57
|
+
if min.nil? || begin_date < min
|
58
|
+
min = begin_date
|
59
|
+
end
|
60
|
+
if max.nil? || max < end_date
|
61
|
+
max = end_date
|
62
|
+
end
|
63
|
+
}
|
64
|
+
|
65
|
+
tidy_with_date(as: as, begin_date: min, end_date: max)
|
66
|
+
end
|
67
|
+
|
34
68
|
#
|
35
69
|
# @param as [Symbol]
|
36
70
|
# @param reference_date [Date]
|
37
71
|
# @return [Object]
|
38
72
|
#
|
39
|
-
def
|
73
|
+
def this_month_as_date(as:, reference_date: today)
|
40
74
|
begin_date = reference_date.at_beginning_of_month
|
41
75
|
end_date = reference_date.at_end_of_month
|
42
76
|
|
data/lib/duration_range/date.rb
CHANGED
@@ -6,13 +6,35 @@ module DurationRange
|
|
6
6
|
class Date
|
7
7
|
include DurationRange::CommonFunctions
|
8
8
|
|
9
|
+
#
|
10
|
+
# generate specific month duration (e.g. 2021-04)
|
11
|
+
#
|
12
|
+
# @param month [String]
|
13
|
+
# @param as [Symbol]
|
14
|
+
# @return [Object]
|
15
|
+
#
|
16
|
+
def month(month, as: :array)
|
17
|
+
month_as_date(month, as: as)
|
18
|
+
end
|
19
|
+
|
20
|
+
#
|
21
|
+
# longest duration from multiple months
|
22
|
+
#
|
23
|
+
# @param months [Array]
|
24
|
+
# @param as [Symbol]
|
25
|
+
# @return [Object]
|
26
|
+
#
|
27
|
+
def months(*months, as: :array)
|
28
|
+
months_as_date(*months, as: as)
|
29
|
+
end
|
30
|
+
|
9
31
|
#
|
10
32
|
# @param as [Symbol]
|
11
33
|
# @param reference_date [Date]
|
12
34
|
# @return [Object]
|
13
35
|
#
|
14
36
|
def this_month(as: :array, reference_date: today)
|
15
|
-
|
37
|
+
this_month_as_date(as: as, reference_date: reference_date)
|
16
38
|
end
|
17
39
|
|
18
40
|
#
|
data/lib/duration_range/time.rb
CHANGED
@@ -45,13 +45,35 @@ module DurationRange
|
|
45
45
|
with_localtime ? date.to_time : date.to_time(:utc)
|
46
46
|
end
|
47
47
|
|
48
|
+
#
|
49
|
+
# @param month [String]
|
50
|
+
# @param as [Symbol]
|
51
|
+
# @return [Object]
|
52
|
+
#
|
53
|
+
def month(month, as: :hash)
|
54
|
+
dates = month_as_date(month, as: :hash)
|
55
|
+
|
56
|
+
tidy_with_time(as: as, begin_date: dates[:begin], end_date: dates[:end] + 1)
|
57
|
+
end
|
58
|
+
|
59
|
+
#
|
60
|
+
# @param months [Array]
|
61
|
+
# @param as [Symbol]
|
62
|
+
# @return [Object]
|
63
|
+
#
|
64
|
+
def months(*months, as: :hash)
|
65
|
+
dates = months_as_date(*months, as: :hash)
|
66
|
+
|
67
|
+
tidy_with_time(as: as, begin_date: dates[:begin], end_date: dates[:end] + 1)
|
68
|
+
end
|
69
|
+
|
48
70
|
#
|
49
71
|
# @param as [Symbol]
|
50
72
|
# @param reference_date [Date]
|
51
73
|
# @return [Object]
|
52
74
|
#
|
53
75
|
def this_month(as: :hash, reference_date: today)
|
54
|
-
dates =
|
76
|
+
dates = this_month_as_date(as: :hash, reference_date: reference_date)
|
55
77
|
|
56
78
|
tidy_with_time(as: as, begin_date: dates[:begin], end_date: dates[:end] + 1)
|
57
79
|
end
|