open_weather_service 0.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.
- checksums.yaml +7 -0
- data/lib/current.rb +62 -0
- data/lib/forecast.rb +28 -0
- data/lib/manager.rb +37 -0
- data/lib/open_weather.rb +11 -0
- data/lib/weather.rb +22 -0
- metadata +49 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 262c31c6038f07cbef2181192ae4d63b62f254a3
|
4
|
+
data.tar.gz: afe215cfd77d9e2122f4fdc3224401f34963b072
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a716e447a886e91764f500714dd3a644d41cf1cdbb92516b7e80467745f21cd914434d9bb51d1a52ca5616def7e2b3e82b75e40f82dd9e97997aaa39a4ff12e8
|
7
|
+
data.tar.gz: 3cb5d7378ebefeab93bc209f1aa357c9af3170d07ac22ef4968ccab0d27fb6e03de3bdbbb7393700c619731270347179616f850edc4d27d79bd0fa96bd62f6eb
|
data/lib/current.rb
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'rest-client'
|
2
|
+
require 'json'
|
3
|
+
module OpenWeather
|
4
|
+
# current weather
|
5
|
+
class Current
|
6
|
+
|
7
|
+
URL = "http://api.openweathermap.org/data/2.5/weather?q=#{CITY},#{COUNTRY}"
|
8
|
+
|
9
|
+
def self.weather
|
10
|
+
if Manager.can_consume?
|
11
|
+
@weather = load_weather
|
12
|
+
@weather
|
13
|
+
else
|
14
|
+
@weather
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.speed
|
19
|
+
weather if weather.nil?
|
20
|
+
weather.speed
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.humidity
|
24
|
+
weather if weather.nil?
|
25
|
+
weather.humidity
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.temp
|
29
|
+
weather if weather.nil?
|
30
|
+
weather.temp
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.temp_min
|
34
|
+
weather if weather.nil?
|
35
|
+
weather.temp_min
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.temp_max
|
39
|
+
weather if weather.nil?
|
40
|
+
weather.temp_max
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.icon
|
44
|
+
weather if weather.nil?
|
45
|
+
weather.icon
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.load_weather
|
49
|
+
response = RestClient.get url
|
50
|
+
if response.code == 200
|
51
|
+
json = JSON.parse response.body
|
52
|
+
@weather = Weather.new(json)
|
53
|
+
else
|
54
|
+
@weather = Weather.new
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.url
|
59
|
+
URL + "&appid=#{API_KEY}"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
data/lib/forecast.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
module OpenWeather
|
2
|
+
class Forecast
|
3
|
+
URL = "http://api.openweathermap.org/data/2.5/forecast?q=#{CITY},#{COUNTRY}&mode=json"
|
4
|
+
|
5
|
+
def self.weathers
|
6
|
+
if Manager.can_consume?
|
7
|
+
@weathers = load_weather
|
8
|
+
@weathers
|
9
|
+
else
|
10
|
+
@weathers
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.load_weather
|
15
|
+
response = RestClient.get url
|
16
|
+
if response.code == 200
|
17
|
+
json = JSON.parse response.body
|
18
|
+
@weathers = json['list'].collect { |j| Weather.new(j) }
|
19
|
+
else
|
20
|
+
@weathers = []
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.url
|
25
|
+
URL + "&appid=#{API_KEY}"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/manager.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
module OpenWeather
|
2
|
+
# Manage the number of calls to the api
|
3
|
+
class Manager
|
4
|
+
LIMIT_CALLS = 59 # free plan
|
5
|
+
LIMIT_SECONDS = 60
|
6
|
+
|
7
|
+
@calls = 0
|
8
|
+
@last_call_at = Time.now
|
9
|
+
|
10
|
+
def self.can_consume?
|
11
|
+
if @calls < LIMIT_CALLS
|
12
|
+
call
|
13
|
+
true
|
14
|
+
elsif valid_time?
|
15
|
+
reset
|
16
|
+
true
|
17
|
+
else
|
18
|
+
# puts (Time.now - @last_call_at)
|
19
|
+
false
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.call
|
24
|
+
@calls += 1
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.reset
|
28
|
+
# puts "Reset..."
|
29
|
+
@calls = 0
|
30
|
+
@last_call_at = Time.now
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.valid_time?
|
34
|
+
(Time.now - @last_call_at) >= LIMIT_SECONDS
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/open_weather.rb
ADDED
data/lib/weather.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
module OpenWeather
|
2
|
+
class Weather
|
3
|
+
attr_reader :speed, :humidity, :temp, :temp_min, :temp_max, :icon, :date
|
4
|
+
|
5
|
+
def initialize(options = {})
|
6
|
+
main = options['main']
|
7
|
+
@speed = options['wind']['speed']
|
8
|
+
@humidity = main['humidity']
|
9
|
+
@temp = to_fahrenheit(main['temp'])
|
10
|
+
@temp_min = to_fahrenheit(main['temp_min'])
|
11
|
+
@temp_max = to_fahrenheit(main['temp_max'])
|
12
|
+
@icon = options['weather'][0]['main']
|
13
|
+
@date = options['dt_txt'] || Time.now
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def to_fahrenheit(x)
|
19
|
+
{ kelvin: x, fahrenheit: x * (9 / 5.0) - 459.67 }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
metadata
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: open_weather_service
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Carlos Andres Torres Cruz
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-10-27 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Allows you to get the current weather and the forecast of the current
|
14
|
+
week
|
15
|
+
email: carlosandrestorres28@gmail.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- lib/current.rb
|
21
|
+
- lib/forecast.rb
|
22
|
+
- lib/manager.rb
|
23
|
+
- lib/open_weather.rb
|
24
|
+
- lib/weather.rb
|
25
|
+
homepage: https://github.com/katorres02/open_weather_client_ruby
|
26
|
+
licenses:
|
27
|
+
- MIT
|
28
|
+
metadata: {}
|
29
|
+
post_install_message:
|
30
|
+
rdoc_options: []
|
31
|
+
require_paths:
|
32
|
+
- lib
|
33
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
34
|
+
requirements:
|
35
|
+
- - ">="
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '0'
|
43
|
+
requirements: []
|
44
|
+
rubyforge_project:
|
45
|
+
rubygems_version: 2.4.6
|
46
|
+
signing_key:
|
47
|
+
specification_version: 4
|
48
|
+
summary: REST client for open_weather service
|
49
|
+
test_files: []
|