smart_month 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/MIT-LICENSE +20 -0
- data/README +33 -0
- data/Rakefile +51 -0
- data/VERSION +1 -0
- data/lib/month.rb +26 -0
- data/lib/smart_month.rb +11 -0
- data/lib/smart_month/calculations.rb +87 -0
- data/lib/smart_month/collection.rb +51 -0
- data/lib/smart_month/extensions/date.rb +19 -0
- data/lib/smart_month/magic.rb +71 -0
- data/lib/smart_month/math.rb +41 -0
- data/lib/smart_month/rulesets.rb +151 -0
- data/lib/smart_month/util.rb +37 -0
- data/pkg/smart_month-1.0.0.gem +0 -0
- data/rdoc/classes/Date.html +209 -0
- data/rdoc/classes/Month.html +189 -0
- data/rdoc/classes/SmartMonth.html +136 -0
- data/rdoc/classes/SmartMonth/Calculations.html +383 -0
- data/rdoc/classes/SmartMonth/Collection.html +306 -0
- data/rdoc/classes/SmartMonth/Magic.html +214 -0
- data/rdoc/classes/SmartMonth/Magic/MonthFactory.html +178 -0
- data/rdoc/classes/SmartMonth/Math.html +311 -0
- data/rdoc/classes/SmartMonth/Rulesets.html +419 -0
- data/rdoc/classes/SmartMonth/Util.html +302 -0
- data/rdoc/classes/Time.html +152 -0
- data/rdoc/created.rid +1 -0
- data/rdoc/files/README.html +170 -0
- data/rdoc/files/lib/month_rb.html +113 -0
- data/rdoc/files/lib/smart_month/calculations_rb.html +101 -0
- data/rdoc/files/lib/smart_month/collection_rb.html +101 -0
- data/rdoc/files/lib/smart_month/extensions/date_rb.html +108 -0
- data/rdoc/files/lib/smart_month/magic_rb.html +101 -0
- data/rdoc/files/lib/smart_month/math_rb.html +101 -0
- data/rdoc/files/lib/smart_month/rulesets_rb.html +108 -0
- data/rdoc/files/lib/smart_month/util_rb.html +101 -0
- data/rdoc/files/lib/smart_month_rb.html +108 -0
- data/rdoc/fr_class_index.html +37 -0
- data/rdoc/fr_file_index.html +36 -0
- data/rdoc/fr_method_index.html +74 -0
- data/rdoc/index.html +24 -0
- data/rdoc/rdoc-style.css +208 -0
- data/smart_month.gemspec +179 -0
- data/test/spec/date/accessor_spec.rb +91 -0
- data/test/spec/date/add_month_spec.rb +24 -0
- data/test/spec/date/add_spec.rb +23 -0
- data/test/spec/date/boat_spec.rb +20 -0
- data/test/spec/date/civil_spec.rb +28 -0
- data/test/spec/date/commercial_spec.rb +29 -0
- data/test/spec/date/constants_spec.rb +41 -0
- data/test/spec/date/conversions_spec.rb +153 -0
- data/test/spec/date/downto_spec.rb +18 -0
- data/test/spec/date/eql_spec.rb +10 -0
- data/test/spec/date/gregorian_spec.rb +28 -0
- data/test/spec/date/hash_spec.rb +14 -0
- data/test/spec/date/infinity_spec.rb +77 -0
- data/test/spec/date/julian_spec.rb +52 -0
- data/test/spec/date/minus_month_spec.rb +23 -0
- data/test/spec/date/minus_spec.rb +30 -0
- data/test/spec/date/new_spec.rb +9 -0
- data/test/spec/date/neww_spec.rb +9 -0
- data/test/spec/date/ordinal_spec.rb +29 -0
- data/test/spec/date/parse_spec.rb +149 -0
- data/test/spec/date/relationship_spec.rb +20 -0
- data/test/spec/date/shared/civil.rb +66 -0
- data/test/spec/date/shared/commercial.rb +39 -0
- data/test/spec/date/shared/parse.rb +54 -0
- data/test/spec/date/shared/parse_eu.rb +30 -0
- data/test/spec/date/shared/parse_us.rb +29 -0
- data/test/spec/date/step_spec.rb +56 -0
- data/test/spec/date/strftime_spec.rb +205 -0
- data/test/spec/date/strptime_spec.rb +143 -0
- data/test/spec/date/upto_spec.rb +18 -0
- data/test/spec/parsedate/parsedate.rb +95 -0
- data/test/spec/time/httpdate_spec.rb +21 -0
- data/test/spec/time/iso8601_spec.rb +7 -0
- data/test/spec/time/rfc2822_spec.rb +7 -0
- data/test/spec/time/rfc822_spec.rb +7 -0
- data/test/spec/time/shared/rfc2822.rb +65 -0
- data/test/spec/time/shared/xmlschema.rb +53 -0
- data/test/spec/time/xmlschema_spec.rb +7 -0
- data/test/spec_helper.rb +56 -0
- data/test/test_helper.rb +4 -0
- data/test/unit/calculations_test.rb +82 -0
- data/test/unit/collection_test.rb +42 -0
- data/test/unit/magic_test.rb +37 -0
- data/test/unit/math_test.rb +30 -0
- data/test/unit/rulesets_test.rb +94 -0
- data/test/unit/samples/test_ruleset.yml +6 -0
- data/test/unit/util_test.rb +29 -0
- metadata +196 -0
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'date'
|
2
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
3
|
+
|
4
|
+
describe "Date#===" do
|
5
|
+
|
6
|
+
it "should be able to compare two same dates" do
|
7
|
+
(Date.civil(2000, 04, 06) <=> Date.civil(2000, 04, 06)).should == 0
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should be able to compute the difference between two dates" do
|
11
|
+
(Date.civil(2000, 04, 05) <=> Date.civil(2000, 04, 06)).should == -1
|
12
|
+
(Date.civil(2001, 04, 05) <=> Date.civil(2000, 04, 06)).should == 1
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should be able to compare to another numeric" do
|
16
|
+
(Date.civil(2000, 04, 05) <=> Date.civil(2000, 04, 06).jd).should == -1
|
17
|
+
(Date.civil(2001, 04, 05) <=> Date.civil(2000, 04, 06).jd).should == 1
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
describe :date_civil, :shared => true do
|
2
|
+
it "creates a Date for -4712 by default" do
|
3
|
+
# the #chomp calls are necessary because of RSpec
|
4
|
+
d = Date.send(@method)
|
5
|
+
d.year.should == -4712
|
6
|
+
d.month.should == 1
|
7
|
+
d.day.should == 1
|
8
|
+
d.julian?.should == true
|
9
|
+
d.jd.should == 0
|
10
|
+
end
|
11
|
+
|
12
|
+
it "creates a date with arguments" do
|
13
|
+
d = Date.send(@method, 2000, 3, 5)
|
14
|
+
d.year.should == 2000
|
15
|
+
d.month.should == 3
|
16
|
+
d.day.should == 5
|
17
|
+
d.julian?.should == false
|
18
|
+
d.jd.should == 2451609
|
19
|
+
|
20
|
+
# Should also work with years far in the past and future
|
21
|
+
|
22
|
+
d = Date.send(@method, -9000, 7, 5)
|
23
|
+
d.year.should == -9000
|
24
|
+
d.month.should == 7
|
25
|
+
d.day.should == 5
|
26
|
+
d.julian?.should == true
|
27
|
+
d.jd.should == -1566006
|
28
|
+
|
29
|
+
d = Date.send(@method, 9000, 10, 14)
|
30
|
+
d.year.should == 9000
|
31
|
+
d.month.should == 10
|
32
|
+
d.day.should == 14
|
33
|
+
d.julian?.should == false
|
34
|
+
d.jd.should == 5008529
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
it "doesn't create dates for invalid arguments" do
|
39
|
+
lambda { Date.send(@method, 2000, 13, 31) }.should raise_error(ArgumentError)
|
40
|
+
lambda { Date.send(@method, 2000, 12, 32) }.should raise_error(ArgumentError)
|
41
|
+
lambda { Date.send(@method, 2000, 2, 30) }.should raise_error(ArgumentError)
|
42
|
+
lambda { Date.send(@method, 1900, 2, 29) }.should raise_error(ArgumentError)
|
43
|
+
lambda { Date.send(@method, 2000, 2, 29) }.should_not raise_error(ArgumentError)
|
44
|
+
|
45
|
+
lambda { Date.send(@method, 1582, 10, 14) }.should raise_error(ArgumentError)
|
46
|
+
lambda { Date.send(@method, 1582, 10, 15) }.should_not raise_error(ArgumentError)
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
it "creats a Date for different calendar reform dates" do
|
51
|
+
d1 = Date.send(@method, 1582, 10, 4)
|
52
|
+
d1.succ.day.should == 15
|
53
|
+
|
54
|
+
d2 = Date.send(@method, 1582, 10, 4, Date::ENGLAND)
|
55
|
+
d2.succ.day.should == 5
|
56
|
+
|
57
|
+
# Choose an arbitrary reform date
|
58
|
+
r = Date.send(@method, 2000, 2, 3)
|
59
|
+
|
60
|
+
d3 = Date.send(@method, 2000, 2, 3, r.jd)
|
61
|
+
(d3 - 1).day.should == 20
|
62
|
+
(d3 - 1).month.should == 1
|
63
|
+
|
64
|
+
lambda { Date.send(@method, 2000, 2, 2, r.jd) }.should raise_error(ArgumentError)
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
describe :date_commercial, :shared => true do
|
2
|
+
it "creates a Date for the day of Julian calendar reform in Italy by default" do
|
3
|
+
d = Date.send(@method)
|
4
|
+
d.year.should == 1582
|
5
|
+
d.month.should == 10
|
6
|
+
d.day.should == 15
|
7
|
+
end
|
8
|
+
|
9
|
+
it "Creates a Date for the friday in the year and week given" do
|
10
|
+
d = Date.send(@method, 2000, 1)
|
11
|
+
d.year.should == 2000
|
12
|
+
d.month.should == 1
|
13
|
+
d.day.should == 7
|
14
|
+
d.cwday.should == 5
|
15
|
+
end
|
16
|
+
|
17
|
+
it "Creates a Date for the correct day given the year, week and day number" do
|
18
|
+
d = Date.send(@method, 2004, 1, 1)
|
19
|
+
d.year.should == 2003
|
20
|
+
d.month.should == 12
|
21
|
+
d.day.should == 29
|
22
|
+
d.cwday.should == 1
|
23
|
+
d.cweek.should == 1
|
24
|
+
d.cwyear.should == 2004
|
25
|
+
end
|
26
|
+
|
27
|
+
it "creates only Date objects for valid weeks" do
|
28
|
+
lambda { Date.send(@method, 2004, 53, 1) }.should_not raise_error(ArgumentError)
|
29
|
+
lambda { Date.send(@method, 2004, 53, 0) }.should raise_error(ArgumentError)
|
30
|
+
lambda { Date.send(@method, 2004, 53, 8) }.should raise_error(ArgumentError)
|
31
|
+
lambda { Date.send(@method, 2004, 54, 1) }.should raise_error(ArgumentError)
|
32
|
+
lambda { Date.send(@method, 2004, 0, 1) }.should raise_error(ArgumentError)
|
33
|
+
|
34
|
+
lambda { Date.send(@method, 2003, 52, 1) }.should_not raise_error(ArgumentError)
|
35
|
+
lambda { Date.send(@method, 2003, 53, 1) }.should raise_error(ArgumentError)
|
36
|
+
lambda { Date.send(@method, 2003, 52, 0) }.should raise_error(ArgumentError)
|
37
|
+
lambda { Date.send(@method, 2003, 52, 8) }.should raise_error(ArgumentError)
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
describe :date_parse, :shared => true do
|
2
|
+
it "can parse a mmm-YYYY string into a Date object" do
|
3
|
+
d = Date.parse("feb#{@sep}2008")
|
4
|
+
d.year.should == 2008
|
5
|
+
d.month.should == 2
|
6
|
+
d.day.should == 1
|
7
|
+
end
|
8
|
+
|
9
|
+
it "can parse a 'DD mmm YYYY' string into a Date object" do
|
10
|
+
d = Date.parse("23#{@sep}feb#{@sep}2008")
|
11
|
+
d.year.should == 2008
|
12
|
+
d.month.should == 2
|
13
|
+
d.day.should == 23
|
14
|
+
end
|
15
|
+
|
16
|
+
it "can parse a 'mmm DD YYYY' string into a Date object" do
|
17
|
+
d = Date.parse("23#{@sep}feb#{@sep}2008")
|
18
|
+
d.year.should == 2008
|
19
|
+
d.month.should == 2
|
20
|
+
d.day.should == 23
|
21
|
+
end
|
22
|
+
|
23
|
+
it "can parse a 'YYYY mmm DD' string into a Date object" do
|
24
|
+
d = Date.parse("2008#{@sep}feb#{@sep}23")
|
25
|
+
d.year.should == 2008
|
26
|
+
d.month.should == 2
|
27
|
+
d.day.should == 23
|
28
|
+
end
|
29
|
+
|
30
|
+
it "can parse a month name and day into a Date object" do
|
31
|
+
d = Date.parse("november#{@sep}5th")
|
32
|
+
d.should == Date.civil(Date.today.year, 11, 5)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "can parse a month name, day and year into a Date object" do
|
36
|
+
d = Date.parse("november#{@sep}5th#{@sep}2005")
|
37
|
+
d.should == Date.civil(2005, 11, 5)
|
38
|
+
end
|
39
|
+
|
40
|
+
it "can parse a year, month name and day into a Date object" do
|
41
|
+
d = Date.parse("2005#{@sep}november#{@sep}5th")
|
42
|
+
d.should == Date.civil(2005, 11, 5)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "can parse a year, day and month name into a Date object" do
|
46
|
+
d = Date.parse("5th#{@sep}november#{@sep}2005")
|
47
|
+
d.should == Date.civil(2005, 11, 5)
|
48
|
+
end
|
49
|
+
|
50
|
+
it "can handle negative year numbers" do
|
51
|
+
d = Date.parse("5th#{@sep}november#{@sep}-2005")
|
52
|
+
d.should == Date.civil(-2005, 11, 5)
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
describe :date_parse_eu, :shared => true do
|
2
|
+
# The - separator let's it work like European format, so it as a different spec
|
3
|
+
it "can parse a YYYY-MM-DD string into a Date object" do
|
4
|
+
d = Date.parse("2007#{@sep}10#{@sep}01")
|
5
|
+
d.year.should == 2007
|
6
|
+
d.month.should == 10
|
7
|
+
d.day.should == 1
|
8
|
+
end
|
9
|
+
|
10
|
+
it "can parse a MM-DD-YYYY string into a Date object" do
|
11
|
+
d = Date.parse("10#{@sep}01#{@sep}2007")
|
12
|
+
d.year.should == 2007
|
13
|
+
d.month.should == 1
|
14
|
+
d.day.should == 10
|
15
|
+
end
|
16
|
+
|
17
|
+
it "can parse a MM-DD-YY string into a Date object" do
|
18
|
+
d = Date.parse("10#{@sep}01#{@sep}07")
|
19
|
+
d.year.should == 10
|
20
|
+
d.month.should == 1
|
21
|
+
d.day.should == 7
|
22
|
+
end
|
23
|
+
|
24
|
+
it "can parse a MM-DD-YY string into a Date object using the year digits as 20XX" do
|
25
|
+
d = Date.parse("10#{@sep}01#{@sep}07", true)
|
26
|
+
d.year.should == 2010
|
27
|
+
d.month.should == 1
|
28
|
+
d.day.should == 7
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
describe :date_parse_us, :shared => true do
|
2
|
+
it "parses a YYYY#{@sep}MM#{@sep}DD string into a Date object" do
|
3
|
+
d = Date.parse("2007#{@sep}10#{@sep}01")
|
4
|
+
d.year.should == 2007
|
5
|
+
d.month.should == 10
|
6
|
+
d.day.should == 1
|
7
|
+
end
|
8
|
+
|
9
|
+
it "parses a MM#{@sep}DD#{@sep}YYYY string into a Date object" do
|
10
|
+
d = Date.parse("10#{@sep}01#{@sep}2007")
|
11
|
+
d.year.should == 2007
|
12
|
+
d.month.should == 10
|
13
|
+
d.day.should == 1
|
14
|
+
end
|
15
|
+
|
16
|
+
it "parses a MM#{@sep}DD#{@sep}YY string into a Date object" do
|
17
|
+
d = Date.parse("10#{@sep}01#{@sep}07")
|
18
|
+
d.year.should == 7
|
19
|
+
d.month.should == 10
|
20
|
+
d.day.should == 1
|
21
|
+
end
|
22
|
+
|
23
|
+
it "parses a MM#{@sep}DD#{@sep}YY string into a Date object using the year digits as 20XX" do
|
24
|
+
d = Date.parse("10#{@sep}01#{@sep}07", true)
|
25
|
+
d.year.should == 2007
|
26
|
+
d.month.should == 10
|
27
|
+
d.day.should == 1
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'date'
|
2
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
3
|
+
|
4
|
+
describe "Date#step" do
|
5
|
+
|
6
|
+
it "should be able to step forward in time" do
|
7
|
+
ds = Date.civil(2008, 10, 11)
|
8
|
+
de = Date.civil(2008, 9, 29)
|
9
|
+
count = 0
|
10
|
+
de.step(ds) do |d|
|
11
|
+
d.should <= ds
|
12
|
+
d.should >= de
|
13
|
+
count += 1
|
14
|
+
end
|
15
|
+
count.should == 13
|
16
|
+
|
17
|
+
count = 0
|
18
|
+
de.step(ds, 5) do |d|
|
19
|
+
d.should <= ds
|
20
|
+
d.should >= de
|
21
|
+
count += 1
|
22
|
+
end
|
23
|
+
count.should == 3
|
24
|
+
|
25
|
+
count = 0
|
26
|
+
ds.step(de) do |d|; count += 1; end
|
27
|
+
count.should == 0
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should be able to step backward in time" do
|
32
|
+
ds = Date.civil(2000, 4, 14)
|
33
|
+
de = Date.civil(2000, 3, 29)
|
34
|
+
count = 0
|
35
|
+
ds.step(de, -1) do |d|
|
36
|
+
d.should <= ds
|
37
|
+
d.should >= de
|
38
|
+
count += 1
|
39
|
+
end
|
40
|
+
count.should == 17
|
41
|
+
|
42
|
+
count = 0
|
43
|
+
ds.step(de, -5) do |d|
|
44
|
+
d.should <= ds
|
45
|
+
d.should >= de
|
46
|
+
count += 1
|
47
|
+
end
|
48
|
+
count.should == 4
|
49
|
+
|
50
|
+
count = 0
|
51
|
+
de.step(ds, -1) do |d|; count += 1; end
|
52
|
+
count.should == 0
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
@@ -0,0 +1,205 @@
|
|
1
|
+
require 'date'
|
2
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
3
|
+
|
4
|
+
describe "Date#strftime" do
|
5
|
+
|
6
|
+
it "should be able to print the date" do
|
7
|
+
Date.civil(2000, 4, 6).strftime.should == "2000-04-06"
|
8
|
+
Date.civil(2000, 4, 6).strftime.should == Date.civil(2000, 4, 6).to_s
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should be able to print the full day name" do
|
12
|
+
Date.civil(2000, 4, 6).strftime("%A").should == "Thursday"
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should be able to print the short day name" do
|
16
|
+
Date.civil(2000, 4, 6).strftime("%a").should == "Thu"
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should be able to print the full month name" do
|
20
|
+
Date.civil(2000, 4, 6).strftime("%B").should == "April"
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should be able to print the short month name" do
|
24
|
+
Date.civil(2000, 4, 6).strftime("%b").should == "Apr"
|
25
|
+
Date.civil(2000, 4, 6).strftime("%h").should == "Apr"
|
26
|
+
Date.civil(2000, 4, 6).strftime("%b").should == Date.civil(2000, 4, 6).strftime("%h")
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should be able to print the century" do
|
30
|
+
Date.civil(2000, 4, 6).strftime("%C").should == "20"
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should be able to print the month day with leading zeroes" do
|
34
|
+
Date.civil(2000, 4, 6).strftime("%d").should == "06"
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should be able to print the month day with leading spaces" do
|
38
|
+
Date.civil(2000, 4, 6).strftime("%e").should == " 6"
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should be able to print the commercial year with leading zeroes" do
|
42
|
+
Date.civil(2000, 4, 6).strftime("%G").should == "2000"
|
43
|
+
Date.civil( 200, 4, 6).strftime("%G").should == "0200"
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should be able to print the commercial year with only two digits" do
|
47
|
+
Date.civil(2000, 4, 6).strftime("%g").should == "00"
|
48
|
+
Date.civil( 200, 4, 6).strftime("%g").should == "00"
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should be able to print the hour with leading zeroes (hour is always 00)" do
|
52
|
+
Date.civil(2000, 4, 6).strftime("%H").should == "00"
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should be able to print the hour in 12 hour notation with leading zeroes" do
|
56
|
+
Date.civil(2000, 4, 6).strftime("%I").should == "12"
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should be able to print the year day with leading zeroes" do
|
60
|
+
Date.civil(2000, 4, 6).strftime("%j").should == "097"
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should be able to print the hour in 24 hour notation with leading spaces" do
|
64
|
+
Date.civil(2000, 4, 6).strftime("%k").should == " 0"
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should be able to print the hour in 12 hour notation with leading spaces" do
|
68
|
+
Date.civil(2000, 4, 6).strftime("%l").should == "12"
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should be able to print the minutes with leading zeroes" do
|
72
|
+
Date.civil(2000, 4, 6).strftime("%M").should == "00"
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should be able to print the month with leading zeroes" do
|
76
|
+
Date.civil(2000, 4, 6).strftime("%m").should == "04"
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should be able to add a newline" do
|
80
|
+
Date.civil(2000, 4, 6).strftime("%n").should == "\n"
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should be able to show AM/PM" do
|
84
|
+
Date.civil(2000, 4, 6).strftime("%P").should == "am"
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should be able to show am/pm" do
|
88
|
+
Date.civil(2000, 4, 6).strftime("%p").should == "AM"
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should be able to show the number of seconds with leading zeroes" do
|
92
|
+
Date.civil(2000, 4, 6).strftime("%S").should == "00"
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should be able to show the number of seconds with leading zeroes" do
|
96
|
+
Date.civil(2000, 4, 6).strftime("%S").should == "00"
|
97
|
+
end
|
98
|
+
|
99
|
+
it "should be able to show the number of seconds since the unix epoch" do
|
100
|
+
Date.civil(2000, 4, 6).strftime("%s").should == "954979200"
|
101
|
+
end
|
102
|
+
|
103
|
+
it "should be able to add a tab" do
|
104
|
+
Date.civil(2000, 4, 6).strftime("%t").should == "\t"
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should be able to show the week number with the week starting on sunday and monday" do
|
108
|
+
Date.civil(2000, 4, 6).strftime("%U").should == "14"
|
109
|
+
Date.civil(2000, 4, 6).strftime("%W").should == "14"
|
110
|
+
Date.civil(2000, 4, 6).strftime("%U").should == Date.civil(2000, 4, 6).strftime("%W")
|
111
|
+
Date.civil(2000, 4, 9).strftime("%U").should == "15"
|
112
|
+
Date.civil(2000, 4, 9).strftime("%W").should == "14"
|
113
|
+
Date.civil(2000, 4, 9).strftime("%U").should_not == Date.civil(2000, 4, 9).strftime("%W")
|
114
|
+
end
|
115
|
+
|
116
|
+
it "should be able to show the commercial week day" do
|
117
|
+
Date.civil(2000, 4, 9).strftime("%u").should == "7"
|
118
|
+
Date.civil(2000, 4, 10).strftime("%u").should == "1"
|
119
|
+
end
|
120
|
+
|
121
|
+
it "should be able to show the commercial week" do
|
122
|
+
Date.civil(2000, 4, 9).strftime("%V").should == "14"
|
123
|
+
Date.civil(2000, 4, 10).strftime("%V").should == "15"
|
124
|
+
end
|
125
|
+
|
126
|
+
it "should be able to show the week day" do
|
127
|
+
Date.civil(2000, 4, 9).strftime("%w").should == "0"
|
128
|
+
Date.civil(2000, 4, 10).strftime("%w").should == "1"
|
129
|
+
end
|
130
|
+
|
131
|
+
it "should be able to show the year in YYYY format" do
|
132
|
+
Date.civil(2000, 4, 9).strftime("%Y").should == "2000"
|
133
|
+
end
|
134
|
+
|
135
|
+
it "should be able to show the year in YY format" do
|
136
|
+
Date.civil(2000, 4, 9).strftime("%y").should == "00"
|
137
|
+
end
|
138
|
+
|
139
|
+
it "should be able to show the timezone of the date with a : separator" do
|
140
|
+
Date.civil(2000, 4, 9).strftime("%Z").should == "+00:00"
|
141
|
+
end
|
142
|
+
|
143
|
+
it "should be able to show the timezone of the date with a : separator" do
|
144
|
+
Date.civil(2000, 4, 9).strftime("%z").should == "+0000"
|
145
|
+
end
|
146
|
+
|
147
|
+
it "should be able to escape the % character" do
|
148
|
+
Date.civil(2000, 4, 9).strftime("%%").should == "%"
|
149
|
+
end
|
150
|
+
|
151
|
+
############################
|
152
|
+
# Specs that combine stuff #
|
153
|
+
############################
|
154
|
+
|
155
|
+
it "should be able to print the date in full" do
|
156
|
+
Date.civil(2000, 4, 6).strftime("%c").should == "Thu Apr 6 00:00:00 2000"
|
157
|
+
Date.civil(2000, 4, 6).strftime("%c").should == Date.civil(2000, 4, 6).strftime('%a %b %e %H:%M:%S %Y')
|
158
|
+
end
|
159
|
+
|
160
|
+
it "should be able to print the date with slashes" do
|
161
|
+
Date.civil(2000, 4, 6).strftime("%D").should == "04/06/00"
|
162
|
+
Date.civil(2000, 4, 6).strftime("%D").should == Date.civil(2000, 4, 6).strftime('%m/%d/%y')
|
163
|
+
end
|
164
|
+
|
165
|
+
it "should be able to print the date as YYYY-MM-DD" do
|
166
|
+
Date.civil(2000, 4, 6).strftime("%F").should == "2000-04-06"
|
167
|
+
Date.civil(2000, 4, 6).strftime("%F").should == Date.civil(2000, 4, 6).strftime('%Y-%m-%d')
|
168
|
+
end
|
169
|
+
|
170
|
+
it "should be able to show HH:MM" do
|
171
|
+
Date.civil(2000, 4, 6).strftime("%R").should == "00:00"
|
172
|
+
Date.civil(2000, 4, 6).strftime("%R").should == Date.civil(2000, 4, 6).strftime('%H:%M')
|
173
|
+
end
|
174
|
+
|
175
|
+
it "should be able to show HH:MM:SS AM/PM" do
|
176
|
+
Date.civil(2000, 4, 6).strftime("%r").should == "12:00:00 AM"
|
177
|
+
Date.civil(2000, 4, 6).strftime("%r").should == Date.civil(2000, 4, 6).strftime('%I:%M:%S %p')
|
178
|
+
end
|
179
|
+
|
180
|
+
it "should be able to show HH:MM:SS" do
|
181
|
+
Date.civil(2000, 4, 6).strftime("%T").should == "00:00:00"
|
182
|
+
Date.civil(2000, 4, 6).strftime("%T").should == Date.civil(2000, 4, 6).strftime('%H:%M:%S')
|
183
|
+
end
|
184
|
+
|
185
|
+
it "should be able to show the commercial week" do
|
186
|
+
Date.civil(2000, 4, 9).strftime("%v").should == " 9-Apr-2000"
|
187
|
+
Date.civil(2000, 4, 9).strftime("%v").should == Date.civil(2000, 4, 9).strftime('%e-%b-%Y')
|
188
|
+
end
|
189
|
+
|
190
|
+
it "should be able to show HH:MM:SS" do
|
191
|
+
Date.civil(2000, 4, 6).strftime("%X").should == "00:00:00"
|
192
|
+
Date.civil(2000, 4, 6).strftime("%X").should == Date.civil(2000, 4, 6).strftime('%H:%M:%S')
|
193
|
+
end
|
194
|
+
|
195
|
+
it "should be able to show MM/DD/YY" do
|
196
|
+
Date.civil(2000, 4, 6).strftime("%x").should == "04/06/00"
|
197
|
+
Date.civil(2000, 4, 6).strftime("%x").should == Date.civil(2000, 4, 6).strftime('%m/%d/%y')
|
198
|
+
end
|
199
|
+
|
200
|
+
it "should be able to show a full notation" do
|
201
|
+
Date.civil(2000, 4, 9).strftime("%+").should == "Sun Apr 9 00:00:00 +00:00 2000"
|
202
|
+
Date.civil(2000, 4, 9).strftime("%+").should == Date.civil(2000, 4, 9).strftime('%a %b %e %H:%M:%S %Z %Y')
|
203
|
+
end
|
204
|
+
|
205
|
+
end
|