sunweather 0.2.0 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 38c8f064c219168fc41eb8f91c750b9323602ee8
4
- data.tar.gz: 1c6dae727724c6874a7903f0be62574fb280b945
3
+ metadata.gz: ccf57264d8f1a94497748defc696a25bab52ebbd
4
+ data.tar.gz: 74a53502a0dbf686b88a66d22de0769eb5f4d4a6
5
5
  SHA512:
6
- metadata.gz: 530e7eb65876a91c82d1345875794f16faa5c868fa456b09af247e98ca268ceb29005aad3426842e78e1af0a36176d88ed57331c585496be807264e5030d9eac
7
- data.tar.gz: 97e2471d78cde0718fe8f948bad813b19dee29b45f94d7112e7c4b926af013f6be423a7e42e1702dcaac7bcf80a05d579d19b44d351cd078fa964b140b5c4aef
6
+ metadata.gz: c0cd89eac1a47f59ed9d30145e897a57a35a359f52620cfa574d8507b4d707bdfb4e0c5c17fda303d056aa300a2b5ec4bc91681fe5ebcb4b2b888e811e882d76
7
+ data.tar.gz: ee6cdec86b8a18f75449d2949f8aabe9ff9e0022e3a732fea6e061ee532f8cd883f6918eb7c1b4d267ce1d3a24a40beb70bb684298316d353d51d242e9c2715a
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.3.0
data/lib/runner.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require_relative 'geo'
2
2
  require_relative 'sun'
3
+ require_relative 'weather'
3
4
 
4
5
  module Sunweather
5
6
  class Runner
@@ -10,10 +11,15 @@ module Sunweather
10
11
  def run
11
12
  @geo = (ARGV[0] ? Geo.new(ARGV[0]) : Geo.new)
12
13
  @sun = Sun.new(@geo.lat, @geo.lng)
13
- puts @sun.start_of_dawn
14
- puts @sun.sunrise
15
- puts @sun.sunset
16
- puts @sun.end_of_dusk
14
+ @weather = Weather.new(@geo.lat, @geo.lng)
15
+ puts "Dawn from #{hours_minutes(@sun.start_of_dawn)} to #{hours_minutes(@sun.sunrise)}"
16
+ puts "Dusk from #{hours_minutes(@sun.sunset)} to #{hours_minutes(@sun.end_of_dusk)}"
17
+ puts "Temperature: #{@weather.temperature}°C, feels like #{@weather.feels_like}°C"
18
+ puts "#{@weather.conditions} sky, #{@weather.wind_speed.downcase} wind from #{@weather.wind_direction}."
19
+ end
20
+
21
+ def hours_minutes time
22
+ "#{time.hour}:#{time.min+time.sec/30}"
17
23
  end
18
24
  end
19
25
  end
data/lib/sun.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  require 'xmlsimple'
2
2
  require 'open-uri'
3
- require 'awesome_print'
4
3
  require 'date'
5
4
 
6
5
  module Sunweather
@@ -53,5 +52,9 @@ module Sunweather
53
52
  def end_of_dusk
54
53
  Time.at(self.sunset.to_i + self.dawn_length.to_i)
55
54
  end
55
+
56
+ def hours_minutes time
57
+ "#{time.hour}:#{time.minute+time.second/30}"
58
+ end
56
59
  end
57
60
  end
data/lib/weather.rb ADDED
@@ -0,0 +1,39 @@
1
+ require 'xmlsimple'
2
+ require 'open-uri'
3
+
4
+ module Sunweather
5
+ class Weather
6
+ attr_reader :data_current, :data_forecast
7
+
8
+ def initialize lat, lng
9
+ file = open("http://api.wunderground.com/api/#{ENV["SUNWEATHER_DEV_WUNDERGROUND_API"]}/conditions/q/#{lat},#{lng}.xml")
10
+ @data_current = XmlSimple.xml_in(file)
11
+ file = open("http://api.worldweatheronline.com/free/v1/weather.ashx?q=#{lat},#{lng}&format=xml&extra=localObsTime&num_of_days=5&includelocation=yes&key=#{ENV['SUNWEATHER_DEV_WWO_API']}")
12
+ @data_forecast = XmlSimple.xml_in(file)
13
+ end
14
+
15
+ def temperature
16
+ Float(self.data_current["current_observation"][0]["temp_c"][0])
17
+ end
18
+
19
+ def feels_like
20
+ Float(self.data_current["current_observation"][0]["feelslike_c"][0])
21
+ end
22
+
23
+ def observation_time
24
+ Time.at(Integer(self.data_current["current_observation"][0]["observation_epoch"][0]))
25
+ end
26
+
27
+ def conditions
28
+ self.data_current["current_observation"][0]["weather"][0]
29
+ end
30
+
31
+ def wind_speed
32
+ self.data_current["current_observation"][0]["wind_string"][0]
33
+ end
34
+
35
+ def wind_direction
36
+ self.data_current["current_observation"][0]["wind_dir"][0]
37
+ end
38
+ end
39
+ end
data/spec/sun_spec.rb CHANGED
@@ -1,6 +1,7 @@
1
+ require_relative "../lib/geo"
1
2
  require_relative "../lib/sun"
2
3
 
3
- describe Sunweather::Sun, "after initializing with a string" do
4
+ describe Sunweather::Sun, "after initializing with geocoordinates from default Geo object" do
4
5
  let(:geo) { Sunweather::Geo.new }
5
6
  let(:sun) { Sunweather::Sun.new(geo.lat, geo.lng) }
6
7
 
@@ -0,0 +1,33 @@
1
+ require_relative "../lib/geo"
2
+ require_relative "../lib/weather"
3
+
4
+ describe Sunweather::Weather, "after initializing with geocoordinates from default Geo object" do
5
+ let(:geo) { Sunweather::Geo.new }
6
+ let(:weather) { Sunweather::Weather.new(geo.lat, geo.lng) }
7
+
8
+ it "contains the required data from World Weather Online" do
9
+ expect(weather.data_current).not_to be_nil
10
+ expect(Integer(weather.data_current["current_observation"][0]["observation_epoch"][0])).to be_within(7*86400).of(Time.now.to_i)
11
+ expect(Float(weather.data_current["current_observation"][0]["temp_c"][0])).to be_within(100).of(0)
12
+ expect(Float(weather.data_current["current_observation"][0]["feelslike_c"][0])).to be_within(100).of(0)
13
+ expect(weather.data_current["current_observation"][0]["weather"][0]).to_not be_empty
14
+ expect(weather.data_current["current_observation"][0]["wind_string"][0]).to_not be_empty
15
+ expect(weather.data_current["current_observation"][0]["wind_dir"][0]).to_not be_empty
16
+ expect(weather.data_forecast).not_to be_nil
17
+ expect(Integer(weather.data_forecast["weather"][0]["tempMinC"][0])).to be_within(100).of(0)
18
+ expect(Integer(weather.data_forecast["weather"][0]["tempMaxC"][0])).to be_within(100).of(0)
19
+ expect(weather.data_forecast["weather"][0]["weatherDesc"][0]).to_not be_empty
20
+ expect(Integer(weather.data_forecast["weather"][0]["windspeedKmph"][0])).to be_within(100).of(100)
21
+ expect(weather.data_forecast["weather"][0]["winddir16Point"][0]).to_not be_empty
22
+ expect(Integer(weather.data_forecast["weather"][4]["tempMinC"][0])).to be_within(100).of(0)
23
+ expect(Integer(weather.data_forecast["weather"][4]["tempMaxC"][0])).to be_within(100).of(0)
24
+ expect(weather.data_forecast["weather"][4]["weatherDesc"][0]).to_not be_empty
25
+ expect(Integer(weather.data_forecast["weather"][4]["windspeedKmph"][0])).to be_within(100).of(100)
26
+ expect(weather.data_forecast["weather"][4]["winddir16Point"][0]).to_not be_empty
27
+ expect(weather.temperature).to be_within(100).of(0)
28
+ expect(weather.feels_like).to be_within(100).of(0)
29
+ expect(weather.observation_time.min).to be_within(30).of(30)
30
+ expect(weather.conditions).to_not be_empty
31
+ expect(weather.wind_speed).to_not be_empty
32
+ end
33
+ end
data/sunweather.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "sunweather"
8
- s.version = "0.2.0"
8
+ s.version = "0.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Tobi Frank"]
12
- s.date = "2013-10-17"
12
+ s.date = "2013-10-18"
13
13
  s.description = "Provides sunrise/sunset and weather info for given address."
14
14
  s.email = "tobifrank38@gmail.com"
15
15
  s.executables = ["sunweather"]
@@ -30,10 +30,13 @@ Gem::Specification.new do |s|
30
30
  "lib/geo.rb",
31
31
  "lib/runner.rb",
32
32
  "lib/sun.rb",
33
+ "lib/weather.rb",
33
34
  "spec/geo_spec.rb",
34
35
  "spec/spec_helper.rb",
35
36
  "spec/sun_spec.rb",
36
- "sunweather.gemspec"
37
+ "spec/weather_spec.rb",
38
+ "sunweather.gemspec",
39
+ "temp"
37
40
  ]
38
41
  s.homepage = "http://github.com/tobifrank/sunweather"
39
42
  s.licenses = ["MIT"]
data/temp ADDED
@@ -0,0 +1,4 @@
1
+ .
2
+
3
+ Finished in 2.7 seconds
4
+ 1 example, 0 failures
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sunweather
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tobi Frank
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-17 00:00:00.000000000 Z
11
+ date: 2013-10-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -171,10 +171,13 @@ files:
171
171
  - lib/geo.rb
172
172
  - lib/runner.rb
173
173
  - lib/sun.rb
174
+ - lib/weather.rb
174
175
  - spec/geo_spec.rb
175
176
  - spec/spec_helper.rb
176
177
  - spec/sun_spec.rb
178
+ - spec/weather_spec.rb
177
179
  - sunweather.gemspec
180
+ - temp
178
181
  homepage: http://github.com/tobifrank/sunweather
179
182
  licenses:
180
183
  - MIT