ruby-sun-times 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7ff22355b53b8e849bdb6620d1e51552a72840e0
4
- data.tar.gz: ce1cccf30fa5f6461918853588010f534a2f3ffc
3
+ metadata.gz: ecb13177df09644d48fc75563740cec84495ce00
4
+ data.tar.gz: c9002e7be0138db8ba4409844d97f7ecab102187
5
5
  SHA512:
6
- metadata.gz: 6c9c521a94cf297ab45fd32ba1f87dfe64b0beac36b1ad89c6d870e477fbb3c7a3d7248070b04d23f4abce20d188a6d61baa873d10dceb5d9c44b97fe2fe42b9
7
- data.tar.gz: 96b2cec093ae213b771179cdc9939b03d151a7c0d0e3b2093be39dbb90c4d58c3100b876014970acdd8b67be000de2d66fce9947986d21177da47ee0505d1cd0
6
+ metadata.gz: 7b0a05c96603d12fcc58821a79b39ccc74a7f0b7034540b32c5aafba39cd41035dc330bb10eadcceefd4a4a8f11be523c6678901b0d600ee964d2e47a1ff1dee
7
+ data.tar.gz: 35671f27cd9a50ca1e1db445021a870bf87abb13257c544acd169e1c2a09c15088b7b7a2a26672a6d83c0060d42867729654d9e80efcbf7f973c472b96434735
@@ -1,20 +1,47 @@
1
- == SunTimes
1
+ # SunTimes
2
2
 
3
3
  Calculates sunrise and sunset times.
4
4
 
5
5
  An implementation of the algorithm descibed at http://williams.best.vwh.net/sunrise_sunset_algorithm.htm
6
6
 
7
- == References
7
+ # Usage
8
+
9
+ ## Requiring
10
+
11
+ In a Gemfile/Gemspec:
12
+
13
+ ```
14
+ gem 'ruby-sun-times', require: 'sun_times'
15
+ ```
16
+
17
+ Directly:
18
+
19
+ ```ruby
20
+ require 'sun_times'
21
+ ```
22
+
23
+ ## Calls
24
+
25
+ There are two helper methods: 'rise' and 'set'.
26
+
27
+ ```
28
+ day = Date.new(2010, 3, 8)
29
+ latitude = 43.779
30
+ longitude = 11.432
31
+ puts SunTimes.set(day, latitude, longitude)
32
+ ```
33
+
34
+ # References
8
35
 
9
36
  * http://www.astro.uu.nl/~strous/AA/en/reken/zonpositie.html - Calculations
10
37
  * http://williams.best.vwh.net/sunrise_sunset_algorithm.htm - Algorithm
11
38
  * http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/264573 - Ken Bloom's implementation
12
39
 
13
- == Licence
40
+ # Licence
14
41
 
15
42
  This code is free to use under the terms of the MIT licence:
16
43
 
17
- Copyright (c) 2010 Joe Yates
44
+ Copyright (c) 2010 - 2013 Joe Yates
18
45
 
19
46
  Permission is hereby granted, free of charge, to any person obtaining a copy
20
47
  of this software and associated documentation files (the "Software"), to
data/lib/sun_times.rb CHANGED
@@ -47,15 +47,22 @@ module SunTimes
47
47
  # * +date+ - An object that responds to :to_datetime.
48
48
  # * +latitude+ - The latitude of the location in degrees.
49
49
  # * +longitude+ - The longitude of the location in degrees.
50
- # * +options+ - Additional option is <tt>:zenith</tt>.
50
+ # * +options+ -
51
+ # * <tt>:never_rises_result</tt> - the value to be returned if the sun never rises on the supplied date,
52
+ # * <tt>:never_sets_result</tt> - the value to be returned if the sun never sets on the supplied date,
53
+ # * <tt>:zenith</tt> - default 90.83333
51
54
  #
52
55
  # ==== Example
53
56
  # SunTimes.calculate(:rise, Date.new(2010, 3, 8), 43.779, 11.432)
54
57
  # > Mon Mar 08 05:39:53 UTC 2010
55
58
  def self.calculate(event, date, latitude, longitude, options = {})
59
+ options = {
60
+ :never_sets_result => nil,
61
+ :never_rises_result => nil,
62
+ :zenith => DEFAULT_ZENITH,
63
+ }.merge(options)
56
64
  datetime = date.to_datetime
57
65
  raise "Unknown event '#{ event }'" if KNOWN_EVENTS.find_index(event).nil?
58
- zenith = options.delete(:zenith) || DEFAULT_ZENITH
59
66
 
60
67
  # lngHour
61
68
  longitude_hour = longitude / DEGREES_PER_HOUR
@@ -91,13 +98,13 @@ module SunTimes
91
98
  cos_declination = Math.cos(Math.asin(sin_declination))
92
99
 
93
100
  cos_local_hour_angle =
94
- (Math.cos(degrees_to_radians(zenith)) - (sin_declination * Math.sin(degrees_to_radians(latitude)))) /
101
+ (Math.cos(degrees_to_radians(options[:zenith])) - (sin_declination * Math.sin(degrees_to_radians(latitude)))) /
95
102
  (cos_declination * Math.cos(degrees_to_radians(latitude)))
96
103
 
97
104
  # the sun never rises on this location (on the specified date)
98
- return nil if cos_local_hour_angle > 1
105
+ return options[:never_rises_result] if cos_local_hour_angle > 1
99
106
  # the sun never sets on this location (on the specified date)
100
- return nil if cos_local_hour_angle < -1
107
+ return options[:never_sets_result] if cos_local_hour_angle < -1
101
108
 
102
109
  # H
103
110
  suns_local_hour =
@@ -2,7 +2,7 @@ module SunTimes
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 1
5
- TINY = 3
5
+ TINY = 4
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -6,6 +6,10 @@ describe SunTimes do
6
6
  let(:longitude) { 11.432 }
7
7
  let(:rise) { Time.gm(2010, 3, 8, 5, 39, 53) }
8
8
  let(:set) { Time.gm(2010, 3, 8, 17, 11, 16) }
9
+ let(:midsummer) { Date.new(2010, 6, 21) }
10
+ let(:midwinter) { Date.new(2010, 12, 21) }
11
+ let(:north_cape_latitude) { 71.170219 }
12
+ let(:north_cape_longitude) { 25.785556 }
9
13
 
10
14
  describe '#calculate' do
11
15
  context ':rise' do
@@ -44,18 +48,13 @@ describe SunTimes do
44
48
  end
45
49
 
46
50
  context 'midnight sun' do
47
- # North Cape
48
- let(:midsummer) { Date.new(2010, 6, 21) }
49
- let(:latitude) { 71.170219 }
50
- let(:longitude) { 25.785556 }
51
-
52
51
  it 'rise is nil' do
53
- result = SunTimes.calculate(:rise, midsummer, latitude, longitude)
52
+ result = SunTimes.calculate(:rise, midsummer, north_cape_latitude, north_cape_longitude)
54
53
  expect(result).to be_nil
55
54
  end
56
55
 
57
56
  it 'set is nil' do
58
- result = SunTimes.calculate(:set, midsummer, latitude, longitude)
57
+ result = SunTimes.calculate(:set, midsummer, north_cape_latitude, north_cape_longitude)
59
58
  expect(result).to be_nil
60
59
  end
61
60
  end
@@ -68,6 +67,22 @@ describe SunTimes do
68
67
  SunTimes.calculate(:set, day, 47.5, -122)
69
68
  end
70
69
  end
70
+
71
+ context 'options' do
72
+ context ':never_rises_result' do
73
+ it 'uses the supplied value, instead of nil' do
74
+ result = SunTimes.calculate(:rise, midwinter, north_cape_latitude, north_cape_longitude, {:never_rises_result => :never_rises})
75
+ expect(result).to eq(:never_rises)
76
+ end
77
+ end
78
+
79
+ context ':never_sets_result' do
80
+ it 'uses the supplied value, instead of nil' do
81
+ result = SunTimes.calculate(:rise, midsummer, north_cape_latitude, north_cape_longitude, {:never_sets_result => :never_sets})
82
+ expect(result).to eq(:never_sets)
83
+ end
84
+ end
85
+ end
71
86
  end
72
87
 
73
88
  describe '#rise' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-sun-times
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joe Yates
@@ -48,15 +48,13 @@ files:
48
48
  - .rspec
49
49
  - COPYING
50
50
  - Gemfile
51
- - README
51
+ - README.md
52
52
  - Rakefile
53
53
  - lib/sun_times.rb
54
54
  - lib/sun_times/version.rb
55
55
  - ruby-sun-times.gemspec
56
56
  - spec/spec_helper.rb
57
57
  - spec/unit/ruby_sun_times_spec.rb
58
- - test/calculate_test.rb
59
- - test/test_all.rb
60
58
  homepage: https://github.com/joeyates/ruby-sun-times
61
59
  licenses: []
62
60
  metadata: {}
@@ -1,25 +0,0 @@
1
- # encoding: utf-8
2
- $:.unshift(File.dirname(__FILE__) + '/../lib')
3
- require 'test/unit'
4
- require 'sun_times'
5
- require 'date'
6
-
7
- class SunTimesTest < Test::Unit::TestCase
8
-
9
- =begin
10
- def test_time
11
- datetime = Time.gm(2010, 6, 13, 0, 0, 0)
12
- set = SunTimes.calculate(:set, datetime, 43.779, 11.432)
13
- assert_equal(Time.gm(2010, 6, 13, 18, 56, 55), set)
14
- end
15
-
16
- def test_datetime
17
- datetime = DateTime.new(2010, 6, 13, 0, 0, 0)
18
- set = SunTimes.calculate(:set, datetime, 43.779, 11.432)
19
- assert_equal(Time.gm(2010, 6, 13, 18, 56, 55), set)
20
- end
21
-
22
- def test_31st_december
23
- end
24
- =end
25
- end
data/test/test_all.rb DELETED
@@ -1,3 +0,0 @@
1
- Dir[File.dirname(__FILE__)+'/*_test.rb'].each do |test|
2
- require test
3
- end