weather_handler 0.1.1 → 0.1.2
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 +4 -4
- data/Gemfile.lock +6 -4
- data/README.md +2 -2
- data/lib/adapters/weather.rb +47 -0
- data/lib/decorators/open_weather_response.rb +23 -0
- data/lib/open_weather_client.rb +25 -0
- data/lib/weather_handler/version.rb +1 -1
- data/lib/weather_handler.rb +16 -49
- data/weather_handler.gemspec +2 -1
- metadata +27 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: acf49f41b812a13f406b6a56094b8b4c5be8f9a5573190c0a24633589fc343d1
|
4
|
+
data.tar.gz: 703e40cf12dfafcdc6f4e213494a4be4eaa89b0137a4749b6fb65c3d1e789d63
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 14c6524569a6336f247502da745cef01e6598f234f47a7d56e722898a68ab1342d2832cd759e89041df92ba2622399e0dca4ed494e2f12cadefe86eb2e143c83
|
7
|
+
data.tar.gz: 921896d617a58470d269afab691ed192593afad34d1faf77cefa571290cc3b6312122bbe41eac44a88957072856b6949915c13062666b1b411962a4b111c3b8d
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
weather_handler (0.1.
|
4
|
+
weather_handler (0.1.2)
|
5
|
+
rest-client (~> 2.1)
|
6
|
+
retryable (~> 3.0, >= 3.0.5)
|
5
7
|
|
6
8
|
GEM
|
7
9
|
remote: https://rubygems.org/
|
@@ -11,11 +13,11 @@ GEM
|
|
11
13
|
unf (>= 0.0.5, < 1.0.0)
|
12
14
|
dotenv (2.7.6)
|
13
15
|
http-accept (1.7.0)
|
14
|
-
http-cookie (1.0.
|
16
|
+
http-cookie (1.0.4)
|
15
17
|
domain_name (~> 0.5)
|
16
18
|
mime-types (3.3.1)
|
17
19
|
mime-types-data (~> 3.2015)
|
18
|
-
mime-types-data (3.2021.
|
20
|
+
mime-types-data (3.2021.0704)
|
19
21
|
netrc (0.11.0)
|
20
22
|
rake (12.3.3)
|
21
23
|
rest-client (2.1.0)
|
@@ -23,6 +25,7 @@ GEM
|
|
23
25
|
http-cookie (>= 1.0.2, < 2.0)
|
24
26
|
mime-types (>= 1.16, < 4.0)
|
25
27
|
netrc (~> 0.8)
|
28
|
+
retryable (3.0.5)
|
26
29
|
rspec (3.10.0)
|
27
30
|
rspec-core (~> 3.10.0)
|
28
31
|
rspec-expectations (~> 3.10.0)
|
@@ -46,7 +49,6 @@ PLATFORMS
|
|
46
49
|
DEPENDENCIES
|
47
50
|
dotenv (~> 2.7, >= 2.7.6)
|
48
51
|
rake (~> 12.0)
|
49
|
-
rest-client (~> 2.1)
|
50
52
|
rspec (~> 3.0)
|
51
53
|
weather_handler!
|
52
54
|
|
data/README.md
CHANGED
@@ -24,8 +24,8 @@ After installation you new need to create instance of `WeatherHandler::Weather`
|
|
24
24
|
|
25
25
|
For example: `weather = WeatherHandler::Weather.new('london')`. Now you have new instance of WeatherHandler::Weather which you can use to find out such information as:
|
26
26
|
|
27
|
-
* current temperature (just call `weather.current_temperature('celsium')` and pass celsium, kelvin or fahrenheit argument dimension as string.
|
28
|
-
* feels like temperature (just call `weather.feels_like_temperature('fahrenheit')` and pass celsium, kelvin or fahrenheit argument dimension as string.
|
27
|
+
* current temperature (just call `weather.current_temperature('celsium')` and pass celsium, kelvin or fahrenheit argument dimension as string. Default attribute is 'celsium'. So for this case you can use just as: `weather.current_temperature` and you will receive celsium value.
|
28
|
+
* feels like temperature (just call `weather.feels_like_temperature('fahrenheit')` and pass celsium, kelvin or fahrenheit argument dimension as string. Default attribute is 'celsium'. So for this case you can use just as: `weather.feels_like_temperature` and you will receive celsium value.
|
29
29
|
* weather description (just call `weather.weather_description`)
|
30
30
|
* humidity (just call `weather.humidity`)
|
31
31
|
* pressure (just call `weather.pressure`)
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Adapters
|
4
|
+
class Weather
|
5
|
+
CONVERTATION_KELVIN_VALUE = 273.15
|
6
|
+
CONVERTATION_FAHRENHEIT_VALUE = 459.67
|
7
|
+
FAHRENHEIT_COEFFICIENT = 1.8
|
8
|
+
CELSIUM = 'celsium'
|
9
|
+
KELVIN = 'kelvin'
|
10
|
+
FAHRENHEIT = 'fahrenheit'
|
11
|
+
ERROR_MESSAGE = 'Please, try to type correct dimension. Correct types are: Celsium, Kelvin and Fahrenheit.'
|
12
|
+
|
13
|
+
def initialize(dimension, standard_amount)
|
14
|
+
@dimension = dimension
|
15
|
+
@standard_amount = standard_amount
|
16
|
+
end
|
17
|
+
|
18
|
+
def call
|
19
|
+
converter(dimension, standard_amount)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
attr_reader :standard_amount, :dimension, :amount
|
25
|
+
|
26
|
+
def converter(dimension, quantity)
|
27
|
+
case dimension.downcase
|
28
|
+
when CELSIUM
|
29
|
+
"#{degrees_to_c(quantity)} C"
|
30
|
+
when KELVIN
|
31
|
+
"#{quantity} K"
|
32
|
+
when FAHRENHEIT
|
33
|
+
"#{degrees_to_f(quantity)} F"
|
34
|
+
else
|
35
|
+
ERROR_MESSAGE
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def degrees_to_c(quantity)
|
40
|
+
(quantity - CONVERTATION_KELVIN_VALUE).round(1)
|
41
|
+
end
|
42
|
+
|
43
|
+
def degrees_to_f(quantity)
|
44
|
+
(quantity * FAHRENHEIT_COEFFICIENT - CONVERTATION_FAHRENHEIT_VALUE).round(1)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Decorators
|
2
|
+
class OpenWeatherResponse
|
3
|
+
def initialize(data)
|
4
|
+
@data = data
|
5
|
+
end
|
6
|
+
|
7
|
+
def amount_in_kelvins
|
8
|
+
parsed_data['temp'].round(1)
|
9
|
+
end
|
10
|
+
|
11
|
+
def parsed_data
|
12
|
+
JSON.parse(data.body)['main']
|
13
|
+
end
|
14
|
+
|
15
|
+
def parsed_weather_description
|
16
|
+
JSON.parse(data.body)['weather'].first['description'].split.map(&:capitalize).join(' ')
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
attr_reader :data
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class OpenWeatherClient
|
4
|
+
def initialize(city)
|
5
|
+
@city = city
|
6
|
+
end
|
7
|
+
|
8
|
+
def call
|
9
|
+
Decorators::OpenWeatherResponse.new(weather_data)
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
attr_reader :city
|
15
|
+
|
16
|
+
def weather_data
|
17
|
+
Retryable.retryable(tries: 5) do
|
18
|
+
@weather_data ||= RestClient.get(location_url)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def location_url
|
23
|
+
"api.openweathermap.org/data/2.5/weather?q=#{city}&appid=#{ENV['OPEN_WEATHER_API_KEY']}"
|
24
|
+
end
|
25
|
+
end
|
data/lib/weather_handler.rb
CHANGED
@@ -4,78 +4,45 @@ require 'weather_handler/version'
|
|
4
4
|
require 'rest-client'
|
5
5
|
require 'dotenv/load'
|
6
6
|
require 'json'
|
7
|
+
require 'retryable'
|
8
|
+
require 'open_weather_client'
|
9
|
+
require 'adapters/weather'
|
10
|
+
require 'decorators/open_weather_response'
|
7
11
|
|
8
12
|
module WeatherHandler
|
9
13
|
class Weather
|
10
|
-
CONVERTATION_KELVIN_VALUE = 273.15
|
11
|
-
CONVERTATION_FAHRENHEIT_VALUE = 459.67
|
12
|
-
FAHRENHEIT_COEFFICIENT = 1.8
|
13
|
-
ERROR_MESSAGE = 'Please, try to type correct dimension. Correct types are: Celsium, Kelvin and Fahrenheit.'
|
14
14
|
CELSIUM = 'celsium'
|
15
|
-
KELVIN = 'kelvin'
|
16
|
-
FAHRENHEIT = 'fahrenheit'
|
17
15
|
|
18
16
|
def initialize(city)
|
19
|
-
@
|
17
|
+
@response = OpenWeatherClient.new(city).call
|
18
|
+
@converter = Adapters::Weather
|
19
|
+
@kelvin_amount = response.amount_in_kelvins
|
20
20
|
end
|
21
21
|
|
22
|
-
def current_temperature(dimension)
|
23
|
-
converter(dimension)
|
22
|
+
def current_temperature(dimension = CELSIUM)
|
23
|
+
converter.new(dimension, kelvin_amount).call
|
24
24
|
end
|
25
25
|
|
26
|
-
def feels_like_temperature(dimension)
|
27
|
-
amount = (
|
26
|
+
def feels_like_temperature(dimension = CELSIUM)
|
27
|
+
amount = (response.parsed_data['feels_like']).round(1)
|
28
28
|
|
29
|
-
converter(dimension, amount)
|
29
|
+
converter.new(dimension, amount).call
|
30
30
|
end
|
31
31
|
|
32
32
|
def weather_description
|
33
|
-
|
33
|
+
response.parsed_weather_description
|
34
34
|
end
|
35
35
|
|
36
36
|
def humidity
|
37
|
-
"#{
|
37
|
+
"#{response.parsed_data['humidity']} %"
|
38
38
|
end
|
39
39
|
|
40
40
|
def pressure
|
41
|
-
"#{
|
41
|
+
"#{response.parsed_data['pressure']} mb"
|
42
42
|
end
|
43
43
|
|
44
44
|
private
|
45
45
|
|
46
|
-
attr_reader :
|
47
|
-
|
48
|
-
def weather_data
|
49
|
-
@weather_data ||= RestClient.get(location_url)
|
50
|
-
end
|
51
|
-
|
52
|
-
def location_url
|
53
|
-
"api.openweathermap.org/data/2.5/weather?q=#{city}&appid=#{ENV['OPEN_WEATHER_API_KEY']}"
|
54
|
-
end
|
55
|
-
|
56
|
-
def converter(dimension, quantity = degrees_in_k)
|
57
|
-
case dimension.downcase
|
58
|
-
when CELSIUM
|
59
|
-
"#{degrees_to_c(quantity)} C"
|
60
|
-
when KELVIN
|
61
|
-
"#{quantity} K"
|
62
|
-
when FAHRENHEIT
|
63
|
-
"#{degrees_to_f(quantity)} F"
|
64
|
-
else
|
65
|
-
ERROR_MESSAGE
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
def degrees_to_c(quantity)
|
70
|
-
(quantity - CONVERTATION_KELVIN_VALUE).round(1)
|
71
|
-
end
|
72
|
-
|
73
|
-
def degrees_in_k
|
74
|
-
(JSON.parse(weather_data.body)['main']['temp']).round(1)
|
75
|
-
end
|
76
|
-
|
77
|
-
def degrees_to_f(quantity)
|
78
|
-
(quantity * FAHRENHEIT_COEFFICIENT - CONVERTATION_FAHRENHEIT_VALUE).round(1)
|
79
|
-
end
|
46
|
+
attr_reader :response, :converter, :kelvin_amount
|
80
47
|
end
|
81
48
|
end
|
data/weather_handler.gemspec
CHANGED
@@ -29,7 +29,8 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.add_development_dependency('rake', '~> 12.0')
|
30
30
|
spec.add_development_dependency('rspec', '~> 3.0')
|
31
31
|
spec.add_development_dependency('dotenv', '~> 2.7', '>= 2.7.6')
|
32
|
-
spec.
|
32
|
+
spec.add_dependency('rest-client', '~> 2.1')
|
33
|
+
spec.add_dependency('retryable', '~> 3.0', '>= 3.0.5')
|
33
34
|
|
34
35
|
spec.required_ruby_version = Gem::Requirement.new('>= 2.3.0')
|
35
36
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: weather_handler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ivan Viter
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-08-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -65,13 +65,33 @@ dependencies:
|
|
65
65
|
- - "~>"
|
66
66
|
- !ruby/object:Gem::Version
|
67
67
|
version: '2.1'
|
68
|
-
type: :
|
68
|
+
type: :runtime
|
69
69
|
prerelease: false
|
70
70
|
version_requirements: !ruby/object:Gem::Requirement
|
71
71
|
requirements:
|
72
72
|
- - "~>"
|
73
73
|
- !ruby/object:Gem::Version
|
74
74
|
version: '2.1'
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: retryable
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - "~>"
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '3.0'
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: 3.0.5
|
85
|
+
type: :runtime
|
86
|
+
prerelease: false
|
87
|
+
version_requirements: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - "~>"
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '3.0'
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: 3.0.5
|
75
95
|
description: This gem will find weather for your city
|
76
96
|
email:
|
77
97
|
- ivanviter@i.ua
|
@@ -92,6 +112,9 @@ files:
|
|
92
112
|
- Rakefile
|
93
113
|
- bin/console
|
94
114
|
- bin/setup
|
115
|
+
- lib/adapters/weather.rb
|
116
|
+
- lib/decorators/open_weather_response.rb
|
117
|
+
- lib/open_weather_client.rb
|
95
118
|
- lib/weather_handler.rb
|
96
119
|
- lib/weather_handler/version.rb
|
97
120
|
- weather_handler.gemspec
|
@@ -118,7 +141,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
118
141
|
- !ruby/object:Gem::Version
|
119
142
|
version: '0'
|
120
143
|
requirements: []
|
121
|
-
rubygems_version: 3.
|
144
|
+
rubygems_version: 3.2.5
|
122
145
|
signing_key:
|
123
146
|
specification_version: 4
|
124
147
|
summary: Weather Handler gem is created for purpose of finding weather on any city
|