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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 987247b0d89fd90410e93d3c0474ed9872ee3fef
4
- data.tar.gz: 6f5f3555c722c186ba548f13728c8e6fa3e2ef44
3
+ metadata.gz: 5ba421c57845a9e337de05fdd2d99cdcdba0c711
4
+ data.tar.gz: 5b4a07576517473b413a7fdc22a34b99a84919fe
5
5
  SHA512:
6
- metadata.gz: a6edab522ecc2b28c1a0b7261e2bbb85aefc7ec95f788dc235bda73795b883686d4b59cd78d7e82d214577f7abdf86965a697cac2f806e280b9a7f8faf58f74d
7
- data.tar.gz: 0d8a4330cc658a23616e899349e54be21132dca95d1271f05e4c94cbaff5b3d07e190e10cd26d7ac8ec148d2479c3c3c9d81993782c2820a1a349cb4da8a16d6
6
+ metadata.gz: 88524a579dae051b9270608d25d7cf0a966e8ae3d76d44d5e623fbf2e51be63d79393abb56f07d125727610194ad9d5c41631b4361fcda0818e20396bd302860
7
+ data.tar.gz: 364f4bddd066f02dc929c90ed528565ff1d04914d6c620507d52c14552e77cee31611ae17ee6f11c9a1dec7bd54503722d11399653815cca17347b2c4504ff15
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Datebox
2
- VERSION = "0.2"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -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: '0.2'
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: 2014-03-14 00:00:00.000000000 Z
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.0.5
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