datebox 0.2 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|