weekend_warrior 1.0.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.
- data/Manifest +5 -0
- data/Rakefile +12 -0
- data/init.rb +2 -0
- data/lib/weekend_warrior.rb +101 -0
- data/spec/weekend_warrior_spec.rb +111 -0
- data/weekend_warrior.gemspec +30 -0
- metadata +76 -0
data/Manifest
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'echoe'
|
4
|
+
|
5
|
+
Echoe.new('weekend_warrior', '1.0.0') do |p|
|
6
|
+
p.description = "A gem for handling 5-day weeks by separating weekend days from weekdays"
|
7
|
+
p.url = "http://github.com/benmoss/weekend_warrior"
|
8
|
+
p.author = "Ben Moss and James Cropcho"
|
9
|
+
p.email = "moss.127@gmail.com"
|
10
|
+
p.ignore_pattern = ["tmp/*", "script/*"]
|
11
|
+
p.development_dependencies = []
|
12
|
+
end
|
data/init.rb
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
module Weekend
|
2
|
+
def weekend?
|
3
|
+
# time.wday => Returns an integer representing the
|
4
|
+
# day of the week, 0..6, with Sunday == 0.
|
5
|
+
wday == 6 or wday == 0
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
Date.instance_eval { include(Weekend) }
|
10
|
+
Time.instance_eval { include(Weekend) }
|
11
|
+
|
12
|
+
class Time
|
13
|
+
def self.next_weekday(original_time = Time.now)
|
14
|
+
weekdays = 1..5
|
15
|
+
result = original_time
|
16
|
+
result += 1.day until result > original_time && weekdays.member?(result.wday)
|
17
|
+
result
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.weekday(original_time = Time.now)
|
21
|
+
weekdays = 1..5
|
22
|
+
result = original_time
|
23
|
+
result += 1.day until result >= original_time && weekdays.member?(result.wday)
|
24
|
+
result
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.previous_weekday(original_date = Time.now)
|
28
|
+
weekdays = 1..5
|
29
|
+
result = original_date
|
30
|
+
result -= 1.day until result < original_date && weekdays.member?(result.wday)
|
31
|
+
result
|
32
|
+
end
|
33
|
+
|
34
|
+
def go_forward_by_weekdays(num_days)
|
35
|
+
|
36
|
+
future = self.dup
|
37
|
+
|
38
|
+
num_days.times do
|
39
|
+
future = self.class.next_weekday(future)
|
40
|
+
end
|
41
|
+
|
42
|
+
future
|
43
|
+
end
|
44
|
+
|
45
|
+
def go_back_by_weekdays(num_days)
|
46
|
+
|
47
|
+
past = self.dup
|
48
|
+
|
49
|
+
num_days.times do
|
50
|
+
past = self.class.previous_weekday(past)
|
51
|
+
end
|
52
|
+
|
53
|
+
past
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
class Date
|
58
|
+
def self.next_weekday(original_date = Date.today)
|
59
|
+
weekdays = 1..5
|
60
|
+
result = original_date
|
61
|
+
result += 1 until result > original_date && weekdays.member?(result.wday)
|
62
|
+
result
|
63
|
+
end
|
64
|
+
|
65
|
+
def self.weekday(original_date = Date.today)
|
66
|
+
weekdays = 1..5
|
67
|
+
result = original_date
|
68
|
+
result += 1 until result >= original_date && weekdays.member?(result.wday)
|
69
|
+
result
|
70
|
+
end
|
71
|
+
|
72
|
+
def self.previous_weekday(original_date = Date.today)
|
73
|
+
weekdays = 1..5
|
74
|
+
result = original_date
|
75
|
+
result -= 1 until result < original_date && weekdays.member?(result.wday)
|
76
|
+
result
|
77
|
+
end
|
78
|
+
|
79
|
+
def go_forward_by_weekdays(num_days)
|
80
|
+
|
81
|
+
future = self.dup
|
82
|
+
|
83
|
+
num_days.times do
|
84
|
+
future = self.class.next_weekday(future)
|
85
|
+
end
|
86
|
+
|
87
|
+
future
|
88
|
+
end
|
89
|
+
|
90
|
+
def go_back_by_weekdays(num_days)
|
91
|
+
|
92
|
+
past = self.dup
|
93
|
+
|
94
|
+
num_days.times do
|
95
|
+
past = self.class.previous_weekday(past)
|
96
|
+
end
|
97
|
+
|
98
|
+
past
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
@@ -0,0 +1,111 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Date do
|
4
|
+
|
5
|
+
before(:all) do
|
6
|
+
@sat = Date.parse('05/22/2010')
|
7
|
+
@sun = Date.parse('05/23/2010')
|
8
|
+
@mon = Date.parse('05/24/2010')
|
9
|
+
@fri = Date.parse('05/28/2010')
|
10
|
+
#
|
11
|
+
@tue = Date.parse('05/25/2010')
|
12
|
+
@next_mon = Date.parse('05/31/2010')
|
13
|
+
@last_fri = Date.parse('05/21/2010')
|
14
|
+
@last_thu = Date.parse('05/27/2010')
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should know if a date is a weekend" do
|
18
|
+
@sat.should be_weekend
|
19
|
+
@sun.should be_weekend
|
20
|
+
@mon.should_not be_weekend
|
21
|
+
@fri.should_not be_weekend
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should find the next weekday" do
|
25
|
+
Date.next_weekday(@sat).should == @mon
|
26
|
+
Date.next_weekday(@sun).should == @mon
|
27
|
+
|
28
|
+
Date.next_weekday(@mon).should == @tue
|
29
|
+
Date.next_weekday(@fri).should == @next_mon
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should find the previous weekday" do
|
33
|
+
Date.previous_weekday(@sat).should == @last_fri
|
34
|
+
Date.previous_weekday(@sun).should == @last_fri
|
35
|
+
|
36
|
+
Date.previous_weekday(@mon).should == @last_fri
|
37
|
+
Date.previous_weekday(@fri).should == @last_thu
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should return today if it's a weekday, otherwise the next weekday" do
|
41
|
+
Date.weekday(@sat).should == @mon
|
42
|
+
Date.weekday(@sun).should == @mon
|
43
|
+
Date.weekday(@mon).should == @mon
|
44
|
+
Date.weekday(@fri).should == @fri
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should go forward by X weekdays" do
|
48
|
+
Date.weekday.go_forward_by_weekdays(10).should == 2.weeks.since(Date.weekday)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should go back by X weekdays" do
|
52
|
+
# unless you #to_i, test fails because times are a few milliseconds apart
|
53
|
+
Date.weekday.go_back_by_weekdays(10).should == 2.weeks.ago(Date.weekday)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe Time do
|
58
|
+
|
59
|
+
before(:all) do
|
60
|
+
@sat = Time.parse('05/22/2010')
|
61
|
+
@sun = Time.parse('05/23/2010')
|
62
|
+
@mon = Time.parse('05/24/2010')
|
63
|
+
@fri = Time.parse('05/28/2010')
|
64
|
+
#
|
65
|
+
@tue = Time.parse('05/25/2010')
|
66
|
+
@next_mon = Time.parse('05/31/2010')
|
67
|
+
@last_fri = Time.parse('05/21/2010')
|
68
|
+
@last_thu = Time.parse('05/27/2010')
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should know if a date is a weekend" do
|
72
|
+
@sat.should be_weekend
|
73
|
+
@sun.should be_weekend
|
74
|
+
@mon.should_not be_weekend
|
75
|
+
@fri.should_not be_weekend
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should find the next weekday" do
|
79
|
+
Time.next_weekday(@sat).should == @mon
|
80
|
+
Time.next_weekday(@sun).should == @mon
|
81
|
+
|
82
|
+
Time.next_weekday(@mon).should == @tue
|
83
|
+
Time.next_weekday(@fri).should == @next_mon
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should find the previous weekday" do
|
87
|
+
Time.previous_weekday(@sat).should == @last_fri
|
88
|
+
Time.previous_weekday(@sun).should == @last_fri
|
89
|
+
|
90
|
+
Time.previous_weekday(@mon).should == @last_fri
|
91
|
+
Time.previous_weekday(@fri).should == @last_thu
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should return today if it's a weekday, otherwise the next weekday" do
|
95
|
+
Time.weekday(@sat).should == @mon
|
96
|
+
Time.weekday(@sun).should == @mon
|
97
|
+
Time.weekday(@mon).should == @mon
|
98
|
+
Time.weekday(@fri).should == @fri
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should go forward by X weekdays" do
|
102
|
+
# unless you #to_i, test fails because times are a few milliseconds apart
|
103
|
+
Time.weekday.go_forward_by_weekdays(10).to_i.should == 2.weeks.since(Time.weekday).to_i
|
104
|
+
end
|
105
|
+
|
106
|
+
it "should go back by X weekdays" do
|
107
|
+
# unless you #to_i, test fails because times are a few milliseconds apart
|
108
|
+
Time.weekday.go_back_by_weekdays(10).to_i.should == 2.weeks.ago(Time.weekday).to_i
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{weekend_warrior}
|
5
|
+
s.version = "1.0.0"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Ben Moss and James Cropcho"]
|
9
|
+
s.date = %q{2010-06-13}
|
10
|
+
s.description = %q{A gem for handling 5-day weeks by separating weekend days from weekdays}
|
11
|
+
s.email = %q{moss.127@gmail.com}
|
12
|
+
s.extra_rdoc_files = ["lib/weekend_warrior.rb"]
|
13
|
+
s.files = ["Rakefile", "init.rb", "lib/weekend_warrior.rb", "spec/weekend_warrior_spec.rb", "Manifest", "weekend_warrior.gemspec"]
|
14
|
+
s.homepage = %q{http://github.com/benmoss/weekend_warrior}
|
15
|
+
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Weekend_warrior"]
|
16
|
+
s.require_paths = ["lib"]
|
17
|
+
s.rubyforge_project = %q{weekend_warrior}
|
18
|
+
s.rubygems_version = %q{1.3.7}
|
19
|
+
s.summary = %q{A gem for handling 5-day weeks by separating weekend days from weekdays}
|
20
|
+
|
21
|
+
if s.respond_to? :specification_version then
|
22
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
23
|
+
s.specification_version = 3
|
24
|
+
|
25
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
26
|
+
else
|
27
|
+
end
|
28
|
+
else
|
29
|
+
end
|
30
|
+
end
|
metadata
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: weekend_warrior
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 23
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
- 0
|
10
|
+
version: 1.0.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Ben Moss and James Cropcho
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-06-13 00:00:00 -04:00
|
19
|
+
default_executable:
|
20
|
+
dependencies: []
|
21
|
+
|
22
|
+
description: A gem for handling 5-day weeks by separating weekend days from weekdays
|
23
|
+
email: moss.127@gmail.com
|
24
|
+
executables: []
|
25
|
+
|
26
|
+
extensions: []
|
27
|
+
|
28
|
+
extra_rdoc_files:
|
29
|
+
- lib/weekend_warrior.rb
|
30
|
+
files:
|
31
|
+
- Rakefile
|
32
|
+
- init.rb
|
33
|
+
- lib/weekend_warrior.rb
|
34
|
+
- spec/weekend_warrior_spec.rb
|
35
|
+
- Manifest
|
36
|
+
- weekend_warrior.gemspec
|
37
|
+
has_rdoc: true
|
38
|
+
homepage: http://github.com/benmoss/weekend_warrior
|
39
|
+
licenses: []
|
40
|
+
|
41
|
+
post_install_message:
|
42
|
+
rdoc_options:
|
43
|
+
- --line-numbers
|
44
|
+
- --inline-source
|
45
|
+
- --title
|
46
|
+
- Weekend_warrior
|
47
|
+
require_paths:
|
48
|
+
- lib
|
49
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
hash: 3
|
55
|
+
segments:
|
56
|
+
- 0
|
57
|
+
version: "0"
|
58
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
hash: 11
|
64
|
+
segments:
|
65
|
+
- 1
|
66
|
+
- 2
|
67
|
+
version: "1.2"
|
68
|
+
requirements: []
|
69
|
+
|
70
|
+
rubyforge_project: weekend_warrior
|
71
|
+
rubygems_version: 1.3.7
|
72
|
+
signing_key:
|
73
|
+
specification_version: 3
|
74
|
+
summary: A gem for handling 5-day weeks by separating weekend days from weekdays
|
75
|
+
test_files: []
|
76
|
+
|