ArseniysWeatherApp 0.1.0 → 0.1.4
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/.gitignore +3 -7
- data/README.md +15 -16
- data/exe/arseniys_weather_app +10 -0
- data/exe/location_avg_temp_threedays +7 -0
- data/exe/location_avg_temp_today +7 -0
- data/exe/my_weather_threedays +7 -0
- data/exe/my_weather_today +7 -0
- data/lib/ArseniysWeatherApp/version.rb +1 -1
- data/lib/ArseniysWeatherApp.rb +106 -30
- metadata +27 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6c7b486feee9a4fc832cb2fa78b8a2647d16709bf0fb357d5ff535f45619628f
|
4
|
+
data.tar.gz: 034deb0b4180118f9d6248b69e5d6e264acc0005228924c4f66601fa5db40ca9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 85090f66d32734b18e95f73c33e399b7e34ab7a7b01a0af0899a06fc266b483d7f0d713cfa7f94196f3da481b508211b66aed3c21705c1ecc9b1d1e7b7a693e1
|
7
|
+
data.tar.gz: 211c1bcf5232b4c4b9006f96f5aac89ddb6dbf515348250db215a7f1a9c5c7a67f2ce0ca7d82f5bcc456bab3d7be397c34474872245e7eaf3072601e471250cd
|
data/.gitignore
CHANGED
@@ -7,15 +7,11 @@
|
|
7
7
|
/spec/reports/
|
8
8
|
/tmp/
|
9
9
|
/spec/
|
10
|
-
/bin/
|
11
10
|
/.idea/
|
12
11
|
|
13
12
|
# rspec failure tracking
|
14
13
|
.rspec_status
|
15
14
|
.rspec
|
16
|
-
|
17
|
-
.
|
18
|
-
|
19
|
-
Gemfile
|
20
|
-
Gemfile.lock
|
21
|
-
Rakefile
|
15
|
+
*.gem
|
16
|
+
test.rb
|
17
|
+
*.json
|
data/README.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
#
|
1
|
+
# Arseniys Weather App
|
2
2
|
|
3
|
-
Welcome
|
3
|
+
Welcome!
|
4
4
|
|
5
|
-
|
5
|
+
This gem will work until 11 sep 2021, after that date yandex api key expires.
|
6
6
|
|
7
7
|
## Installation
|
8
8
|
|
@@ -20,19 +20,18 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
$ gem install ArseniysWeatherApp
|
22
22
|
|
23
|
-
##
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/ArseniysWeatherApp.
|
23
|
+
## QUICKSTART
|
24
|
+
```ruby
|
25
|
+
$ gem install ArseniysWeatherApp
|
26
|
+
|
27
|
+
irb:001:0> require "ArseniysWeatherApp"
|
28
|
+
=> true
|
29
|
+
irb:002:0> weather = ArseniysWeatherApp::Weather.new
|
30
|
+
irb:003:0> weather.my_fact_temperature
|
31
|
+
=> 16
|
32
|
+
irb:004:0> weather.spb_today_avg_temperature
|
33
|
+
=> {:morning=>19, :day=>23, :evening=>20, :night=>16}
|
34
|
+
```
|
36
35
|
|
37
36
|
## License
|
38
37
|
|
@@ -0,0 +1,10 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "ArseniysWeatherApp"
|
5
|
+
|
6
|
+
my_weather = ["Run my_weather_today to see your weather forecast for today",
|
7
|
+
"Run my_weather_threedays to see your weather forecast for 3 days",
|
8
|
+
"Run location_avg_temp_today desired_latitude desired_longitude to see this location weather forecast for today",
|
9
|
+
"Run location_avg_temp_threedays desired_latitude desired_longitude to see this location weather forecast for 3 days"]
|
10
|
+
puts my_weather
|
data/lib/ArseniysWeatherApp.rb
CHANGED
@@ -2,47 +2,123 @@
|
|
2
2
|
|
3
3
|
require_relative "ArseniysWeatherApp/version"
|
4
4
|
require "faraday"
|
5
|
-
require "
|
5
|
+
require "geokit"
|
6
6
|
|
7
7
|
module ArseniysWeatherApp
|
8
8
|
class Error < StandardError; end
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
class Requests
|
11
|
+
def self.weather_json(location: [59.9573887, 30.3430287],
|
12
|
+
lang: "ru_RU", forecasts: 7,
|
13
|
+
hours: false, extra: false)
|
14
|
+
url = "https://api.weather.yandex.ru/v2/forecast"
|
15
|
+
params = { "lat" => location[0], "lon" => location[1],
|
16
|
+
"lang" => lang, "limit" => forecasts,
|
17
|
+
"hours" => hours, "extra" => extra }
|
18
|
+
header = { "X-Yandex-API-Key" => "01cafac0-8fd8-48ca-956a-f442580428a0" }
|
19
|
+
response = Faraday.get(url, params, header)
|
20
|
+
JSON.parse(response.body)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.ip_addr
|
24
|
+
url = "https://obscure-temple-73986.herokuapp.com/"
|
25
|
+
response = Faraday.get(url, { "get_ip" => "yes" })
|
26
|
+
JSON.parse(response.body)["ip_addr"]
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class GeoInfo
|
31
|
+
def self.spb_location
|
32
|
+
{ lat: 59.9573887, lon: 30.3430287 }
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.location_by_ip
|
36
|
+
Geokit::Geocoders::IpstackGeocoder.api_key = "a1b3e41fa2284fb6fd4db50b8629e884"
|
37
|
+
geokit = Geokit::Geocoders::IpstackGeocoder.geocode(Requests.ip_addr)
|
38
|
+
{ lat: geokit.lat, lon: geokit.longitude }
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
class Forecast
|
43
|
+
def initialize(lat:, lon:)
|
44
|
+
@location = [lat, lon]
|
45
|
+
end
|
46
|
+
|
47
|
+
def today
|
48
|
+
Requests.weather_json(location: @location, forecasts: 1, hours: true)
|
49
|
+
end
|
50
|
+
|
51
|
+
def three_days
|
52
|
+
Requests.weather_json(location: @location, forecasts: 3, hours: true)
|
53
|
+
end
|
14
54
|
end
|
15
55
|
|
56
|
+
class Cleaners
|
57
|
+
def self.avg_temperature(forecast)
|
58
|
+
forecast = forecast_json(forecast)
|
59
|
+
avg_temperature = {}
|
60
|
+
day_name = ["today", "tomorrow", "day after tomorrow"]
|
61
|
+
forecast["forecasts"].each_with_index do |day, i|
|
62
|
+
avg_temperature[day_name[i]] = { morning: day["parts"]["morning"]["temp_avg"],
|
63
|
+
day: day["parts"]["day"]["temp_avg"],
|
64
|
+
evening: day["parts"]["evening"]["temp_avg"],
|
65
|
+
night: day["parts"]["night"]["temp_avg"] }
|
66
|
+
end
|
67
|
+
avg_temperature
|
68
|
+
end
|
16
69
|
|
70
|
+
def self.forecast_json(parts)
|
71
|
+
parts["forecasts"].each do |day|
|
72
|
+
day["parts"].delete_if { |key| %w[day_short night_short].include?(key) }
|
73
|
+
end
|
74
|
+
parts
|
75
|
+
end
|
17
76
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
puts("Today's morning average temperature: #{str["forecasts"][0]["parts"]["morning"]["temp_avg"]}C")
|
22
|
-
puts("Today's day average temperature: #{str["forecasts"][0]["parts"]["day"]["temp_avg"]}C")
|
23
|
-
puts("Today's evening average temperature: #{str["forecasts"][0]["parts"]["evening"]["temp_avg"]}C")
|
77
|
+
def self.fact(parts)
|
78
|
+
parts["fact"]["temp"]
|
79
|
+
end
|
24
80
|
end
|
25
81
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
82
|
+
class LocationWeatherForecast
|
83
|
+
def initialize(lat:, lon:)
|
84
|
+
@forecast = Forecast.new(lat: lat, lon: lon)
|
85
|
+
end
|
86
|
+
|
87
|
+
def fact
|
88
|
+
Cleaners.fact(@forecast.today)
|
89
|
+
end
|
90
|
+
|
91
|
+
def today_avg_temperature
|
92
|
+
Cleaners.avg_temperature(@forecast.today)
|
93
|
+
end
|
94
|
+
|
95
|
+
def three_days_avg_temperature
|
96
|
+
Cleaners.avg_temperature(@forecast.three_days)
|
97
|
+
end
|
98
|
+
|
99
|
+
def today_forecast_json
|
100
|
+
Cleaners.forecast_json(@forecast.today)
|
101
|
+
end
|
102
|
+
|
103
|
+
def three_days_forecast_json
|
104
|
+
Cleaners.forecast_json(@forecast.three_days)
|
105
|
+
end
|
41
106
|
end
|
42
107
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
108
|
+
class MyWeatherForecast
|
109
|
+
def initialize
|
110
|
+
location = GeoInfo.location_by_ip
|
111
|
+
@location_weather = LocationWeatherForecast.new(lat: location[:lat], lon: location[:lon])
|
112
|
+
end
|
113
|
+
|
114
|
+
def method_missing(method_name)
|
115
|
+
raise NoMethodError unless @location_weather.methods.include?(method_name)
|
47
116
|
|
117
|
+
@location_weather.method(method_name).call
|
118
|
+
end
|
119
|
+
|
120
|
+
def respond_to_missing?(method_name, include_private = false)
|
121
|
+
@location_weather.methods.include?(method_name)
|
122
|
+
end
|
123
|
+
end
|
48
124
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ArseniysWeatherApp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Arseniy Chirkov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-09-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -24,18 +24,42 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.7'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: geokit
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.13.1
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.13.1
|
27
41
|
description: |-
|
28
42
|
This gem is searches your location and based on your location
|
29
43
|
tells you what weather is right now
|
30
44
|
email:
|
31
45
|
- supernich19@gmail.com
|
32
|
-
executables:
|
46
|
+
executables:
|
47
|
+
- arseniys_weather_app
|
48
|
+
- location_avg_temp_threedays
|
49
|
+
- location_avg_temp_today
|
50
|
+
- my_weather_threedays
|
51
|
+
- my_weather_today
|
33
52
|
extensions: []
|
34
53
|
extra_rdoc_files: []
|
35
54
|
files:
|
36
55
|
- ".gitignore"
|
37
56
|
- LICENSE.txt
|
38
57
|
- README.md
|
58
|
+
- exe/arseniys_weather_app
|
59
|
+
- exe/location_avg_temp_threedays
|
60
|
+
- exe/location_avg_temp_today
|
61
|
+
- exe/my_weather_threedays
|
62
|
+
- exe/my_weather_today
|
39
63
|
- lib/ArseniysWeatherApp.rb
|
40
64
|
- lib/ArseniysWeatherApp/version.rb
|
41
65
|
homepage: https://github.com/Supernich/ArseniysWeatherApp
|