VanaTime 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/History.txt +5 -0
- data/Manifest.txt +11 -0
- data/README.txt +3 -0
- data/Rakefile +21 -0
- data/lib/vana_time.rb +124 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +9 -0
- data/spec/vana_time_spec.rb +86 -0
- data/tasks/rspec.rake +21 -0
- metadata +67 -0
data/History.txt
ADDED
data/Manifest.txt
ADDED
data/README.txt
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- ruby -*-
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'hoe'
|
5
|
+
require './lib/vana_time.rb'
|
6
|
+
|
7
|
+
Hoe.new('VanaTime', VanaTime::VERSION) do |p|
|
8
|
+
p.rubyforge_name = 'vanatime'
|
9
|
+
p.author = 'Travis Tilley'
|
10
|
+
p.email = 'ttilley@gmail.com'
|
11
|
+
p.summary = 'Vanadiel time object'
|
12
|
+
# p.description = p.paragraphs_of('README.txt', 2..5).join("\n\n")
|
13
|
+
p.description = "A library for converting realtime to vanadiel time"
|
14
|
+
# p.url = p.paragraphs_of('README.txt', 0).first.split(/\n/)[1..-1]
|
15
|
+
p.url = "http://vanatime.rubyforge.org"
|
16
|
+
p.changes = p.paragraphs_of('History.txt', 0..1).join("\n\n")
|
17
|
+
end
|
18
|
+
|
19
|
+
Dir['tasks/**/*.rake'].each { |rake| load rake }
|
20
|
+
|
21
|
+
# vim: syntax=Ruby
|
data/lib/vana_time.rb
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+
class VanaTime
|
2
|
+
VERSION = '1.0.0'
|
3
|
+
|
4
|
+
SECONDS_REAL_DAY = (24 * 60 * 60)
|
5
|
+
BASIS_DATE = Time.utc(2002,6,23,15,0,0,0)
|
6
|
+
|
7
|
+
def initialize(time = Time.now)
|
8
|
+
self.earth_time = time
|
9
|
+
end
|
10
|
+
|
11
|
+
def earth_time=(time)
|
12
|
+
raise "Input was not a Time object" if ! time.is_a?(Time)
|
13
|
+
|
14
|
+
@earth_time = time
|
15
|
+
@vana_time = ((898 * 360 + 30) * SECONDS_REAL_DAY) +
|
16
|
+
(@earth_time.to_i - BASIS_DATE.to_i) * 25
|
17
|
+
|
18
|
+
@vDate = @vDay = @vHour = @vMin = @vMon = @vMoon = @vSec = @vYear = nil
|
19
|
+
end
|
20
|
+
|
21
|
+
attr_reader :earth_time
|
22
|
+
|
23
|
+
def self.vana_to_earth(vana_time)
|
24
|
+
((vana_time - ((898 * 360 + 30) * SECONDS_REAL_DAY)) / 25) + BASIS_DATE.to_i
|
25
|
+
end
|
26
|
+
|
27
|
+
def vana_time=(vana_time)
|
28
|
+
@vana_time = vana_time
|
29
|
+
@earth_time = Time.at(self.class.vana_to_earth(vana_time))
|
30
|
+
|
31
|
+
@vDate = @vDay = @vHour = @vMin = @vMon = @vMoon = @vSec = @vYear = nil
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.at(vana_time)
|
35
|
+
self.new(Time.at(self.vana_to_earth(vana_time)))
|
36
|
+
end
|
37
|
+
|
38
|
+
def to_i
|
39
|
+
@vana_time
|
40
|
+
end
|
41
|
+
|
42
|
+
def year
|
43
|
+
@vYear ||= (@vana_time / (360 * SECONDS_REAL_DAY))
|
44
|
+
end
|
45
|
+
|
46
|
+
def month
|
47
|
+
@vMon ||= ((@vana_time % (360 * SECONDS_REAL_DAY)) /
|
48
|
+
(30 * SECONDS_REAL_DAY)) + 1
|
49
|
+
end
|
50
|
+
|
51
|
+
def date
|
52
|
+
@vDate ||= ((@vana_time % (30 * SECONDS_REAL_DAY)) /
|
53
|
+
(SECONDS_REAL_DAY)) + 1
|
54
|
+
end
|
55
|
+
|
56
|
+
def hour
|
57
|
+
@vHour ||= ((@vana_time % (SECONDS_REAL_DAY)) / (60 * 60))
|
58
|
+
end
|
59
|
+
|
60
|
+
def minute
|
61
|
+
@vMin ||= ((@vana_time % (60 * 60)) / (60))
|
62
|
+
end
|
63
|
+
|
64
|
+
def second
|
65
|
+
@vSec ||= (@vana_time % 60)
|
66
|
+
end
|
67
|
+
|
68
|
+
class VanaDay
|
69
|
+
VANA_DAYS = ["Firesday", "Earthsday", "Watersday", "Windsday", "Iceday",
|
70
|
+
"Lightningday", "Lightsday", "Darksday"]
|
71
|
+
def initialize(vana_time)
|
72
|
+
@vanaDay = ((vana_time % (8 * SECONDS_REAL_DAY)) / (SECONDS_REAL_DAY))
|
73
|
+
end
|
74
|
+
def to_i
|
75
|
+
@vanaDay
|
76
|
+
end
|
77
|
+
def to_s
|
78
|
+
VANA_DAYS[@vanaDay]
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def day
|
83
|
+
@vDay ||= VanaDay.new(@vana_time)
|
84
|
+
end
|
85
|
+
|
86
|
+
class VanaMoon
|
87
|
+
SECONDS_GAME_DAY = (24 * 60 * 60 / 25)
|
88
|
+
MOON_DATE = Time.utc(2004,1,25,2,31,12,0)
|
89
|
+
def initialize(time)
|
90
|
+
moon_days = ((time.to_i - MOON_DATE.to_i) / SECONDS_GAME_DAY).floor % 84
|
91
|
+
moon_days += 84 if moon_days < 0
|
92
|
+
@moonPercent = - ((42 - moon_days).to_f / 42 * 100).round
|
93
|
+
end
|
94
|
+
def to_i
|
95
|
+
@moonPercent
|
96
|
+
end
|
97
|
+
def to_s
|
98
|
+
if (@moonPercent == -100)
|
99
|
+
"100% Full Moon"
|
100
|
+
elsif (@moonPercent == 0)
|
101
|
+
"0% New Moon"
|
102
|
+
elsif (@moonPercent < 0)
|
103
|
+
"#{-@moonPercent}% Waning"
|
104
|
+
elsif (@moonPercent > 0)
|
105
|
+
"#{@moonPercent}% Waxing"
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def moon_phase
|
111
|
+
@vMoon ||= VanaMoon.new(@earth_time)
|
112
|
+
end
|
113
|
+
|
114
|
+
def self.now
|
115
|
+
self.new
|
116
|
+
end
|
117
|
+
|
118
|
+
def to_s
|
119
|
+
"Vanadiel Time: #{day} #{year}-#{month}-#{date}" +
|
120
|
+
" #{hour}:#{minute}:#{second}" + "\n" + "Moon Phase: #{moon_phase}" +
|
121
|
+
"\n" + "Earth Time: #{earth_time.httpdate}"
|
122
|
+
end
|
123
|
+
|
124
|
+
end
|
data/spec/spec.opts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--colour
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
2
|
+
|
3
|
+
describe VanaTime do
|
4
|
+
before(:all) do
|
5
|
+
# this specific date translates to: seconds since vana epoch date ->
|
6
|
+
# 32009656750, vana year -> 1029, vana month -> 2, vana date -> 13, vana day
|
7
|
+
# of the week -> 2 (base 0) or Watersday, vana minute -> 19, vana hour -> 3,
|
8
|
+
# vana second -> 10, vana moon phase -> 62% waxing
|
9
|
+
@time = Time.utc(2007,8,23,12,15,10,10)
|
10
|
+
@vanatime = VanaTime.new(@time)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should raise an error when given invalid input" do
|
14
|
+
lambda {VanaTime.new("COWS")}.should raise_error
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should provide an accessor for the earth time used to create the object" do
|
18
|
+
@vanatime.earth_time.should == @time
|
19
|
+
@vanatime.earth_time.class.should == Time
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should use the current time if not initialized with a specific time" do
|
23
|
+
def Time.now
|
24
|
+
Time.utc(2007,8,23,12,15,10,10)
|
25
|
+
end
|
26
|
+
vanatime = VanaTime.new
|
27
|
+
vanatime.earth_time.should == Time.utc(2007,8,23,12,15,10,10)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "to_i should return the vana time used in all other calculations as an int" do
|
31
|
+
@vanatime.to_i.is_a?(Integer).should == true
|
32
|
+
@vanatime.to_i.should == 32009656750
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should provide accessor for vana year" do
|
36
|
+
@vanatime.year.to_i.should == 1029
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should provide accessor for vana month" do
|
40
|
+
@vanatime.month.to_i.should == 2
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should provide accessor for vana date" do
|
44
|
+
@vanatime.date.to_i.should == 13
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should provide accessor for vana hour" do
|
48
|
+
@vanatime.hour.to_i.should == 3
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should provide accessor for vana minute" do
|
52
|
+
@vanatime.minute.to_i.should == 19
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should provide accessor for vana second" do
|
56
|
+
@vanatime.second.to_i.should == 10
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should provide accessor for day of week" do
|
60
|
+
@vanatime.day.to_s.should == "Watersday"
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should provide accessor for moon percent/phase" do
|
64
|
+
@vanatime.moon_phase.to_s.should == "62% Waxing"
|
65
|
+
@vanatime.moon_phase.to_i.should == 62
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should allow reinitializing with a new earth time" do
|
69
|
+
vt = VanaTime.new(Time.utc(2007,8,23,12,15,10,10))
|
70
|
+
vtsec = vt.to_i
|
71
|
+
vanatwo = vt.earth_time=(Time.new)
|
72
|
+
vtwosec = vanatwo.to_i
|
73
|
+
vtsec.should_not == vtwosec
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should allow reinitializing with a new vana time" do
|
77
|
+
reinit = VanaTime.new
|
78
|
+
reinit.vana_time = (@vanatime.to_i)
|
79
|
+
reinit.earth_time.to_i.should_not == @vanatime.to_i
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should have a constructor using vana time" do
|
83
|
+
vt = VanaTime.at(@vanatime.to_i)
|
84
|
+
vt.earth_time.to_i.should == @vanatime.earth_time.to_i
|
85
|
+
end
|
86
|
+
end
|
data/tasks/rspec.rake
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
begin
|
2
|
+
require 'spec'
|
3
|
+
rescue LoadError
|
4
|
+
require 'rubygems'
|
5
|
+
require 'spec'
|
6
|
+
end
|
7
|
+
begin
|
8
|
+
require 'spec/rake/spectask'
|
9
|
+
rescue LoadError
|
10
|
+
puts <<-EOS
|
11
|
+
To use rspec for testing you must install rspec gem:
|
12
|
+
gem install rspec
|
13
|
+
EOS
|
14
|
+
exit(0)
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "Run the specs under spec/models"
|
18
|
+
Spec::Rake::SpecTask.new do |t|
|
19
|
+
t.spec_opts = ['--options', "spec/spec.opts"]
|
20
|
+
t.spec_files = FileList['spec/*_spec.rb']
|
21
|
+
end
|
metadata
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.9.4
|
3
|
+
specification_version: 1
|
4
|
+
name: VanaTime
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 1.0.0
|
7
|
+
date: 2007-08-22 00:00:00 -04:00
|
8
|
+
summary: Vanadiel time object
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email: ttilley@gmail.com
|
12
|
+
homepage: http://vanatime.rubyforge.org
|
13
|
+
rubyforge_project: vanatime
|
14
|
+
description: A library for converting realtime to vanadiel time
|
15
|
+
autorequire:
|
16
|
+
default_executable:
|
17
|
+
bindir: bin
|
18
|
+
has_rdoc: true
|
19
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.0
|
24
|
+
version:
|
25
|
+
platform: ruby
|
26
|
+
signing_key:
|
27
|
+
cert_chain:
|
28
|
+
post_install_message:
|
29
|
+
authors:
|
30
|
+
- Travis Tilley
|
31
|
+
files:
|
32
|
+
- History.txt
|
33
|
+
- Manifest.txt
|
34
|
+
- README.txt
|
35
|
+
- Rakefile
|
36
|
+
- lib/vana_time.rb
|
37
|
+
- spec
|
38
|
+
- spec/spec.opts
|
39
|
+
- spec/spec_helper.rb
|
40
|
+
- spec/vana_time_spec.rb
|
41
|
+
- tasks
|
42
|
+
- tasks/rspec.rake
|
43
|
+
test_files: []
|
44
|
+
|
45
|
+
rdoc_options:
|
46
|
+
- --main
|
47
|
+
- README.txt
|
48
|
+
extra_rdoc_files:
|
49
|
+
- History.txt
|
50
|
+
- Manifest.txt
|
51
|
+
- README.txt
|
52
|
+
executables: []
|
53
|
+
|
54
|
+
extensions: []
|
55
|
+
|
56
|
+
requirements: []
|
57
|
+
|
58
|
+
dependencies:
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: hoe
|
61
|
+
version_requirement:
|
62
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: 1.3.0
|
67
|
+
version:
|