datebox 0.2 → 0.3.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 +4 -4
- data/lib/datebox/relative.rb +35 -11
- data/lib/datebox/version.rb +1 -1
- data/test/unit/test_relative.rb +8 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ba421c57845a9e337de05fdd2d99cdcdba0c711
|
4
|
+
data.tar.gz: 5b4a07576517473b413a7fdc22a34b99a84919fe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 88524a579dae051b9270608d25d7cf0a966e8ae3d76d44d5e623fbf2e51be63d79393abb56f07d125727610194ad9d5c41631b4361fcda0818e20396bd302860
|
7
|
+
data.tar.gz: 364f4bddd066f02dc929c90ed528565ff1d04914d6c620507d52c14552e77cee31611ae17ee6f11c9a1dec7bd54503722d11399653815cca17347b2c4504ff15
|
data/lib/datebox/relative.rb
CHANGED
@@ -2,9 +2,11 @@ module Datebox
|
|
2
2
|
class Relative
|
3
3
|
|
4
4
|
@period_proc = nil
|
5
|
+
attr_reader :period_name
|
5
6
|
|
6
|
-
def initialize(proc)
|
7
|
+
def initialize(proc, name = nil)
|
7
8
|
@period_proc = proc
|
9
|
+
@period_name = name
|
8
10
|
end
|
9
11
|
|
10
12
|
def to(relative_to)
|
@@ -25,12 +27,22 @@ module Datebox
|
|
25
27
|
end
|
26
28
|
end
|
27
29
|
|
30
|
+
def to_date(period, options = {})
|
31
|
+
raise "Expected one of: #{Period::PREDEFINED}" unless Period::PREDEFINED.include?(period.to_sym)
|
32
|
+
raise "Current doesn't make sense for parameter: #{period}" if [:day, :n_days].include?(period)
|
33
|
+
case period.to_sym
|
34
|
+
when :week then week_to_date(options)
|
35
|
+
when :month then month_to_date
|
36
|
+
when :year then year_to_date
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
28
40
|
def same_day
|
29
|
-
new Proc.new {|relative_to| Period.new(relative_to, relative_to) }
|
41
|
+
new Proc.new {|relative_to| Period.new(relative_to, relative_to) }, __method__.to_s
|
30
42
|
end
|
31
43
|
|
32
44
|
def day_before
|
33
|
-
new Proc.new {|relative_to| Period.new(relative_to - 1, relative_to - 1) }
|
45
|
+
new Proc.new {|relative_to| Period.new(relative_to - 1, relative_to - 1) }, __method__.to_s
|
34
46
|
end
|
35
47
|
|
36
48
|
def last_n_days(options = {})
|
@@ -40,7 +52,7 @@ module Datebox
|
|
40
52
|
proc = inclusive ?
|
41
53
|
Proc.new {|relative_to| Period.new(relative_to - days + 1, relative_to) } :
|
42
54
|
Proc.new {|relative_to| Period.new(relative_to - days, relative_to - 1) }
|
43
|
-
new proc
|
55
|
+
new proc, __method__.to_s
|
44
56
|
end
|
45
57
|
|
46
58
|
def last_week(options = {})
|
@@ -48,7 +60,7 @@ module Datebox
|
|
48
60
|
new Proc.new { |relative_to|
|
49
61
|
end_date = (relative_to.downto relative_to - 6).to_a.find { |d| d.strftime("%A") == last_weekday }
|
50
62
|
Period.new(end_date - 6, end_date)
|
51
|
-
}
|
63
|
+
}, __method__.to_s
|
52
64
|
end
|
53
65
|
|
54
66
|
def last_weekdays_between(start_day, end_day)
|
@@ -56,7 +68,7 @@ module Datebox
|
|
56
68
|
end_date = (relative_to.downto relative_to - 6).to_a.find { |d| d.strftime("%A") == end_day }
|
57
69
|
start_date = (end_date - 7 .. end_date).to_a.find { |d| d.strftime("%A") == start_day }
|
58
70
|
Period.new(start_date, end_date)
|
59
|
-
}
|
71
|
+
}, __method__.to_s
|
60
72
|
end
|
61
73
|
|
62
74
|
def last_weeks_weekdays_as!(*days) #this one returns array!
|
@@ -64,7 +76,19 @@ module Datebox
|
|
64
76
|
days.map do |p|
|
65
77
|
(relative_to.downto relative_to - 6).to_a.find { |d| d.strftime("%A") == p }
|
66
78
|
end
|
67
|
-
}
|
79
|
+
}, __method__.to_s
|
80
|
+
end
|
81
|
+
|
82
|
+
def week_to_date(options = {})
|
83
|
+
last_weekday = options[:last_weekday] || options['last_weekday'] || 'Sunday'
|
84
|
+
new Proc.new { |relative_to|
|
85
|
+
if relative_to.strftime("%A") == last_weekday
|
86
|
+
Period.new(relative_to - 6, relative_to)
|
87
|
+
else
|
88
|
+
end_date = (relative_to.downto relative_to - 6).to_a.find { |d| d.strftime("%A") == last_weekday }
|
89
|
+
Period.new(end_date + 1, relative_to)
|
90
|
+
end
|
91
|
+
}, __method__.to_s
|
68
92
|
end
|
69
93
|
|
70
94
|
def last_month
|
@@ -72,14 +96,14 @@ module Datebox
|
|
72
96
|
previous_month_start = Date.parse("#{relative_to.prev_month.strftime('%Y-%m')}-01")
|
73
97
|
previous_month_end = previous_month_start.next_month - 1
|
74
98
|
Period.new(previous_month_start, previous_month_end)
|
75
|
-
}
|
99
|
+
}, __method__.to_s
|
76
100
|
end
|
77
101
|
|
78
102
|
def month_to_date
|
79
103
|
new Proc.new { |relative_to|
|
80
104
|
month_start = Date.parse("#{relative_to.strftime('%Y-%m')}-01")
|
81
105
|
Period.new(month_start, relative_to)
|
82
|
-
}
|
106
|
+
}, __method__.to_s
|
83
107
|
end
|
84
108
|
|
85
109
|
def last_year
|
@@ -87,14 +111,14 @@ module Datebox
|
|
87
111
|
previous_year_start = Date.parse("#{relative_to.prev_year.year}-01-01")
|
88
112
|
previous_year_end = previous_year_start.next_year - 1
|
89
113
|
Period.new(previous_year_start, previous_year_end)
|
90
|
-
}
|
114
|
+
}, __method__.to_s
|
91
115
|
end
|
92
116
|
|
93
117
|
def year_to_date
|
94
118
|
new Proc.new { |relative_to|
|
95
119
|
year_start = Date.parse("#{relative_to.year}-01-01")
|
96
120
|
Period.new(year_start, relative_to)
|
97
|
-
}
|
121
|
+
}, __method__.to_s
|
98
122
|
end
|
99
123
|
|
100
124
|
end
|
data/lib/datebox/version.rb
CHANGED
data/test/unit/test_relative.rb
CHANGED
@@ -26,12 +26,19 @@ class TestRelative < Test::Unit::TestCase
|
|
26
26
|
assert_equal Datebox::Period.new('2012-01-01', '2012-12-31'), Datebox::Relative.last_year.to('2013-07-09')
|
27
27
|
assert_equal Datebox::Period.new('2013-01-01', '2013-07-09'), Datebox::Relative.year_to_date.to('2013-07-09')
|
28
28
|
|
29
|
-
# anything
|
29
|
+
# anything, past
|
30
30
|
assert_equal Datebox::Period.new('2013-06-01', '2013-06-01'), Datebox::Relative.last(:day).to('2013-06-02')
|
31
31
|
assert_equal Datebox::Period.new('2013-06-01', '2013-06-30'), Datebox::Relative.last(:month).to('2013-07-09')
|
32
32
|
assert_equal Datebox::Period.new('2014-02-03', '2014-02-09'), Datebox::Relative.last(:week).to('2014-02-10')
|
33
33
|
assert_equal Datebox::Period.new('2014-02-02', '2014-02-08'), Datebox::Relative.last(:week, {:last_weekday => "Saturday"}).to('2014-02-10')
|
34
34
|
|
35
|
+
# andything, up to date
|
36
|
+
assert_equal Datebox::Period.new('2015-03-15', '2015-03-21'), Datebox::Relative.to_date(:week, {:last_weekday => "Saturday"}).to('2015-03-21')
|
37
|
+
assert_equal Datebox::Period.new('2015-03-15', '2015-03-20'), Datebox::Relative.to_date(:week, {:last_weekday => "Saturday"}).to('2015-03-20')
|
38
|
+
assert_equal Datebox::Period.new('2015-03-01', '2015-03-20'), Datebox::Relative.to_date(:month).to('2015-03-20')
|
39
|
+
assert_equal Datebox::Period.new('2015-01-01', '2015-03-20'), Datebox::Relative.to_date(:year).to('2015-03-20')
|
40
|
+
assert_equal Datebox::Period.new('2015-01-01', '2015-03-20'), Datebox::Relative.year_to_date.to('2015-03-20')
|
41
|
+
|
35
42
|
# the one that's different
|
36
43
|
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
|
37
44
|
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:
|
4
|
+
version: 0.3.0
|
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: 2015-03-20 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Offers help with managing dates and periods
|
14
14
|
email:
|
@@ -17,7 +17,7 @@ executables: []
|
|
17
17
|
extensions: []
|
18
18
|
extra_rdoc_files: []
|
19
19
|
files:
|
20
|
-
- .gitignore
|
20
|
+
- ".gitignore"
|
21
21
|
- CHANGELOG.txt
|
22
22
|
- Gemfile
|
23
23
|
- LICENSE
|
@@ -41,17 +41,17 @@ require_paths:
|
|
41
41
|
- lib
|
42
42
|
required_ruby_version: !ruby/object:Gem::Requirement
|
43
43
|
requirements:
|
44
|
-
- -
|
44
|
+
- - ">="
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: '0'
|
47
47
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
48
48
|
requirements:
|
49
|
-
- -
|
49
|
+
- - ">="
|
50
50
|
- !ruby/object:Gem::Version
|
51
51
|
version: '0'
|
52
52
|
requirements: []
|
53
53
|
rubyforge_project:
|
54
|
-
rubygems_version: 2.
|
54
|
+
rubygems_version: 2.4.5
|
55
55
|
signing_key:
|
56
56
|
specification_version: 4
|
57
57
|
summary: Got fed up with implementing date related functionality everywhere
|