RubySunrise 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -13,18 +13,14 @@ class SolarEventCalculator
13
13
  @longitude = longitude
14
14
  end
15
15
 
16
- def compute_longitude_hour
16
+ def compute_lnghour
17
17
  lngHour = @longitude / BigDecimal.new("15")
18
18
  lngHour.round(4)
19
19
  end
20
20
 
21
- def compute_rise_longitude_hour
22
- longHour = @date.yday + ((BigDecimal.new("6") - compute_longitude_hour) / BigDecimal.new("24"))
23
- longHour.round(4)
24
- end
25
-
26
- def compute_set_longitude_hour
27
- longHour = @date.yday + ((BigDecimal.new("18") - compute_longitude_hour) / BigDecimal.new("24"))
21
+ def compute_longitude_hour(isSunrise)
22
+ minuend = (isSunrise) ? BigDecimal.new("6") : BigDecimal.new("18")
23
+ longHour = @date.yday + ((minuend - compute_lnghour) / BigDecimal.new("24"))
28
24
  longHour.round(4)
29
25
  end
30
26
 
@@ -85,17 +81,12 @@ class SolarEventCalculator
85
81
  cosLocalHour.round(4)
86
82
  end
87
83
 
88
- def compute_sunrise_local_hour_angle(cosSunLocalHour)
84
+ def compute_local_hour_angle(cosSunLocalHour, isSunrise)
89
85
  acosH = BigDecimal.new(Math.acos(cosSunLocalHour).to_s)
90
- localHourAngle = BigDecimal.new("360") - rads_as_degrees(acosH)
91
- localHourAngle = localHourAngle / BigDecimal.new("15")
92
- localHourAngle.round(4)
93
- end
86
+ acosHDegrees = rads_as_degrees(acosH)
94
87
 
95
- def compute_sunset_local_hour_angle(cosSunLocalHour)
96
- acosH = BigDecimal.new(Math.acos(cosSunLocalHour).to_s)
97
- acosH = rads_as_degrees(acosH)
98
- localHourAngle = acosH / BigDecimal.new("15")
88
+ localHourAngle = (isSunrise) ? BigDecimal.new("360") - acosHDegrees : acosHDegrees
89
+ localHourAngle = localHourAngle / BigDecimal.new("15")
99
90
  localHourAngle.round(4)
100
91
  end
101
92
 
@@ -111,11 +102,11 @@ class SolarEventCalculator
111
102
  utcTime.round(4)
112
103
  end
113
104
 
114
- def compute_utc_sunrise(zenith)
115
- longHour = compute_longitude_hour
116
- riseLongHour = compute_rise_longitude_hour
105
+ def compute_utc_solar_event(zenith, isSunrise)
106
+ longHour = compute_lnghour
107
+ eventLongHour = compute_longitude_hour(isSunrise)
117
108
 
118
- meanAnomaly = compute_sun_mean_anomaly(riseLongHour)
109
+ meanAnomaly = compute_sun_mean_anomaly(eventLongHour)
119
110
  sunTrueLong = compute_sun_true_longitude(meanAnomaly)
120
111
  cosineSunLocalHour = compute_cosine_sun_local_hour(sunTrueLong, zenith)
121
112
 
@@ -123,8 +114,8 @@ class SolarEventCalculator
123
114
  return nil
124
115
  end
125
116
 
126
- sunLocalHour = compute_sunrise_local_hour_angle(cosineSunLocalHour)
127
- localMeanTime = compute_local_mean_time(sunTrueLong, longHour, riseLongHour, sunLocalHour)
117
+ sunLocalHour = compute_local_hour_angle(cosineSunLocalHour, isSunrise)
118
+ localMeanTime = compute_local_mean_time(sunTrueLong, longHour, eventLongHour, sunLocalHour)
128
119
 
129
120
  timeParts = localMeanTime.to_s('F').split('.')
130
121
  mins = BigDecimal.new("." + timeParts[1]) * BigDecimal.new("60")
@@ -135,27 +126,36 @@ class SolarEventCalculator
135
126
  Time.gm(@date.year, @date.mon, @date.mday, hours, pad_minutes(mins.to_i))
136
127
  end
137
128
 
138
- def compute_utc_sunset(zenith)
139
- longHour = compute_longitude_hour
140
- setLongHour = compute_set_longitude_hour
129
+ def compute_utc_civil_sunrise
130
+ compute_utc_solar_event(96, true)
131
+ end
141
132
 
142
- meanAnomaly = compute_sun_mean_anomaly(setLongHour)
143
- sunTrueLong = compute_sun_true_longitude(meanAnomaly)
144
- cosineSunLocalHour = compute_cosine_sun_local_hour(sunTrueLong, zenith)
133
+ def compute_utc_civil_sunset
134
+ compute_utc_solar_event(96, false)
135
+ end
145
136
 
146
- if(cosineSunLocalHour > BigDecimal.new("1") || cosineSunLocalHour < BigDecimal.new("-1"))
147
- return nil
148
- end
137
+ def compute_utc_official_sunrise
138
+ compute_utc_solar_event(90.8333, true)
139
+ end
149
140
 
150
- sunLocalHour = compute_sunset_local_hour_angle(cosineSunLocalHour)
151
- localMeanTime = compute_local_mean_time(sunTrueLong, longHour, setLongHour, sunLocalHour)
141
+ def compute_utc_official_sunset
142
+ compute_utc_solar_event(90.8333, false)
143
+ end
152
144
 
153
- timeParts = localMeanTime.to_s('F').split('.')
154
- mins = BigDecimal.new("." + timeParts[1]) * BigDecimal.new("60")
155
- mins = mins.truncate()
156
- hours = timeParts[0]
145
+ def compute_utc_nautical_sunrise
146
+ compute_utc_solar_event(102, true)
147
+ end
157
148
 
158
- Time.gm(@date.year, @date.mon, @date.mday, hours, pad_minutes(mins.to_i))
149
+ def compute_utc_nautical_sunset
150
+ compute_utc_solar_event(102, false)
151
+ end
152
+
153
+ def compute_utc_astronomical_sunrise
154
+ compute_utc_solar_event(108, true)
155
+ end
156
+
157
+ def compute_utc_astronomical_sunset
158
+ compute_utc_solar_event(108, false)
159
159
  end
160
160
 
161
161
  def pad_minutes(minutes)
@@ -1,6 +1,6 @@
1
1
  spec = Gem::Specification.new do | s |
2
2
  s.name = "RubySunrise"
3
- s.version = "0.1.0"
3
+ s.version = "0.1.1"
4
4
  s.author = "Mike Reedell / LuckyCatLabs"
5
5
  s.email = "mike@luckycatlabs.com"
6
6
  s.homepage = "http://www.luckycatlabs.com"
@@ -1,4 +1,4 @@
1
- require 'sunrise'
1
+ require '../lib/solareventcalculator'
2
2
 
3
3
  describe SolarEventCalculator, "test the math for home" do
4
4
 
@@ -8,11 +8,11 @@ describe SolarEventCalculator, "test the math for home" do
8
8
  end
9
9
 
10
10
  it "returns correct longitude hour" do
11
- @calc.compute_longitude_hour.should eql(BigDecimal.new("-5.0523"))
11
+ @calc.compute_lnghour.should eql(BigDecimal.new("-5.0523"))
12
12
  end
13
13
 
14
14
  it "returns correct longitude hour" do
15
- @calc.compute_rise_longitude_hour.should eql(BigDecimal.new("306.4605"))
15
+ @calc.compute_longitude_hour(true).should eql(BigDecimal.new("306.4605"))
16
16
  end
17
17
 
18
18
  it "returns correct sunrise mean anomaly" do
@@ -44,7 +44,7 @@ describe SolarEventCalculator, "test the math for home" do
44
44
  end
45
45
 
46
46
  it "returns correct sunrise local hour angle" do
47
- @calc.compute_sunrise_local_hour_angle(BigDecimal.new("0.0791")).should eql(BigDecimal.new("18.3025"))
47
+ @calc.compute_local_hour_angle(BigDecimal.new("0.0791"), true).should eql(BigDecimal.new("18.3025"))
48
48
  end
49
49
 
50
50
  it "returns correct sunrise local mean time" do
@@ -56,19 +56,19 @@ describe SolarEventCalculator, "test the math for home" do
56
56
  end
57
57
 
58
58
  it "returns correct civil sunrise time" do
59
- @calc.compute_utc_sunrise(96).should eql(Time.gm(@date.year, @date.mon, @date.mday, 11, 4))
59
+ @calc.compute_utc_civil_sunrise.should eql(Time.gm(@date.year, @date.mon, @date.mday, 11, 4))
60
60
  end
61
61
 
62
62
  it "returns correct official sunrise time" do
63
- @calc.compute_utc_sunrise(90.8333).should eql(Time.gm(@date.year, @date.mon, @date.mday, 11, 33))
63
+ @calc.compute_utc_official_sunrise.should eql(Time.gm(@date.year, @date.mon, @date.mday, 11, 33))
64
64
  end
65
65
 
66
66
  it "returns correct nautical sunrise time" do
67
- @calc.compute_utc_sunrise(102).should eql(Time.gm(@date.year, @date.mon, @date.mday, 10, 32))
67
+ @calc.compute_utc_nautical_sunrise.should eql(Time.gm(@date.year, @date.mon, @date.mday, 10, 32))
68
68
  end
69
69
 
70
70
  it "returns correct astronomical sunrise time" do
71
- @calc.compute_utc_sunrise(108).should eql(Time.gm(@date.year, @date.mon, @date.mday, 10, 1))
71
+ @calc.compute_utc_astronomical_sunrise.should eql(Time.gm(@date.year, @date.mon, @date.mday, 10, 1))
72
72
  end
73
73
  end
74
74
 
@@ -77,13 +77,12 @@ describe SolarEventCalculator, "test the math for areas where there could be no
77
77
  it "returns correct time" do
78
78
  date = Date.parse('2008-04-25') #25 April 2008
79
79
  calc = SolarEventCalculator.new(date, BigDecimal.new("64.8378"), BigDecimal.new("-147.7164"))
80
- calc.compute_utc_sunrise(108).should eql(nil)
80
+ calc.compute_utc_nautical_sunrise.should eql(nil)
81
81
  end
82
82
 
83
83
  it "returns correct time" do
84
84
  date = Date.parse('2008-04-25') #25 April 2008
85
85
  calc = SolarEventCalculator.new(date, BigDecimal.new("64.8378"), BigDecimal.new("-147.7164"))
86
- calc.compute_utc_sunrise(102).should eql(nil)
86
+ calc.compute_utc_nautical_sunrise.should eql(nil)
87
87
  end
88
88
  end
89
-
@@ -1,4 +1,4 @@
1
- require 'sunrise'
1
+ require '../lib/solareventcalculator'
2
2
 
3
3
  describe SolarEventCalculator, "Test the sunset algorithm" do
4
4
 
@@ -8,11 +8,11 @@ describe SolarEventCalculator, "Test the sunset algorithm" do
8
8
  end
9
9
 
10
10
  it "returns correct longitude hour" do
11
- @calc.compute_longitude_hour.should eql(BigDecimal.new("-5.0523"))
11
+ @calc.compute_lnghour.should eql(BigDecimal.new("-5.0523"))
12
12
  end
13
13
 
14
14
  it "returns correct longitude hour" do
15
- @calc.compute_set_longitude_hour.should eql(BigDecimal.new("306.9605"))
15
+ @calc.compute_longitude_hour(false).should eql(BigDecimal.new("306.9605"))
16
16
  end
17
17
 
18
18
  it "returns correct sunset mean anomaly" do
@@ -44,7 +44,7 @@ describe SolarEventCalculator, "Test the sunset algorithm" do
44
44
  end
45
45
 
46
46
  it "returns correct sunset local hour angle" do
47
- @calc.compute_sunset_local_hour_angle(BigDecimal.new("0.0815")).should eql(BigDecimal.new("5.6883"))
47
+ @calc.compute_local_hour_angle(BigDecimal.new("0.0815"), false).should eql(BigDecimal.new("5.6883"))
48
48
  end
49
49
 
50
50
  it "returns correct sunset local mean time" do
@@ -56,19 +56,19 @@ describe SolarEventCalculator, "Test the sunset algorithm" do
56
56
  end
57
57
 
58
58
  it "returns correct civil sunset time" do
59
- @calc.compute_utc_sunset(96).should eql(Time.gm(@date.year, @date.mon, @date.mday, 22, 28))
59
+ @calc.compute_utc_civil_sunset.should eql(Time.gm(@date.year, @date.mon, @date.mday, 22, 28))
60
60
  end
61
61
 
62
62
  it "returns correct official sunset time" do
63
- @calc.compute_utc_sunset(90.8333).should eql(Time.gm(@date.year, @date.mon, @date.mday, 21, 59))
63
+ @calc.compute_utc_official_sunset.should eql(Time.gm(@date.year, @date.mon, @date.mday, 21, 59))
64
64
  end
65
65
 
66
66
  it "returns correct nautical sunset time" do
67
- @calc.compute_utc_sunset(102).should eql(Time.gm(@date.year, @date.mon, @date.mday, 23, 0))
67
+ @calc.compute_utc_nautical_sunset.should eql(Time.gm(@date.year, @date.mon, @date.mday, 23, 0))
68
68
  end
69
69
 
70
70
  it "returns correct astronomical sunset time" do
71
- @calc.compute_utc_sunset(108).should eql(Time.gm(@date.year, @date.mon, @date.mday, 23, 31))
71
+ @calc.compute_utc_astronomical_sunset.should eql(Time.gm(@date.year, @date.mon, @date.mday, 23, 31))
72
72
  end
73
73
  end
74
74
 
@@ -77,13 +77,12 @@ describe SolarEventCalculator, "test the math for areas where the sun doesn't se
77
77
  it "returns correct time" do
78
78
  date = Date.parse('2008-04-25') #25 April 2008
79
79
  calc = SolarEventCalculator.new(date, BigDecimal.new("64.8378"), BigDecimal.new("-147.7164"))
80
- calc.compute_utc_sunset(108).should eql(nil)
80
+ calc.compute_utc_nautical_sunset.should eql(nil)
81
81
  end
82
82
 
83
83
  it "returns correct time" do
84
84
  date = Date.parse('2008-04-25') #25 April 2008
85
85
  calc = SolarEventCalculator.new(date, BigDecimal.new("64.8378"), BigDecimal.new("-147.7164"))
86
- calc.compute_utc_sunset(102).should eql(nil)
86
+ calc.compute_utc_nautical_sunset.should eql(nil)
87
87
  end
88
88
  end
89
-
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 0
9
- version: 0.1.0
8
+ - 1
9
+ version: 0.1.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Mike Reedell / LuckyCatLabs
@@ -28,7 +28,7 @@ extra_rdoc_files: []
28
28
 
29
29
  files:
30
30
  - rubysunrise.gemspec
31
- - lib/sunrise.rb
31
+ - lib/solareventcalculator.rb
32
32
  has_rdoc: true
33
33
  homepage: http://www.luckycatlabs.com
34
34
  licenses: []