datebox 0.4.1 → 0.4.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.txt +4 -3
- data/lib/datebox/relative.rb +30 -9
- data/lib/datebox/version.rb +1 -1
- data/test/unit/test_relative.rb +10 -2
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f867ee46d817fd7925ee67d2b7da65c77e9a0b3d
|
4
|
+
data.tar.gz: 765f0d7e2873bd6196baa5d2215e1c0128796f84
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1ea5e6dc0cb49ac0ba631177595f1a20b84c32d2f726f0a5abfa79377f40158dcb83b92a5ff8eaadbc5ceb42f2a88c081419ebd3b13af3c9807568137b91e76d
|
7
|
+
data.tar.gz: 404b27cd4d7d1938ae8cc47e3df2bb6e57b8ea52a3a690b3af79f865ab8b51d6758c97cf960cc521d033e4e1e98ad7acb039cb946af5f613730049d58588c048
|
data/CHANGELOG.txt
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
|
1
|
+
0.4.3
|
2
|
+
Changed behaviour of last_week to be more consistent with other last_ methods particularly on Sunday
|
2
3
|
|
3
|
-
|
4
|
-
|
4
|
+
0.2.0
|
5
|
+
Changed Datebox::Relative methods from instance methods to class methods. This requires changes in code.
|
data/lib/datebox/relative.rb
CHANGED
@@ -3,7 +3,7 @@ module Datebox
|
|
3
3
|
|
4
4
|
@period_proc = nil
|
5
5
|
attr_reader :period_name
|
6
|
-
|
6
|
+
|
7
7
|
def initialize(proc, name = nil)
|
8
8
|
@period_proc = proc
|
9
9
|
@period_name = name
|
@@ -44,12 +44,12 @@ module Datebox
|
|
44
44
|
def day_before
|
45
45
|
new Proc.new {|relative_to| Period.new(relative_to - 1, relative_to - 1) }, __method__.to_s
|
46
46
|
end
|
47
|
-
|
47
|
+
|
48
48
|
def day_apart(difference)
|
49
49
|
new Proc.new {|relative_to| Period.new(relative_to + difference, relative_to + difference) }, __method__.to_s
|
50
50
|
end
|
51
|
-
|
52
|
-
def method_missing(m, *args, &block)
|
51
|
+
|
52
|
+
def method_missing(m, *args, &block)
|
53
53
|
if (m.to_s =~ /^day_ago_\d+$/) or (m.to_s =~ /^day_in_\d+$/)
|
54
54
|
days = m.to_s.split('_').last.to_i
|
55
55
|
if m.to_s =~ /^day_ago_\d+$/
|
@@ -62,8 +62,8 @@ module Datebox
|
|
62
62
|
else
|
63
63
|
super
|
64
64
|
end
|
65
|
-
end
|
66
|
-
|
65
|
+
end
|
66
|
+
|
67
67
|
def last_n_days(options = {})
|
68
68
|
days = (options[:days] || options['days']).to_i
|
69
69
|
inclusive = (options[:exclusive] || options['exclusive']) ? false : true # inclusive by default
|
@@ -77,6 +77,7 @@ module Datebox
|
|
77
77
|
def last_week(options = {})
|
78
78
|
last_weekday = options[:last_weekday] || options['last_weekday'] || 'Sunday'
|
79
79
|
new Proc.new { |relative_to|
|
80
|
+
relative_to -= 1
|
80
81
|
end_date = (relative_to.downto relative_to - 6).to_a.find { |d| d.strftime("%A") == last_weekday }
|
81
82
|
Period.new(end_date - 6, end_date)
|
82
83
|
}, __method__.to_s
|
@@ -110,8 +111,20 @@ module Datebox
|
|
110
111
|
}, __method__.to_s
|
111
112
|
end
|
112
113
|
|
114
|
+
def same_week(options = {})
|
115
|
+
last_weekday = options[:last_weekday] || options['last_weekday'] || 'Sunday'
|
116
|
+
new Proc.new { |relative_to|
|
117
|
+
if relative_to.strftime("%A") == last_weekday
|
118
|
+
Period.new(relative_to - 6, relative_to)
|
119
|
+
else
|
120
|
+
end_date = (relative_to.downto relative_to - 6).to_a.find { |d| d.strftime("%A") == last_weekday }
|
121
|
+
Period.new(end_date + 1, end_date + 7)
|
122
|
+
end
|
123
|
+
}, __method__.to_s
|
124
|
+
end
|
125
|
+
|
113
126
|
def last_month
|
114
|
-
new Proc.new { |relative_to|
|
127
|
+
new Proc.new { |relative_to|
|
115
128
|
previous_month_start = Date.parse("#{relative_to.prev_month.strftime('%Y-%m')}-01")
|
116
129
|
previous_month_end = previous_month_start.next_month - 1
|
117
130
|
Period.new(previous_month_start, previous_month_end)
|
@@ -125,6 +138,14 @@ module Datebox
|
|
125
138
|
}, __method__.to_s
|
126
139
|
end
|
127
140
|
|
141
|
+
def same_month
|
142
|
+
new Proc.new { |relative_to|
|
143
|
+
same_month_start = Date.parse("#{relative_to.strftime('%Y-%m')}-01")
|
144
|
+
same_month_end = same_month_start.next_month - 1
|
145
|
+
Period.new(same_month_start, same_month_end)
|
146
|
+
}, __method__.to_s
|
147
|
+
end
|
148
|
+
|
128
149
|
def last_year
|
129
150
|
new Proc.new { |relative_to|
|
130
151
|
previous_year_start = Date.parse("#{relative_to.prev_year.year}-01-01")
|
@@ -142,5 +163,5 @@ module Datebox
|
|
142
163
|
|
143
164
|
end
|
144
165
|
end
|
145
|
-
|
146
|
-
end
|
166
|
+
|
167
|
+
end
|
data/lib/datebox/version.rb
CHANGED
data/test/unit/test_relative.rb
CHANGED
@@ -5,7 +5,7 @@ class TestRelative < Test::Unit::TestCase
|
|
5
5
|
def test_gives_back_correct_period_name_in_proc
|
6
6
|
assert_equal :day_in_19, Datebox::Relative.day_in_19.period_name
|
7
7
|
end
|
8
|
-
|
8
|
+
|
9
9
|
def test_calculates_correctly
|
10
10
|
# day
|
11
11
|
assert_equal [Date.parse('2013-07-07')], Datebox::Relative.same_day.to('2013-07-07').dates
|
@@ -24,6 +24,7 @@ class TestRelative < Test::Unit::TestCase
|
|
24
24
|
# week
|
25
25
|
assert_equal Datebox::Period.new('2013-07-01', '2013-07-07'), Datebox::Relative.last_week.to('2013-07-09') # tue
|
26
26
|
assert_equal Datebox::Period.new('2013-06-30', '2013-07-06'), Datebox::Relative.last_week({:last_weekday => "Saturday"}).to('2013-07-09') #tue
|
27
|
+
assert_equal Datebox::Period.new('2015-10-26', '2015-11-01'), Datebox::Relative.last_week.to('2015-11-08') # sun
|
27
28
|
assert_equal Datebox::Period.new('2013-07-01', '2013-07-05'), Datebox::Relative.last_weekdays_between("Monday", "Friday").to('2013-07-09') # tue
|
28
29
|
assert_equal Datebox::Period.new('2013-07-08', '2013-07-09'), Datebox::Relative.last_weekdays_between("Monday", "Tuesday").to('2013-07-09') #tue
|
29
30
|
|
@@ -51,6 +52,13 @@ class TestRelative < Test::Unit::TestCase
|
|
51
52
|
|
52
53
|
# the one that's different
|
53
54
|
assert_equal [Date.parse('2013-07-01'), Date.parse('2013-07-03')], Datebox::Relative.last_weeks_weekdays_as!("Monday", "Wednesday").to('2013-07-05') #fri
|
55
|
+
|
56
|
+
assert_equal Datebox::Period.new('2015-11-02', '2015-11-08'), Datebox::Relative.same_week.to('2015-11-02') # mon
|
57
|
+
assert_equal Datebox::Period.new('2015-11-02', '2015-11-08'), Datebox::Relative.same_week.to('2015-11-03') # tue
|
58
|
+
assert_equal Datebox::Period.new('2015-11-02', '2015-11-08'), Datebox::Relative.same_week.to('2015-11-08') # sun
|
59
|
+
|
60
|
+
|
61
|
+
assert_equal Datebox::Period.new('2015-11-01', '2015-11-30'), Datebox::Relative.same_month.to('2015-11-30')
|
54
62
|
end
|
55
63
|
|
56
|
-
end
|
64
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: datebox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Borkowski
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-09-12 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Offers help with managing dates and periods
|
14
14
|
email:
|
@@ -51,7 +51,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
51
51
|
version: '0'
|
52
52
|
requirements: []
|
53
53
|
rubyforge_project:
|
54
|
-
rubygems_version: 2.
|
54
|
+
rubygems_version: 2.6.11
|
55
55
|
signing_key:
|
56
56
|
specification_version: 4
|
57
57
|
summary: Got fed up with implementing date related functionality everywhere
|