smart_month 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/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
data/smart_month.gemspec
ADDED
@@ -0,0 +1,179 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{smart_month}
|
8
|
+
s.version = "1.0.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Derek Perez", "Jonathan Silverman"]
|
12
|
+
s.date = %q{2010-01-06}
|
13
|
+
s.description = %q{You can use SmartMonth to:
|
14
|
+
- Determine the first tuesday of any month in any year.
|
15
|
+
- Determine all of the fridays of any month in any year.
|
16
|
+
- Iterate through all the days of a month.
|
17
|
+
- Determine how many days of the month there are.
|
18
|
+
- Determine the first and last days of the month.
|
19
|
+
- And other fun date/month related things!}
|
20
|
+
s.email = %q{derek@derekperez.com}
|
21
|
+
s.extra_rdoc_files = [
|
22
|
+
"README"
|
23
|
+
]
|
24
|
+
s.files = [
|
25
|
+
"MIT-LICENSE",
|
26
|
+
"README",
|
27
|
+
"Rakefile",
|
28
|
+
"VERSION",
|
29
|
+
"lib/month.rb",
|
30
|
+
"lib/smart_month.rb",
|
31
|
+
"lib/smart_month/calculations.rb",
|
32
|
+
"lib/smart_month/collection.rb",
|
33
|
+
"lib/smart_month/extensions/date.rb",
|
34
|
+
"lib/smart_month/magic.rb",
|
35
|
+
"lib/smart_month/math.rb",
|
36
|
+
"lib/smart_month/rulesets.rb",
|
37
|
+
"lib/smart_month/util.rb",
|
38
|
+
"pkg/smart_month-1.0.0.gem",
|
39
|
+
"rdoc/classes/Date.html",
|
40
|
+
"rdoc/classes/Month.html",
|
41
|
+
"rdoc/classes/SmartMonth.html",
|
42
|
+
"rdoc/classes/SmartMonth/Calculations.html",
|
43
|
+
"rdoc/classes/SmartMonth/Collection.html",
|
44
|
+
"rdoc/classes/SmartMonth/Magic.html",
|
45
|
+
"rdoc/classes/SmartMonth/Magic/MonthFactory.html",
|
46
|
+
"rdoc/classes/SmartMonth/Math.html",
|
47
|
+
"rdoc/classes/SmartMonth/Rulesets.html",
|
48
|
+
"rdoc/classes/SmartMonth/Util.html",
|
49
|
+
"rdoc/classes/Time.html",
|
50
|
+
"rdoc/created.rid",
|
51
|
+
"rdoc/files/README.html",
|
52
|
+
"rdoc/files/lib/month_rb.html",
|
53
|
+
"rdoc/files/lib/smart_month/calculations_rb.html",
|
54
|
+
"rdoc/files/lib/smart_month/collection_rb.html",
|
55
|
+
"rdoc/files/lib/smart_month/extensions/date_rb.html",
|
56
|
+
"rdoc/files/lib/smart_month/magic_rb.html",
|
57
|
+
"rdoc/files/lib/smart_month/math_rb.html",
|
58
|
+
"rdoc/files/lib/smart_month/rulesets_rb.html",
|
59
|
+
"rdoc/files/lib/smart_month/util_rb.html",
|
60
|
+
"rdoc/files/lib/smart_month_rb.html",
|
61
|
+
"rdoc/fr_class_index.html",
|
62
|
+
"rdoc/fr_file_index.html",
|
63
|
+
"rdoc/fr_method_index.html",
|
64
|
+
"rdoc/index.html",
|
65
|
+
"rdoc/rdoc-style.css",
|
66
|
+
"smart_month.gemspec",
|
67
|
+
"test/spec/date/accessor_spec.rb",
|
68
|
+
"test/spec/date/add_month_spec.rb",
|
69
|
+
"test/spec/date/add_spec.rb",
|
70
|
+
"test/spec/date/boat_spec.rb",
|
71
|
+
"test/spec/date/civil_spec.rb",
|
72
|
+
"test/spec/date/commercial_spec.rb",
|
73
|
+
"test/spec/date/constants_spec.rb",
|
74
|
+
"test/spec/date/conversions_spec.rb",
|
75
|
+
"test/spec/date/downto_spec.rb",
|
76
|
+
"test/spec/date/eql_spec.rb",
|
77
|
+
"test/spec/date/gregorian_spec.rb",
|
78
|
+
"test/spec/date/hash_spec.rb",
|
79
|
+
"test/spec/date/infinity_spec.rb",
|
80
|
+
"test/spec/date/julian_spec.rb",
|
81
|
+
"test/spec/date/minus_month_spec.rb",
|
82
|
+
"test/spec/date/minus_spec.rb",
|
83
|
+
"test/spec/date/new_spec.rb",
|
84
|
+
"test/spec/date/neww_spec.rb",
|
85
|
+
"test/spec/date/ordinal_spec.rb",
|
86
|
+
"test/spec/date/parse_spec.rb",
|
87
|
+
"test/spec/date/relationship_spec.rb",
|
88
|
+
"test/spec/date/shared/civil.rb",
|
89
|
+
"test/spec/date/shared/commercial.rb",
|
90
|
+
"test/spec/date/shared/parse.rb",
|
91
|
+
"test/spec/date/shared/parse_eu.rb",
|
92
|
+
"test/spec/date/shared/parse_us.rb",
|
93
|
+
"test/spec/date/step_spec.rb",
|
94
|
+
"test/spec/date/strftime_spec.rb",
|
95
|
+
"test/spec/date/strptime_spec.rb",
|
96
|
+
"test/spec/date/upto_spec.rb",
|
97
|
+
"test/spec/parsedate/parsedate.rb",
|
98
|
+
"test/spec/time/httpdate_spec.rb",
|
99
|
+
"test/spec/time/iso8601_spec.rb",
|
100
|
+
"test/spec/time/rfc2822_spec.rb",
|
101
|
+
"test/spec/time/rfc822_spec.rb",
|
102
|
+
"test/spec/time/shared/rfc2822.rb",
|
103
|
+
"test/spec/time/shared/xmlschema.rb",
|
104
|
+
"test/spec/time/xmlschema_spec.rb",
|
105
|
+
"test/spec_helper.rb",
|
106
|
+
"test/test_helper.rb",
|
107
|
+
"test/unit/calculations_test.rb",
|
108
|
+
"test/unit/collection_test.rb",
|
109
|
+
"test/unit/magic_test.rb",
|
110
|
+
"test/unit/math_test.rb",
|
111
|
+
"test/unit/rulesets_test.rb",
|
112
|
+
"test/unit/samples/test_ruleset.yml",
|
113
|
+
"test/unit/util_test.rb"
|
114
|
+
]
|
115
|
+
s.homepage = %q{http://github.com/perezd/smart_month}
|
116
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
117
|
+
s.require_paths = ["lib"]
|
118
|
+
s.rubygems_version = %q{1.3.5}
|
119
|
+
s.summary = %q{SmartMonth is a "bodysnatcher" plugin that takes boring Date month fixnums and replaces them with a rich toolkit of functionality.}
|
120
|
+
s.test_files = [
|
121
|
+
"test/test_helper.rb",
|
122
|
+
"test/spec/date/strftime_spec.rb",
|
123
|
+
"test/spec/date/ordinal_spec.rb",
|
124
|
+
"test/spec/date/step_spec.rb",
|
125
|
+
"test/spec/date/hash_spec.rb",
|
126
|
+
"test/spec/date/new_spec.rb",
|
127
|
+
"test/spec/date/relationship_spec.rb",
|
128
|
+
"test/spec/date/julian_spec.rb",
|
129
|
+
"test/spec/date/shared/parse.rb",
|
130
|
+
"test/spec/date/shared/civil.rb",
|
131
|
+
"test/spec/date/shared/parse_eu.rb",
|
132
|
+
"test/spec/date/shared/parse_us.rb",
|
133
|
+
"test/spec/date/shared/commercial.rb",
|
134
|
+
"test/spec/date/strptime_spec.rb",
|
135
|
+
"test/spec/date/neww_spec.rb",
|
136
|
+
"test/spec/date/add_month_spec.rb",
|
137
|
+
"test/spec/date/add_spec.rb",
|
138
|
+
"test/spec/date/minus_spec.rb",
|
139
|
+
"test/spec/date/civil_spec.rb",
|
140
|
+
"test/spec/date/minus_month_spec.rb",
|
141
|
+
"test/spec/date/commercial_spec.rb",
|
142
|
+
"test/spec/date/parse_spec.rb",
|
143
|
+
"test/spec/date/gregorian_spec.rb",
|
144
|
+
"test/spec/date/downto_spec.rb",
|
145
|
+
"test/spec/date/accessor_spec.rb",
|
146
|
+
"test/spec/date/upto_spec.rb",
|
147
|
+
"test/spec/date/infinity_spec.rb",
|
148
|
+
"test/spec/date/boat_spec.rb",
|
149
|
+
"test/spec/date/eql_spec.rb",
|
150
|
+
"test/spec/date/constants_spec.rb",
|
151
|
+
"test/spec/date/conversions_spec.rb",
|
152
|
+
"test/spec/parsedate/parsedate.rb",
|
153
|
+
"test/spec/time/shared/rfc2822.rb",
|
154
|
+
"test/spec/time/shared/xmlschema.rb",
|
155
|
+
"test/spec/time/httpdate_spec.rb",
|
156
|
+
"test/spec/time/rfc2822_spec.rb",
|
157
|
+
"test/spec/time/iso8601_spec.rb",
|
158
|
+
"test/spec/time/xmlschema_spec.rb",
|
159
|
+
"test/spec/time/rfc822_spec.rb",
|
160
|
+
"test/unit/util_test.rb",
|
161
|
+
"test/unit/calculations_test.rb",
|
162
|
+
"test/unit/collection_test.rb",
|
163
|
+
"test/unit/math_test.rb",
|
164
|
+
"test/unit/rulesets_test.rb",
|
165
|
+
"test/unit/magic_test.rb",
|
166
|
+
"test/spec_helper.rb"
|
167
|
+
]
|
168
|
+
|
169
|
+
if s.respond_to? :specification_version then
|
170
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
171
|
+
s.specification_version = 3
|
172
|
+
|
173
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
174
|
+
else
|
175
|
+
end
|
176
|
+
else
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'date'
|
2
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
3
|
+
|
4
|
+
describe "Date#ajd" do
|
5
|
+
it "should be able to determine the Astronomical Julian day for a date" do
|
6
|
+
Date.civil(2007, 1, 17).ajd.should == 4908235.to_r / 2
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "Date#amjd" do
|
11
|
+
it "should be able to determine the Astronomical Modified Julian day for a date" do
|
12
|
+
Date.civil(2007, 1, 17).amjd.should == 54117
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "Date#day_fraction" do
|
17
|
+
it "should be able to determine the day fraction for a date" do
|
18
|
+
Date.civil(2007, 1, 17).day_fraction.should == 0
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "Date#mjd" do
|
23
|
+
it "should be able to determine the Modified Julian day for a date" do
|
24
|
+
Date.civil(2007, 1, 17).mjd.should == 54117
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "Date#ld" do
|
29
|
+
it "should be able to determine the Modified Julian day for a date" do
|
30
|
+
Date.civil(2007, 1, 17).ld.should == 154958
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe "Date#year" do
|
35
|
+
it "should be able to determine the year for a date" do
|
36
|
+
Date.civil(2007, 1, 17).year.should == 2007
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe "Date#yday" do
|
41
|
+
it "should be able to determine the year for a date" do
|
42
|
+
Date.civil(2007, 1, 17).yday.should == 17
|
43
|
+
Date.civil(2008, 10, 28).yday.should == 302
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe "Date#mon" do
|
48
|
+
it "should be able to determine the month for a date" do
|
49
|
+
Date.civil(2007, 1, 17).mon.should == 1
|
50
|
+
Date.civil(2008, 10, 28).mon.should == 10
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe "Date#mday" do
|
55
|
+
it "should be able to determine the day of the month for a date" do
|
56
|
+
Date.civil(2007, 1, 17).mday.should == 17
|
57
|
+
Date.civil(2008, 10, 28).mday.should == 28
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe "Date#wday" do
|
62
|
+
it "should be able to determine the week day for a date" do
|
63
|
+
Date.civil(2007, 1, 17).wday.should == 3
|
64
|
+
Date.civil(2008, 10, 26).wday.should == 0
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe "Date#cwyear" do
|
69
|
+
it "should be able to determine the commercial year for a date" do
|
70
|
+
Date.civil(2007, 1, 17).cwyear.should == 2007
|
71
|
+
Date.civil(2008, 10, 28).cwyear.should == 2008
|
72
|
+
Date.civil(2007, 12, 31).cwyear.should == 2008
|
73
|
+
Date.civil(2010, 1, 1).cwyear.should == 2009
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
describe "Date#cweek" do
|
78
|
+
it "should be able to determine the commercial week for a date" do
|
79
|
+
Date.civil(2007, 1, 17).cweek.should == 3
|
80
|
+
Date.civil(2008, 10, 28).cweek.should == 44
|
81
|
+
Date.civil(2007, 12, 31).cweek.should == 1
|
82
|
+
Date.civil(2010, 1, 1).cweek.should == 53
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
describe "Date#cwday" do
|
87
|
+
it "should be able to determine the commercial week day for a date" do
|
88
|
+
Date.civil(2007, 1, 17).cwday.should == 3
|
89
|
+
Date.civil(2008, 10, 26).cwday.should == 7
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'date'
|
2
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
3
|
+
|
4
|
+
describe "Date#>>" do
|
5
|
+
|
6
|
+
it "should add a number of months to a Date" do
|
7
|
+
d = Date.civil(2007,2,27) >> 10
|
8
|
+
d.should == Date.civil(2007, 12, 27)
|
9
|
+
end
|
10
|
+
|
11
|
+
|
12
|
+
it "should result in the last day of a month if the day doesn't exist" do
|
13
|
+
d = Date.civil(2008,3,31) >> 1
|
14
|
+
d.should == Date.civil(2008, 4, 30)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should raise an error on non numeric parameters" do
|
18
|
+
lambda { Date.civil(2007,2,27) >> :hello }.should raise_error(TypeError)
|
19
|
+
lambda { Date.civil(2007,2,27) >> "hello" }.should raise_error(TypeError)
|
20
|
+
lambda { Date.civil(2007,2,27) >> Date.new }.should raise_error(TypeError)
|
21
|
+
lambda { Date.civil(2007,2,27) >> Object.new }.should raise_error(TypeError)
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'date'
|
2
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
3
|
+
|
4
|
+
describe "Date#+" do
|
5
|
+
|
6
|
+
it "should add a number of days to a Date" do
|
7
|
+
d = Date.civil(2007,2,27) + 10
|
8
|
+
d.should == Date.civil(2007, 3, 9)
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should add a negative number of days to a Date" do
|
12
|
+
d = Date.civil(2007,2,27).+(-10)
|
13
|
+
d.should == Date.civil(2007, 2, 17)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should raise an error on non numeric parameters" do
|
17
|
+
lambda { Date.civil(2007,2,27) + :hello }.should raise_error(TypeError)
|
18
|
+
lambda { Date.civil(2007,2,27) + "hello" }.should raise_error(TypeError)
|
19
|
+
lambda { Date.civil(2007,2,27) + Date.new }.should raise_error(TypeError)
|
20
|
+
lambda { Date.civil(2007,2,27) + Object.new }.should raise_error(TypeError)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -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,28 @@
|
|
1
|
+
require 'date'
|
2
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
3
|
+
require File.dirname(__FILE__) + '/shared/civil'
|
4
|
+
|
5
|
+
describe "Date#civil" do
|
6
|
+
|
7
|
+
it_behaves_like(:date_civil, :civil)
|
8
|
+
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "Date#valid_civil?" do
|
12
|
+
|
13
|
+
it "should be able to determine if a date is valid" do
|
14
|
+
Date.valid_civil?(1582, 10, 14).should == nil
|
15
|
+
Date.valid_civil?(1582, 10, 15).should == Date.civil(1582, 10, 15).jd
|
16
|
+
Date.valid_civil?(1582, 10, 14, Date::ENGLAND).should_not == nil
|
17
|
+
Date.valid_civil?(1582, 10, 14, Date::ENGLAND).should == Date.civil(1582, 10, 14, Date::ENGLAND).jd
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should be able to handle negative months and days" do
|
21
|
+
Date.valid_civil?(1582, -3, -18).should == nil
|
22
|
+
Date.valid_civil?(1582, -3, -17).should == Date.civil(1582, 10, 15).jd
|
23
|
+
|
24
|
+
Date.valid_civil?(2007, -11, -10).should == Date.civil(2007, 2, 19).jd
|
25
|
+
Date.valid_civil?(2008, -11, -10).should == Date.civil(2008, 2, 20).jd
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'date'
|
2
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
3
|
+
require File.dirname(__FILE__) + '/shared/commercial'
|
4
|
+
|
5
|
+
describe "Date#commercial" do
|
6
|
+
|
7
|
+
it_behaves_like(:date_commercial, :commercial)
|
8
|
+
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "Date#valid_commercial?" do
|
12
|
+
|
13
|
+
it "should be able to determine if the date is a valid commercial date" do
|
14
|
+
Date.valid_commercial?(1582, 41, 4).should == nil
|
15
|
+
Date.valid_commercial?(1582, 41, 5).should == Date.civil(1582, 10, 15).jd
|
16
|
+
# valid_commercial? can't handle dates before the Gregorian calendar
|
17
|
+
Date.valid_commercial?(1582, 41, 4, Date::ENGLAND).should == nil
|
18
|
+
Date.valid_commercial?(1752, 37, 4, Date::ENGLAND).should == Date.civil(1752, 9, 14, Date::ENGLAND).jd
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should be able to handle negative week and day numbers" do
|
22
|
+
Date.valid_commercial?(1582, -12, -4).should == nil
|
23
|
+
Date.valid_commercial?(1582, -12, -3).should == Date.civil(1582, 10, 15).jd
|
24
|
+
|
25
|
+
Date.valid_commercial?(2007, -44, -2).should == Date.civil(2007, 3, 3).jd
|
26
|
+
Date.valid_commercial?(2008, -44, -2).should == Date.civil(2008, 3, 1).jd
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'date'
|
2
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
3
|
+
|
4
|
+
describe "Date constants" do
|
5
|
+
|
6
|
+
it "should define ITALY" do
|
7
|
+
Date::ITALY.should == 2299161 # 1582-10-15
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should define ENGLAND" do
|
11
|
+
Date::ENGLAND.should == 2361222 # 1752-09-14
|
12
|
+
end
|
13
|
+
|
14
|
+
# Fixes in 1.8.7
|
15
|
+
ruby_bug "#", "1.8.6" do
|
16
|
+
it "should define JULIAN" do
|
17
|
+
(Date::JULIAN <=> Date::Infinity.new).should == 0
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# Fixed in 1.8.7
|
22
|
+
ruby_bug "#", "1.8.6" do
|
23
|
+
it "should define GREGORIAN" do
|
24
|
+
(Date::GREGORIAN <=> -Date::Infinity.new).should == 0
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should define MONTHNAMES" do
|
29
|
+
Date::MONTHNAMES.should == [nil] + %w(January February March April May June July
|
30
|
+
August September October November December)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should define DAYNAMES" do
|
34
|
+
Date::DAYNAMES.should == %w(Sunday Monday Tuesday Wednesday Thursday Friday Saturday)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should define ABBR_MONTHNAMES" do
|
38
|
+
Date::ABBR_DAYNAMES.should == %w(Sun Mon Tue Wed Thu Fri Sat)
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,153 @@
|
|
1
|
+
require 'date'
|
2
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
3
|
+
|
4
|
+
|
5
|
+
describe "Date#new_start" do
|
6
|
+
it "should convert a date object into another with a new calendar reform" do
|
7
|
+
Date.civil(1582, 10, 14, Date::ENGLAND).new_start.should == Date.civil(1582, 10, 24)
|
8
|
+
Date.civil(1582, 10, 4, Date::ENGLAND).new_start.should == Date.civil(1582, 10, 4)
|
9
|
+
Date.civil(1582, 10, 15).new_start(Date::ENGLAND).should == Date.civil(1582, 10, 5, Date::ENGLAND)
|
10
|
+
Date.civil(1752, 9, 14).new_start(Date::ENGLAND).should == Date.civil(1752, 9, 14, Date::ENGLAND)
|
11
|
+
Date.civil(1752, 9, 13).new_start(Date::ENGLAND).should == Date.civil(1752, 9, 2, Date::ENGLAND)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "Date#italy" do
|
16
|
+
it "should convert a date object into another with the Italian calendar reform" do
|
17
|
+
Date.civil(1582, 10, 14, Date::ENGLAND).italy.should == Date.civil(1582, 10, 24)
|
18
|
+
Date.civil(1582, 10, 4, Date::ENGLAND).italy.should == Date.civil(1582, 10, 4)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "Date#england" do
|
23
|
+
it "should convert a date object into another with the English calendar reform" do
|
24
|
+
Date.civil(1582, 10, 15).england.should == Date.civil(1582, 10, 5, Date::ENGLAND)
|
25
|
+
Date.civil(1752, 9, 14).england.should == Date.civil(1752, 9, 14, Date::ENGLAND)
|
26
|
+
Date.civil(1752, 9, 13).england.should == Date.civil(1752, 9, 2, Date::ENGLAND)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "Date#julian" do
|
31
|
+
it "should convert a date object into another with the Julian calendar" do
|
32
|
+
Date.civil(1582, 10, 15).julian.should == Date.civil(1582, 10, 5, Date::JULIAN)
|
33
|
+
Date.civil(1752, 9, 14).julian.should == Date.civil(1752, 9, 3, Date::JULIAN)
|
34
|
+
Date.civil(1752, 9, 13).julian.should == Date.civil(1752, 9, 2, Date::JULIAN)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "Date#gregorian" do
|
39
|
+
it "should convert a date object into another with the Gregorian calendar" do
|
40
|
+
Date.civil(1582, 10, 4).gregorian.should == Date.civil(1582, 10, 14, Date::GREGORIAN)
|
41
|
+
Date.civil(1752, 9, 14).gregorian.should == Date.civil(1752, 9, 14, Date::GREGORIAN)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "Date#ordinal_to_jd" do
|
46
|
+
it "should convert an ordinal date (year-day) to a Julian day number" do
|
47
|
+
Date.ordinal_to_jd(2007, 55).should == 2454156
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "Date#jd_to_ordinal" do
|
52
|
+
it "should convert a Julian day number into an ordinal date" do
|
53
|
+
Date.jd_to_ordinal(2454156).should == [2007, 55]
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "Date#civil_to_jd" do
|
58
|
+
it "should convert a civil date into a Julian day number" do
|
59
|
+
Date.civil_to_jd(2007, 2, 24).should == 2454156
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe "Date#jd_to_civil" do
|
64
|
+
it "should convert a Julian day into a civil date" do
|
65
|
+
Date.jd_to_civil(2454156).should == [2007, 2, 24]
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe "Date#commercial_to_jd" do
|
70
|
+
it "should convert a commercial date (year - week - day of week) into a Julian day number" do
|
71
|
+
Date.commercial_to_jd(2007, 45, 1).should == 2454410
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe "Date#jd_to_commercial" do
|
76
|
+
it "should convert a Julian day number into a commercial date" do
|
77
|
+
Date.jd_to_commercial(2454410).should == [2007, 45, 1]
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
describe "Date#ajd_to_jd" do
|
82
|
+
it "should convert a Astronomical Julian day number into a Julian day number" do
|
83
|
+
Date.ajd_to_jd(2454410).should == [2454410, Rational(1,2)]
|
84
|
+
Date.ajd_to_jd(2454410, 1.to_r / 2).should == [2454411, 0]
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe "Date#jd_to_ajd" do
|
89
|
+
it "should convert a Julian day number into a Astronomical Julian day number" do
|
90
|
+
Date.jd_to_ajd(2454410, 0).should == 2454410 - Rational(1, 2)
|
91
|
+
Date.jd_to_ajd(2454410, 1.to_r / 2).should == 2454410
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
describe "Date#day_fraction_to_time" do
|
96
|
+
it "should be able to convert a day fraction into time" do
|
97
|
+
Date.day_fraction_to_time(2).should == [48, 0, 0, 0]
|
98
|
+
Date.day_fraction_to_time(1).should == [24, 0, 0, 0]
|
99
|
+
Date.day_fraction_to_time(1.to_r / 2).should == [12, 0, 0, 0]
|
100
|
+
Date.day_fraction_to_time(1.to_r / 7).should == [3, 25, 42, 1.to_r / 100800]
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
describe "Date#time_to_day_fraction" do
|
105
|
+
it "should be able to convert a time into a day fraction" do
|
106
|
+
Date.time_to_day_fraction(48, 0, 0).should == 2
|
107
|
+
Date.time_to_day_fraction(24, 0, 0).should == 1
|
108
|
+
Date.time_to_day_fraction(12, 0, 0).should == 1.to_r / 2
|
109
|
+
Date.time_to_day_fraction(10, 20, 10).should == 10.to_r / 24 + 20.to_r / (24 * 60) + 10.to_r / (24 * 60 * 60)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
describe "Date#amjd_to_ajd" do
|
114
|
+
it "shoud be able to convert Astronomical Modified Julian day numbers into Astronomical Julian day numbers" do
|
115
|
+
Date.amjd_to_ajd(10).should == 10 + 2400000 + 1.to_r / 2
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
describe "Date#ajd_to_amjd" do
|
120
|
+
it "shoud be able to convert Astronomical Julian day numbers into Astronomical Modified Julian day numbers" do
|
121
|
+
Date.ajd_to_amjd(10000010).should == 10000010 - 2400000 - 1.to_r / 2
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
describe "Date#mjd_to_jd" do
|
126
|
+
it "shoud be able to convert Modified Julian day numbers into Julian day numbers" do
|
127
|
+
Date.mjd_to_jd(2000).should == 2000 + 2400001
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
describe "Date#jd_to_mjd" do
|
132
|
+
it "shoud be able to convert Julian day numbers into Modified Julian day numbers" do
|
133
|
+
Date.jd_to_mjd(2500000).should == 2500000 - 2400001
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
describe "Date#ld_to_jd" do
|
138
|
+
it "should be able to convert the number of days since the Gregorian calendar in Italy into Julian day numbers" do
|
139
|
+
Date.ld_to_jd(450000).should == 450000 + 2299160
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
describe "Date#jd_to_ld" do
|
144
|
+
it "should be able to convert Julian day numbers into the number of days since the Gregorian calendar in Italy" do
|
145
|
+
Date.jd_to_ld(2450000).should == 2450000 - 2299160
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
describe "Date#jd_to_wday" do
|
150
|
+
it "should be able to convert a Julian day number into a week day number" do
|
151
|
+
Date.jd_to_wday(2454482).should == 3
|
152
|
+
end
|
153
|
+
end
|