span 0.0.1 → 0.1.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 +8 -8
- data/lib/span/date_diff.rb +121 -0
- data/lib/span/version.rb +1 -1
- data/lib/span.rb +2 -120
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NWM2ZmU3YzBkZTdmMjI2MGYyYzkyMTBkOGE1N2MwMGJiZmEzMmZmNg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
OWI3ZWFiYjY1ZTU0YTI0YTE5YmUzNWEzM2QyNjU3MDZhYzI2ZjI0Ng==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
OGExM2M5ZWQ3YWQ1ODg5ZGU5ZTkwMGEwZGM4ZTY1Y2MxOThhNTM4NTA2YzBh
|
10
|
+
ZGViOGFiOWE1ODQ3ZmU5N2IyZTRjMzNjNjBkY2JlMDVhOGI5ODRlOGJhMmMw
|
11
|
+
MTlkNzFiYTYxZTk4ZTk5YzY2ODM0MWI0NGFiODBkYzU2YWI0OTY=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MmYyYjZiZmFkNWUwY2Y5MjBmM2ZmMDFmN2FjZDRmOWJjMjUxMmE0MTQ0NzYy
|
14
|
+
YjczOGRlZGM2ZjFmOTQ0ZDg0ZDAzYzA4ZDY0ZmE0OGJjZTE3MTFlZDViY2Zi
|
15
|
+
M2I5NzhiNzc1MGRhNTM0ZTk5ZTU1OGNmNzkxZjFjNzIzMDE3YmM=
|
@@ -0,0 +1,121 @@
|
|
1
|
+
require 'date'
|
2
|
+
|
3
|
+
module Span
|
4
|
+
class DateDiff
|
5
|
+
attr_reader \
|
6
|
+
:end_date,
|
7
|
+
:start_date
|
8
|
+
|
9
|
+
def self.compute( *args , &block )
|
10
|
+
new( *args , &block ).to_hash
|
11
|
+
end
|
12
|
+
|
13
|
+
def initialize( end_date_input , start_date_input )
|
14
|
+
@end_date = end_date_input.to_date
|
15
|
+
@start_date = start_date_input.to_date
|
16
|
+
end
|
17
|
+
|
18
|
+
def build_diff_hash
|
19
|
+
check_from = start_date
|
20
|
+
|
21
|
+
[ :years , :months , :weeks , :days ].reduce Hash.new do | memo , part |
|
22
|
+
check_from , num_of_part , part_singular =
|
23
|
+
send \
|
24
|
+
:"diff_#{ part }",
|
25
|
+
check_from,
|
26
|
+
part
|
27
|
+
|
28
|
+
memo[ part_singular ] = num_of_part
|
29
|
+
memo
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def default_diff( check_from , part , part_singular )
|
34
|
+
num_of_part = 0
|
35
|
+
part_next_method = :"next_#{ part_singular }"
|
36
|
+
|
37
|
+
loop do
|
38
|
+
check = check_from.send part_next_method
|
39
|
+
|
40
|
+
break if check > end_date
|
41
|
+
|
42
|
+
check_from = check
|
43
|
+
num_of_part += 1
|
44
|
+
end
|
45
|
+
|
46
|
+
[ check_from , num_of_part , part_singular ]
|
47
|
+
end
|
48
|
+
|
49
|
+
def diff_days( *args )
|
50
|
+
default_diff *args , :day
|
51
|
+
end
|
52
|
+
|
53
|
+
def diff_months( check_from , * )
|
54
|
+
num_of_part = 0
|
55
|
+
part_singular = :month
|
56
|
+
part_next_method = :"next_#{ part_singular }"
|
57
|
+
|
58
|
+
loop do
|
59
|
+
check = check_from.send part_next_method
|
60
|
+
|
61
|
+
if check > end_date
|
62
|
+
if start_date.day != check_from.day
|
63
|
+
day = start_date.strftime '%d'
|
64
|
+
month = check_from.strftime '%m'
|
65
|
+
year = check_from.strftime '%Y'
|
66
|
+
|
67
|
+
date_to_try =
|
68
|
+
begin
|
69
|
+
Date.parse "#{ day }/#{ month }/#{ year }"
|
70
|
+
rescue ArgumentError
|
71
|
+
false
|
72
|
+
end
|
73
|
+
|
74
|
+
check_from =
|
75
|
+
if date_to_try
|
76
|
+
date_to_try
|
77
|
+
else
|
78
|
+
next_month = check_from.next_month.strftime '%m'
|
79
|
+
Date.parse( "01/#{ next_month }/#{ year }" ).prev_day
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
break
|
84
|
+
end
|
85
|
+
|
86
|
+
check_from = check
|
87
|
+
num_of_part += 1
|
88
|
+
end
|
89
|
+
|
90
|
+
[ check_from , num_of_part , part_singular ]
|
91
|
+
end
|
92
|
+
|
93
|
+
def diff_weeks( check_from , * )
|
94
|
+
num_of_part = 0
|
95
|
+
part_singular = :week
|
96
|
+
part_next_method = :next_day
|
97
|
+
check_from = check_from.prev_day
|
98
|
+
|
99
|
+
loop do
|
100
|
+
check = check_from.send part_next_method
|
101
|
+
6.times { check = check.send part_next_method }
|
102
|
+
|
103
|
+
break if check > end_date
|
104
|
+
|
105
|
+
check_from = check
|
106
|
+
num_of_part += 1
|
107
|
+
end
|
108
|
+
|
109
|
+
[ check_from , num_of_part , part_singular ]
|
110
|
+
end
|
111
|
+
|
112
|
+
def diff_years( *args )
|
113
|
+
default_diff *args , :year
|
114
|
+
end
|
115
|
+
|
116
|
+
def to_hash
|
117
|
+
@_hash ||= build_diff_hash
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
data/lib/span/version.rb
CHANGED
data/lib/span.rb
CHANGED
@@ -1,126 +1,8 @@
|
|
1
|
-
require '
|
2
|
-
|
1
|
+
require 'span/date_diff'
|
3
2
|
require 'span/version'
|
4
3
|
|
5
4
|
module Span
|
6
5
|
def self.compute( *args , &block )
|
7
|
-
|
8
|
-
end
|
9
|
-
|
10
|
-
class TimeDiff
|
11
|
-
attr_reader \
|
12
|
-
:end_date,
|
13
|
-
:start_date
|
14
|
-
|
15
|
-
def self.compute( *args , &block )
|
16
|
-
new( *args , &block ).to_hash
|
17
|
-
end
|
18
|
-
|
19
|
-
def initialize( end_date_input , start_date_input )
|
20
|
-
@end_date = end_date_input.to_date
|
21
|
-
@start_date = start_date_input.to_date
|
22
|
-
end
|
23
|
-
|
24
|
-
def build_diff_hash
|
25
|
-
check_from = start_date
|
26
|
-
|
27
|
-
[ :years , :months , :weeks , :days ].reduce Hash.new do | memo , part |
|
28
|
-
check_from , num_of_part , part_singular =
|
29
|
-
send \
|
30
|
-
:"diff_#{ part }",
|
31
|
-
check_from,
|
32
|
-
part
|
33
|
-
|
34
|
-
memo[ part_singular ] = num_of_part
|
35
|
-
memo
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def default_diff( check_from , part , part_singular )
|
40
|
-
num_of_part = 0
|
41
|
-
part_next_method = :"next_#{ part_singular }"
|
42
|
-
|
43
|
-
loop do
|
44
|
-
check = check_from.send part_next_method
|
45
|
-
|
46
|
-
break if check > end_date
|
47
|
-
|
48
|
-
check_from = check
|
49
|
-
num_of_part += 1
|
50
|
-
end
|
51
|
-
|
52
|
-
[ check_from , num_of_part , part_singular ]
|
53
|
-
end
|
54
|
-
|
55
|
-
def diff_days( *args )
|
56
|
-
default_diff *args , :day
|
57
|
-
end
|
58
|
-
|
59
|
-
def diff_months( check_from , * )
|
60
|
-
num_of_part = 0
|
61
|
-
part_singular = :month
|
62
|
-
part_next_method = :"next_#{ part_singular }"
|
63
|
-
|
64
|
-
loop do
|
65
|
-
check = check_from.send part_next_method
|
66
|
-
|
67
|
-
if check > end_date
|
68
|
-
if start_date.day != check_from.day
|
69
|
-
day = start_date.strftime '%d'
|
70
|
-
month = check_from.strftime '%m'
|
71
|
-
year = check_from.strftime '%Y'
|
72
|
-
|
73
|
-
date_to_try =
|
74
|
-
begin
|
75
|
-
Date.parse "#{ day }/#{ month }/#{ year }"
|
76
|
-
rescue ArgumentError
|
77
|
-
false
|
78
|
-
end
|
79
|
-
|
80
|
-
check_from =
|
81
|
-
if date_to_try
|
82
|
-
date_to_try
|
83
|
-
else
|
84
|
-
next_month = check_from.next_month.strftime '%m'
|
85
|
-
Date.parse( "01/#{ next_month }/#{ year }" ).prev_day
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
break
|
90
|
-
end
|
91
|
-
|
92
|
-
check_from = check
|
93
|
-
num_of_part += 1
|
94
|
-
end
|
95
|
-
|
96
|
-
[ check_from , num_of_part , part_singular ]
|
97
|
-
end
|
98
|
-
|
99
|
-
def diff_weeks( check_from , * )
|
100
|
-
num_of_part = 0
|
101
|
-
part_singular = :week
|
102
|
-
part_next_method = :next_day
|
103
|
-
check_from = check_from.prev_day
|
104
|
-
|
105
|
-
loop do
|
106
|
-
check = check_from.send part_next_method
|
107
|
-
6.times { check = check.send part_next_method }
|
108
|
-
|
109
|
-
break if check > end_date
|
110
|
-
|
111
|
-
check_from = check
|
112
|
-
num_of_part += 1
|
113
|
-
end
|
114
|
-
|
115
|
-
[ check_from , num_of_part , part_singular ]
|
116
|
-
end
|
117
|
-
|
118
|
-
def diff_years( *args )
|
119
|
-
default_diff *args , :year
|
120
|
-
end
|
121
|
-
|
122
|
-
def to_hash
|
123
|
-
@_hash ||= build_diff_hash
|
124
|
-
end
|
6
|
+
DateDiff.compute *args , &block
|
125
7
|
end
|
126
8
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: span
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Cook
|
@@ -65,6 +65,7 @@ files:
|
|
65
65
|
- README.md
|
66
66
|
- Rakefile
|
67
67
|
- lib/span.rb
|
68
|
+
- lib/span/date_diff.rb
|
68
69
|
- lib/span/version.rb
|
69
70
|
- span.gemspec
|
70
71
|
- test/span_test.rb
|