darian_calendar 1.0 → 1.1.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.
- 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
|
-
[](https://travis-ci.org/marsec/darian_calendar)
|
3
|
+
[](http://badge.fury.io/rb/darian_calendar) [](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
|