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 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