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