darian_calendar 1.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/.gitignore +1 -0
- data/.rspec +1 -1
- data/.travis.yml +7 -0
- data/.yardopts +6 -0
- data/CHANGELOG.md +3 -0
- data/Gemfile +1 -0
- data/README.md +13 -1
- data/Rakefile +1 -1
- data/darian_calendar.gemspec +16 -15
- data/lib/darian_calendar.rb +12 -0
- data/lib/darian_calendar/date.rb +31 -7
- data/lib/darian_calendar/time.rb +41 -1
- data/lib/darian_calendar/version.rb +1 -1
- data/spec/darian_calendar_spec.rb +16 -3
- data/spec/date_spec.rb +85 -13
- data/spec/spec_helper.rb +3 -0
- data/spec/time_spec.rb +124 -6
- metadata +8 -3
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
YjgyMGVjYTc4YTFlZTMzMDdkOTdjZTFlMDVkOGJhZGZmYzZhOWVmNg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZmZhMDExOWRlM2NlZWQ4NDY5NTBjZTI4MzUyMzMzOTcxNjViNzExNw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
Mjg1YzA2NGJhMTUwNzdmYjVmOGVkYWZhYzEzNWNlN2E5ZTQ4NTViNTQxYTdj
|
10
|
+
ODM3OWUzNmZlZGNhZjFjYWQyYmVmZDAwOTI5MTAwMDg3N2JhZDc3NWYzYzgz
|
11
|
+
Yjg0NDMwYTEzMTZhOTQ1MWRmZWYyNjg4MTllNmQ3ZjFiYzcxMjM=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YjA5ZDQ0YjI2NDMyYTUxZWNiYTIyMmY5ZmVjMmE0MTFlOTJhMmM1NmM1M2I0
|
14
|
+
ZDEzMzQ5MzljZDBjY2E2YzA0NzM0NDY0NGYxZWY1ZGMxMzViMmNmM2NmZmIw
|
15
|
+
M2MzNjA4MDMxMDBmMTYxNTQxNTkxYmRhYzUyMDE4NGQzNDBjNTY=
|
data/.gitignore
CHANGED
data/.rspec
CHANGED
@@ -1 +1 @@
|
|
1
|
-
--color
|
1
|
+
--color
|
data/.travis.yml
CHANGED
data/.yardopts
ADDED
data/CHANGELOG.md
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Darian Calendar
|
2
2
|
|
3
|
-
[![Build Status](https://travis-ci.org/marsec/darian_calendar.png)](https://travis-ci.org/marsec/darian_calendar)
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/darian_calendar.png)](http://badge.fury.io/rb/darian_calendar) [![Build Status](https://travis-ci.org/marsec/darian_calendar.png)](https://travis-ci.org/marsec/darian_calendar)
|
4
4
|
|
5
5
|
_The [Darian calendar] is a proposed system of time-keeping designed to serve the needs of any possible future human settlers on the planet Mars.
|
6
6
|
It was created by aerospace engineer and political scientist Thomas Gangale in 1985 and named by him after his son Darius._ ([Wikipedia])
|
@@ -82,6 +82,18 @@ DarianCalendar::CalendarTypes::HENSEL
|
|
82
82
|
DarianCalendar::CalendarTypes::AQUA
|
83
83
|
```
|
84
84
|
|
85
|
+
## Supported Ruby Interpreters
|
86
|
+
|
87
|
+
This library aims to support and is [tested](https://travis-ci.org/marsec/darian_calendar) against the following Ruby interpreters and versions:
|
88
|
+
|
89
|
+
- MRI 1.9.2
|
90
|
+
- MRI 1.9.3
|
91
|
+
- MRI 2.0.0
|
92
|
+
- MRI 2.1.0
|
93
|
+
- JRuby
|
94
|
+
- Rubinius
|
95
|
+
|
96
|
+
|
85
97
|
## Testing
|
86
98
|
|
87
99
|
Unit tests are provided for all of Darian Calendar's methods:
|
data/Rakefile
CHANGED
data/darian_calendar.gemspec
CHANGED
@@ -3,21 +3,22 @@
|
|
3
3
|
$LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
|
4
4
|
require 'darian_calendar/version'
|
5
5
|
|
6
|
-
Gem::Specification.new do |
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = 'darian_calendar'
|
8
|
+
gem.version = DarianCalendar::VERSION
|
9
|
+
gem.date = Time.now.strftime('%Y-%m-%d')
|
10
|
+
gem.platform = Gem::Platform::RUBY
|
11
|
+
gem.summary = 'Converts earth time to mars time and back again. You can choose between 5 variants of the Darian calendar system.'
|
12
|
+
gem.description = 'This Ruby library converts earth time to mars time and back again. You can choose between 5 variants of the Darian calendar system; Martiana, Defrost, Areosynchronous, Hensel and Aqua.'
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
14
|
+
gem.authors = ['Christian Worreschk']
|
15
|
+
gem.email = ['info@marsec.de']
|
16
|
+
gem.homepage = 'http://github.com/marsec/darian_calendar'
|
17
|
+
gem.licenses = ['EUPL-1.1']
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
19
|
+
gem.require_paths = ['lib']
|
20
|
+
gem.files = `git ls-files`.split("\n")
|
21
|
+
gem.test_files = `git ls-files -- {spec}/*`.split("\n")
|
22
|
+
gem.extra_rdoc_files = ['README.md', 'LICENSE.md', 'CHANGELOG.md']
|
23
|
+
gem.rdoc_options = ['--line-numbers', '--inline-source', '--title', 'Darian Calendar']
|
23
24
|
end
|
data/lib/darian_calendar.rb
CHANGED
@@ -63,6 +63,18 @@ module DarianCalendar
|
|
63
63
|
DarianCalendar::Date.today(type)
|
64
64
|
end
|
65
65
|
|
66
|
+
# Returns true if the given martian year is a leap year
|
67
|
+
# @param year [Integer] martian year
|
68
|
+
# @return [Boolean] true if the given year is a leap year
|
69
|
+
def is_mars_leap_year?(year)
|
70
|
+
return false if year.nil?
|
71
|
+
return true if (year % 500) == 0
|
72
|
+
return false if (year % 100) == 0
|
73
|
+
return true if (year % 10) == 0
|
74
|
+
return false if (year % 2) == 0
|
75
|
+
return true
|
76
|
+
end
|
77
|
+
|
66
78
|
end
|
67
79
|
|
68
80
|
end
|
data/lib/darian_calendar/date.rb
CHANGED
@@ -36,6 +36,9 @@ module DarianCalendar
|
|
36
36
|
|
37
37
|
protected
|
38
38
|
|
39
|
+
# Set all attributes by the number of martian sols and calendar type
|
40
|
+
# @param total_sols [Float] Total number of martian sols
|
41
|
+
# @param type [DarianCalendar::CalendarTypes] Calendar type
|
39
42
|
def set_attributes(total_sols, type)
|
40
43
|
@calendar_type = type.to_s.capitalize
|
41
44
|
@total_sols = total_sols
|
@@ -137,7 +140,7 @@ module DarianCalendar
|
|
137
140
|
end
|
138
141
|
|
139
142
|
# Sets the model attributes from a JSON string. Returns self.
|
140
|
-
# @param
|
143
|
+
# @param string [String] JSON string
|
141
144
|
# @return [DarianCalendar::Date] mars date
|
142
145
|
def self.from_json(string)
|
143
146
|
json = JSON::parse(string)
|
@@ -145,6 +148,31 @@ module DarianCalendar
|
|
145
148
|
self.new(json['total_sols'].to_f, type)
|
146
149
|
end
|
147
150
|
|
151
|
+
# Creates a date object by year, month and sol.
|
152
|
+
# If you pass the year with nothing else time will default to the first month 1 of that year.
|
153
|
+
# @param year [Integer] year
|
154
|
+
# @param month [Integer] month
|
155
|
+
# @param sol [Integer] sol
|
156
|
+
# @param type [DarianCalendar::CalendarTypes] Calendar type
|
157
|
+
# @return [DarianCalendar::Date] mars date
|
158
|
+
def self.by_digits(year=nil, month=1, sol=1, type=DarianCalendar::CalendarTypes::MARTIANA)
|
159
|
+
if year.nil?
|
160
|
+
raise ArgumentError, 'Invalid year'
|
161
|
+
end
|
162
|
+
if (month < 1) || (month >24)
|
163
|
+
raise ArgumentError, 'Invalid month'
|
164
|
+
end
|
165
|
+
if (sol < 1) || (sol > 28)
|
166
|
+
raise ArgumentError, 'Invalid sol'
|
167
|
+
end
|
168
|
+
if ((month % 6) == 0) && (sol == 28) && !((month == 24) && DarianCalendar::is_mars_leap_year?(year))
|
169
|
+
raise ArgumentError, 'Invalid sol for this month'
|
170
|
+
end
|
171
|
+
|
172
|
+
sols = sol + ((month-1) * 28) - ((month-1)/6).floor + 668 * year + (year / 2).floor + ((year-1) / 10).floor - ((year-1) / 100).floor + ((year-1) / 1000).floor
|
173
|
+
return self.new(sols)
|
174
|
+
end
|
175
|
+
|
148
176
|
# Compares two dates and returns -1, zero, 1 or nil. The other should be a mars date object.
|
149
177
|
# @param another [DarianCalendar::Date]
|
150
178
|
# @return [Integer] Compare result
|
@@ -161,11 +189,7 @@ module DarianCalendar
|
|
161
189
|
# Returns true if the given year is a leap year
|
162
190
|
# @return [Boolean] true if the given year is a leap year
|
163
191
|
def leap?
|
164
|
-
|
165
|
-
return false if (@year % 100) == 0
|
166
|
-
return true if (@year % 10) == 0
|
167
|
-
return false if (@year % 2) == 0
|
168
|
-
return true
|
192
|
+
DarianCalendar::is_mars_leap_year?(@year)
|
169
193
|
end
|
170
194
|
|
171
195
|
# Converts the given mars date to earth date
|
@@ -205,7 +229,7 @@ module DarianCalendar
|
|
205
229
|
# @return [DarianCalendar::Date] mars date
|
206
230
|
def initialize(sols=nil, type=DarianCalendar::CalendarTypes::MARTIANA)
|
207
231
|
total_sols = sols.to_f != 0 ? sols.to_f : DarianCalendar.sols_from_earth(::Date.today)
|
208
|
-
self.set_attributes(total_sols, type)
|
232
|
+
self.set_attributes(total_sols.floor, type)
|
209
233
|
end
|
210
234
|
|
211
235
|
end
|
data/lib/darian_calendar/time.rb
CHANGED
@@ -28,6 +28,13 @@ module DarianCalendar
|
|
28
28
|
self.from_earth(::Time.parse(string), type)
|
29
29
|
end
|
30
30
|
|
31
|
+
# Creates a date object denoting the present mars day.
|
32
|
+
# @param type [DarianCalendar::CalendarTypes] Calendar type
|
33
|
+
# @return [DarianCalendar::Time] current mars date as time object
|
34
|
+
def self.today(type=DarianCalendar::CalendarTypes::MARTIANA)
|
35
|
+
self.new(DarianCalendar::Date.today.total_sols)
|
36
|
+
end
|
37
|
+
|
31
38
|
# Returns the current mars time.
|
32
39
|
# @param type [DarianCalendar::CalendarTypes] Calendar type
|
33
40
|
# @return [DarianCalendar::Time] current mars time
|
@@ -35,6 +42,39 @@ module DarianCalendar
|
|
35
42
|
self.from_earth(::Time.now, type)
|
36
43
|
end
|
37
44
|
|
45
|
+
# Creates a date object by year, month, sol, hour, minute and second.
|
46
|
+
# If you pass the year with nothing else time will default to the first month 1 of that year at 00:00:00.
|
47
|
+
# @param year [Integer] year
|
48
|
+
# @param month [Integer] month
|
49
|
+
# @param month [Integer] sol
|
50
|
+
# @param month [Integer] hour
|
51
|
+
# @param month [Integer] minute
|
52
|
+
# @param sol [Integer] second
|
53
|
+
# @param type [DarianCalendar::CalendarTypes] Calendar type
|
54
|
+
# @return [DarianCalendar::Time] mars time
|
55
|
+
def self.by_digits(year=nil, month=1, sol=1, hour=0, minute=0, second=0, type=DarianCalendar::CalendarTypes::MARTIANA)
|
56
|
+
if (hour < 0) || (hour > 24)
|
57
|
+
raise ArgumentError, 'Invalid hour'
|
58
|
+
end
|
59
|
+
if (minute < 0) || (minute > 60)
|
60
|
+
raise ArgumentError, 'Invalid minute'
|
61
|
+
end
|
62
|
+
if (second < 0) || (second > 60)
|
63
|
+
raise ArgumentError, 'Invalid second'
|
64
|
+
end
|
65
|
+
|
66
|
+
date = DarianCalendar::Date.by_digits(year, month, sol)
|
67
|
+
sols = date.total_sols.to_f
|
68
|
+
|
69
|
+
second+=1 if (second != 0)
|
70
|
+
|
71
|
+
sols += (hour.to_f / 24.0)
|
72
|
+
sols += (minute.to_f / 1440.0)
|
73
|
+
sols += (second.to_f / 86400.0)
|
74
|
+
|
75
|
+
return self.new(sols, type)
|
76
|
+
end
|
77
|
+
|
38
78
|
# Compares two times and returns -1, zero, 1 or nil. The other should be a mars time object.
|
39
79
|
# @param another [DarianCalendar::Time]
|
40
80
|
# @return [Integer] Compare result
|
@@ -59,7 +99,7 @@ module DarianCalendar
|
|
59
99
|
# Returns the date of the given mars time
|
60
100
|
# @return [DarianCalendar::Date] mars date
|
61
101
|
def to_date
|
62
|
-
DarianCalendar::Date.
|
102
|
+
DarianCalendar::Date.by_digits(self.year, self.month, self.sol, self.calendar_type)
|
63
103
|
end
|
64
104
|
|
65
105
|
# Converts a number of martian sols to mars time.
|
@@ -4,6 +4,12 @@ require 'spec_helper'
|
|
4
4
|
|
5
5
|
describe DarianCalendar do
|
6
6
|
|
7
|
+
describe 'logical expections' do
|
8
|
+
it 'should compare if Date.today and Time.today are equal ' do
|
9
|
+
DarianCalendar::Date.today.should == DarianCalendar::Time.today
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
7
13
|
describe 'class methods' do
|
8
14
|
|
9
15
|
#def sols_from_earth(earth_date_time)
|
@@ -12,7 +18,7 @@ describe DarianCalendar do
|
|
12
18
|
# sols = (days - EPOCH_OFFSET) / MARS_TO_EARTH_DAYS
|
13
19
|
# return sols
|
14
20
|
#end
|
15
|
-
describe '
|
21
|
+
describe '.sols_from_earth' do
|
16
22
|
context 'parameter is a date object' do
|
17
23
|
it 'returns the total number of martian sols' do
|
18
24
|
earth = ::Date.new(2012, 10, 15)
|
@@ -27,7 +33,7 @@ describe DarianCalendar do
|
|
27
33
|
end
|
28
34
|
end
|
29
35
|
|
30
|
-
describe '
|
36
|
+
describe '.now' do
|
31
37
|
it 'returns current mars time' do
|
32
38
|
earth = ::Time.utc(2012, 10, 15, 16, 50, 0)
|
33
39
|
::Time.should_receive(:now).and_return(earth)
|
@@ -35,13 +41,20 @@ describe DarianCalendar do
|
|
35
41
|
end
|
36
42
|
end
|
37
43
|
|
38
|
-
describe '
|
44
|
+
describe '.today' do
|
39
45
|
it 'returns current mars date' do
|
40
46
|
earth = ::Date.new(2012, 10, 15)
|
41
47
|
::Date.should_receive(:today).and_return(earth)
|
42
48
|
DarianCalendar.today.should == DarianCalendar::Date.from_earth(earth)
|
43
49
|
end
|
44
50
|
end
|
51
|
+
|
52
|
+
describe '.is_mars_leap_year?' do
|
53
|
+
it 'returns if year is a leap year' do
|
54
|
+
DarianCalendar::is_mars_leap_year?(214).should == false
|
55
|
+
DarianCalendar::is_mars_leap_year?(215).should == true
|
56
|
+
end
|
57
|
+
end
|
45
58
|
end
|
46
59
|
|
47
60
|
end
|
data/spec/date_spec.rb
CHANGED
@@ -6,8 +6,8 @@ describe DarianCalendar::Date do
|
|
6
6
|
|
7
7
|
before do
|
8
8
|
@earth_date = ::Date.new(2012, 10, 15)
|
9
|
-
@mars_date = DarianCalendar::Date.
|
10
|
-
@mars_date_json = '{"calendar_type":"Martiana","month":14,"month_name":"Mithuna","month_of_season":1,"season":2,"sol":26,"sol_of_season":53,"sol_of_year":387,"total_sols":143466
|
9
|
+
@mars_date = DarianCalendar::Date.by_digits(214, 14, 26)
|
10
|
+
@mars_date_json = '{"calendar_type":"Martiana","month":14,"month_name":"Mithuna","month_of_season":1,"season":2,"sol":26,"sol_of_season":53,"sol_of_year":387,"total_sols":143466,"week_sol":5,"week_sol_name":"Sol Jovis","year":214}'
|
11
11
|
end
|
12
12
|
|
13
13
|
describe 'attributes' do
|
@@ -17,25 +17,37 @@ describe DarianCalendar::Date do
|
|
17
17
|
@mars_date.week_day.should == @mars_date.week_sol
|
18
18
|
end
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
describe 'initialize method' do
|
23
|
-
it 'converts earth date to mars date' do
|
20
|
+
it 'verifies all attributes' do
|
24
21
|
@mars_date.year.should == 214
|
25
22
|
@mars_date.month.should == 14
|
26
23
|
@mars_date.sol.should == 26
|
27
24
|
|
28
|
-
@mars_date.total_sols.should == 143466.
|
25
|
+
@mars_date.total_sols.should == 143466.0
|
29
26
|
@mars_date.season.should == 2
|
30
27
|
@mars_date.sol_of_season.should == 53
|
31
28
|
@mars_date.month_of_season.should == 1
|
32
29
|
@mars_date.sol_of_year.should == 387
|
33
30
|
@mars_date.week_sol.should == 5
|
34
31
|
end
|
32
|
+
|
35
33
|
end
|
36
34
|
|
37
35
|
describe 'class methods' do
|
38
36
|
|
37
|
+
describe '.new' do
|
38
|
+
context 'total sols are given' do
|
39
|
+
it 'returns mars date by count of martian sols' do
|
40
|
+
DarianCalendar::Date.new(@mars_date.total_sols).should == @mars_date
|
41
|
+
end
|
42
|
+
end
|
43
|
+
context 'no sols are given' do
|
44
|
+
it 'returns current mars date' do
|
45
|
+
::Date.stub(:today).and_return(@earth_date)
|
46
|
+
DarianCalendar::Date.new.should == DarianCalendar::Date.today
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
39
51
|
describe '.from_earth' do
|
40
52
|
it 'converts an earth date to a mars date' do
|
41
53
|
DarianCalendar::Date.from_earth(@earth_date).should == @mars_date
|
@@ -50,7 +62,7 @@ describe DarianCalendar::Date do
|
|
50
62
|
|
51
63
|
describe '.today' do
|
52
64
|
it 'returns current mars date' do
|
53
|
-
::Date.
|
65
|
+
::Date.stub(:today).and_return(@earth_date)
|
54
66
|
DarianCalendar::Date.today.should == DarianCalendar::Date.from_earth(@earth_date)
|
55
67
|
end
|
56
68
|
end
|
@@ -61,15 +73,63 @@ describe DarianCalendar::Date do
|
|
61
73
|
end
|
62
74
|
end
|
63
75
|
|
76
|
+
describe '.by_digits' do
|
77
|
+
context 'no digits are given' do
|
78
|
+
it 'should raise an argument error' do
|
79
|
+
expect{DarianCalendar::Date.by_digits}.to raise_error(ArgumentError, 'Invalid year')
|
80
|
+
end
|
81
|
+
end
|
82
|
+
context 'invalid month is given' do
|
83
|
+
it 'should raise an argument error' do
|
84
|
+
expect{DarianCalendar::Date.by_digits(214, -5)}.to raise_error(ArgumentError, 'Invalid month')
|
85
|
+
end
|
86
|
+
end
|
87
|
+
context 'invalid sol is given' do
|
88
|
+
it 'should raise an argument error' do
|
89
|
+
expect{DarianCalendar::Date.by_digits(214, 14, 35)}.to raise_error(ArgumentError, 'Invalid sol')
|
90
|
+
end
|
91
|
+
end
|
92
|
+
context 'invalid sol for a month is given' do
|
93
|
+
it 'should raise an argument error' do
|
94
|
+
expect{DarianCalendar::Date.by_digits(214, 24, 28)}.to raise_error(ArgumentError, 'Invalid sol for this month')
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
context 'only year is given' do
|
99
|
+
it 'returns the first of the month 1 of the given year' do
|
100
|
+
date = DarianCalendar::Date.by_digits(214)
|
101
|
+
date.year.should == 214
|
102
|
+
date.month.should == 1
|
103
|
+
date.sol.should == 1
|
104
|
+
end
|
105
|
+
end
|
106
|
+
context 'only year and month are given' do
|
107
|
+
it 'returns the first of the given month and year' do
|
108
|
+
date = DarianCalendar::Date.by_digits(214, 14)
|
109
|
+
date.year.should == 214
|
110
|
+
date.month.should == 14
|
111
|
+
date.sol.should == 1
|
112
|
+
end
|
113
|
+
end
|
114
|
+
context 'all digits are given' do
|
115
|
+
it 'returns the date for the given digits' do
|
116
|
+
date = DarianCalendar::Date.by_digits(214, 14, 26)
|
117
|
+
date.year.should == 214
|
118
|
+
date.month.should == 14
|
119
|
+
date.sol.should == 26
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
64
124
|
end
|
65
125
|
|
66
126
|
describe 'instance methods' do
|
67
127
|
|
68
128
|
describe '#<=>' do
|
69
129
|
it 'compares mars date objects' do
|
70
|
-
same_date = DarianCalendar::Date.
|
71
|
-
past_date = DarianCalendar::Date.
|
72
|
-
future_date = DarianCalendar::Date.
|
130
|
+
same_date = DarianCalendar::Date.by_digits(214, 14, 26)
|
131
|
+
past_date = DarianCalendar::Date.by_digits(214, 14, 25)
|
132
|
+
future_date = DarianCalendar::Date.by_digits(214, 14, 27)
|
73
133
|
|
74
134
|
@mars_date.should == same_date
|
75
135
|
@mars_date.should > past_date
|
@@ -82,7 +142,7 @@ describe DarianCalendar::Date do
|
|
82
142
|
|
83
143
|
describe '#sols_in_year' do
|
84
144
|
it 'returns the number of sols in a martian year' do
|
85
|
-
leap_mars_date = DarianCalendar::Date.
|
145
|
+
leap_mars_date = DarianCalendar::Date.by_digits(215)
|
86
146
|
leap_mars_date.sols_in_year.should == 669
|
87
147
|
@mars_date.sols_in_year.should == 668
|
88
148
|
end
|
@@ -90,7 +150,7 @@ describe DarianCalendar::Date do
|
|
90
150
|
|
91
151
|
describe '#leap?' do
|
92
152
|
it 'returns if year is a leap year' do
|
93
|
-
leap_mars_date = DarianCalendar::Date.
|
153
|
+
leap_mars_date = DarianCalendar::Date.by_digits(215)
|
94
154
|
leap_mars_date.leap?.should == true
|
95
155
|
@mars_date.leap?.should == false
|
96
156
|
end
|
@@ -156,6 +216,12 @@ describe DarianCalendar::Date do
|
|
156
216
|
mars_date.week_sol_name.should == '5'
|
157
217
|
end
|
158
218
|
end
|
219
|
+
context 'calendar type is ""' do
|
220
|
+
it 'returns ""' do
|
221
|
+
mars_date = DarianCalendar::Date.from_earth(@earth_date, :nothing)
|
222
|
+
mars_date.week_sol_name.should == ''
|
223
|
+
end
|
224
|
+
end
|
159
225
|
end
|
160
226
|
|
161
227
|
describe '#month_name' do
|
@@ -194,6 +260,12 @@ describe DarianCalendar::Date do
|
|
194
260
|
mars_date.month_name.should == '14'
|
195
261
|
end
|
196
262
|
end
|
263
|
+
context 'calendar type is anything else' do
|
264
|
+
it 'returns ""' do
|
265
|
+
mars_date = DarianCalendar::Date.from_earth(@earth_date, :nothing)
|
266
|
+
mars_date.month_name.should == ''
|
267
|
+
end
|
268
|
+
end
|
197
269
|
end
|
198
270
|
|
199
271
|
end
|
data/spec/spec_helper.rb
CHANGED
data/spec/time_spec.rb
CHANGED
@@ -19,10 +19,7 @@ describe DarianCalendar::Time do
|
|
19
19
|
@mars_time.week_day.should == @mars_time.week_sol
|
20
20
|
end
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
describe 'initialize method' do
|
25
|
-
it 'converts earth time to mars time' do
|
22
|
+
it 'verifies all attributes' do
|
26
23
|
@mars_time.year.should == 214
|
27
24
|
@mars_time.month.should == 14
|
28
25
|
@mars_time.sol.should == 26
|
@@ -37,6 +34,7 @@ describe DarianCalendar::Time do
|
|
37
34
|
@mars_time.sol_of_year.should == 387
|
38
35
|
@mars_time.week_sol.should == 5
|
39
36
|
end
|
37
|
+
|
40
38
|
end
|
41
39
|
|
42
40
|
describe 'class methods' do
|
@@ -55,8 +53,8 @@ describe DarianCalendar::Time do
|
|
55
53
|
|
56
54
|
describe '.today' do
|
57
55
|
it 'returns current mars date' do
|
58
|
-
::Date.
|
59
|
-
DarianCalendar::Time.today.should == DarianCalendar::Date.
|
56
|
+
::Date.stub(:today).and_return(@earth_date)
|
57
|
+
DarianCalendar::Time.today.should == DarianCalendar::Date.by_digits(214, 14, 26)
|
60
58
|
end
|
61
59
|
end
|
62
60
|
|
@@ -73,6 +71,114 @@ describe DarianCalendar::Time do
|
|
73
71
|
end
|
74
72
|
end
|
75
73
|
|
74
|
+
describe '.by_digits' do
|
75
|
+
context 'no digits are given' do
|
76
|
+
it 'should raise an argument error' do
|
77
|
+
expect{DarianCalendar::Time.by_digits}.to raise_error(ArgumentError, 'Invalid year')
|
78
|
+
end
|
79
|
+
end
|
80
|
+
context 'invalid month is given' do
|
81
|
+
it 'should raise an argument error' do
|
82
|
+
expect{DarianCalendar::Time.by_digits(214, -5)}.to raise_error(ArgumentError, 'Invalid month')
|
83
|
+
end
|
84
|
+
end
|
85
|
+
context 'invalid sol is given' do
|
86
|
+
it 'should raise an argument error' do
|
87
|
+
expect{DarianCalendar::Time.by_digits(214, 14, 35)}.to raise_error(ArgumentError, 'Invalid sol')
|
88
|
+
end
|
89
|
+
end
|
90
|
+
context 'invalid sol for a month is given' do
|
91
|
+
it 'should raise an argument error' do
|
92
|
+
expect{DarianCalendar::Time.by_digits(214, 24, 28)}.to raise_error(ArgumentError, 'Invalid sol for this month')
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
context 'invalid hour is given' do
|
97
|
+
it 'should raise an argument error' do
|
98
|
+
expect{DarianCalendar::Time.by_digits(214, 24, 28, 32)}.to raise_error(ArgumentError, 'Invalid hour')
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
context 'invalid minute is given' do
|
103
|
+
it 'should raise an argument error' do
|
104
|
+
expect{DarianCalendar::Time.by_digits(214, 24, 28, 20, 72)}.to raise_error(ArgumentError, 'Invalid minute')
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
context 'invalid second is given' do
|
109
|
+
it 'should raise an argument error' do
|
110
|
+
expect{DarianCalendar::Time.by_digits(214, 24, 28, 20, 10, -18)}.to raise_error(ArgumentError, 'Invalid second')
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
context 'only year is given' do
|
115
|
+
it 'returns the first of the month 1 of the given year and 00:00:00' do
|
116
|
+
date = DarianCalendar::Time.by_digits(214)
|
117
|
+
date.year.should == 214
|
118
|
+
date.month.should == 1
|
119
|
+
date.sol.should == 1
|
120
|
+
date.hour.should == 0
|
121
|
+
date.min.should == 0
|
122
|
+
date.sec.should == 0
|
123
|
+
end
|
124
|
+
end
|
125
|
+
context 'only year and month are given' do
|
126
|
+
it 'returns the first of the given month and year and 00:00:00' do
|
127
|
+
date = DarianCalendar::Time.by_digits(214, 14)
|
128
|
+
date.year.should == 214
|
129
|
+
date.month.should == 14
|
130
|
+
date.sol.should == 1
|
131
|
+
date.hour.should == 0
|
132
|
+
date.min.should == 0
|
133
|
+
date.sec.should == 0
|
134
|
+
end
|
135
|
+
end
|
136
|
+
context 'all date but no time digits are given' do
|
137
|
+
it 'returns the date for the given digits and 00:00:00' do
|
138
|
+
date = DarianCalendar::Time.by_digits(214, 14, 26)
|
139
|
+
date.year.should == 214
|
140
|
+
date.month.should == 14
|
141
|
+
date.sol.should == 26
|
142
|
+
date.hour.should == 0
|
143
|
+
date.min.should == 0
|
144
|
+
date.sec.should == 0
|
145
|
+
end
|
146
|
+
end
|
147
|
+
context 'all date digits and hour are given' do
|
148
|
+
it 'returns the date for the given digits and 20:00:00' do
|
149
|
+
date = DarianCalendar::Time.by_digits(214, 14, 26, 20)
|
150
|
+
date.year.should == 214
|
151
|
+
date.month.should == 14
|
152
|
+
date.sol.should == 26
|
153
|
+
date.hour.should == 20
|
154
|
+
date.min.should == 0
|
155
|
+
date.sec.should == 0
|
156
|
+
end
|
157
|
+
end
|
158
|
+
context 'all date digits, hour and minute are given' do
|
159
|
+
it 'returns the date for the given digits and 20:10:00' do
|
160
|
+
date = DarianCalendar::Time.by_digits(214, 14, 26, 20, 10)
|
161
|
+
date.year.should == 214
|
162
|
+
date.month.should == 14
|
163
|
+
date.sol.should == 26
|
164
|
+
date.hour.should == 20
|
165
|
+
date.min.should == 10
|
166
|
+
date.sec.should == 0
|
167
|
+
end
|
168
|
+
end
|
169
|
+
context 'all digits are given' do
|
170
|
+
it 'returns the date for the given digits and 20:10:02' do
|
171
|
+
date = DarianCalendar::Time.by_digits(214, 14, 26, 20, 10, 2)
|
172
|
+
date.year.should == 214
|
173
|
+
date.month.should == 14
|
174
|
+
date.sol.should == 26
|
175
|
+
date.hour.should == 20
|
176
|
+
date.min.should == 10
|
177
|
+
date.sec.should == 2
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
76
182
|
end
|
77
183
|
|
78
184
|
describe 'instance methods' do
|
@@ -174,6 +280,12 @@ describe DarianCalendar::Time do
|
|
174
280
|
mars_time.week_sol_name.should == '5'
|
175
281
|
end
|
176
282
|
end
|
283
|
+
context 'calendar type is anything else' do
|
284
|
+
it 'returns ""' do
|
285
|
+
mars_time = DarianCalendar::Time.from_earth(@earth_time, :nothing)
|
286
|
+
mars_time.week_sol_name.should == ''
|
287
|
+
end
|
288
|
+
end
|
177
289
|
end
|
178
290
|
|
179
291
|
describe '#month_name' do
|
@@ -212,6 +324,12 @@ describe DarianCalendar::Time do
|
|
212
324
|
mars_time.month_name.should == '14'
|
213
325
|
end
|
214
326
|
end
|
327
|
+
context 'calendar type is anything else' do
|
328
|
+
it 'returns ""' do
|
329
|
+
mars_time = DarianCalendar::Time.from_earth(@earth_time, :nothing)
|
330
|
+
mars_time.month_name.should == ''
|
331
|
+
end
|
332
|
+
end
|
215
333
|
end
|
216
334
|
|
217
335
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: darian_calendar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christian Worreschk
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-02-
|
11
|
+
date: 2014-02-24 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: This Ruby library converts earth time to mars time and back again. You
|
14
14
|
can choose between 5 variants of the Darian calendar system; Martiana, Defrost,
|
@@ -25,6 +25,7 @@ files:
|
|
25
25
|
- .gitignore
|
26
26
|
- .rspec
|
27
27
|
- .travis.yml
|
28
|
+
- .yardopts
|
28
29
|
- CHANGELOG.md
|
29
30
|
- Gemfile
|
30
31
|
- LICENSE.md
|
@@ -44,7 +45,11 @@ licenses:
|
|
44
45
|
- EUPL-1.1
|
45
46
|
metadata: {}
|
46
47
|
post_install_message:
|
47
|
-
rdoc_options:
|
48
|
+
rdoc_options:
|
49
|
+
- --line-numbers
|
50
|
+
- --inline-source
|
51
|
+
- --title
|
52
|
+
- Darian Calendar
|
48
53
|
require_paths:
|
49
54
|
- lib
|
50
55
|
required_ruby_version: !ruby/object:Gem::Requirement
|