weekend_warrior 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/Manifest ADDED
@@ -0,0 +1,5 @@
1
+ Rakefile
2
+ init.rb
3
+ lib/weekend_warrior.rb
4
+ spec/weekend_warrior_spec.rb
5
+ Manifest
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,2 @@
1
+ require File.join(Rails.root,'vendor/plugins','weekend/lib/weekend_warrior')
2
+
@@ -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
+