owmo 2.0.0 → 2.0.3
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 +5 -5
- data/.github/workflows/ruby-publish-gem.yml +22 -0
- data/.github/workflows/ruby.yml +38 -0
- data/Gemfile +4 -0
- data/Rakefile +6 -4
- data/bin/console +4 -3
- data/examples/current.rb +6 -5
- data/examples/current_box.rb +4 -2
- data/examples/current_circle.rb +4 -2
- data/examples/current_group.rb +5 -3
- data/examples/forecast16.rb +6 -6
- data/examples/forecast5.rb +6 -6
- data/examples/query_all.rb +4 -2
- data/examples/query_geocode.rb +9 -7
- data/examples/query_mode.rb +7 -5
- data/examples/query_units.rb +6 -4
- data/examples/sinatra_example.rb +5 -4
- data/lib/core_extensions/net/http_response/weather_response.rb +31 -27
- data/lib/owmo/version.rb +5 -6
- data/lib/owmo/weather.rb +67 -106
- data/lib/owmo.rb +26 -30
- data/owmo.gemspec +16 -13
- metadata +12 -11
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: b7e4b64ccdb32db93f751f28f7c07923244770d68eda25301b1939ac21de38bb
|
|
4
|
+
data.tar.gz: f67520f2b29f4bbf95f0bef27a60827fd1f04906ab2fa72da49a7ebefc834f3f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e072a5ccce24a3c24032b5d88141feabe29806e6f1825c21700b751b5a9b91e3f43e9218cbed9bcd0a095b9335115979da775374d7093ec46059a51185cff42a
|
|
7
|
+
data.tar.gz: 1cd83a94eec07bfcb4d9a96d0a087395fea3b7f4a227cc8665bad66175a9fc4738d3c3813c25db1967768db2a7e32d8488fa857282b957cc1b43dc8bf2cb6e39
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
name: Publish Gem
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- "*"
|
|
7
|
+
tags:
|
|
8
|
+
- v*
|
|
9
|
+
jobs:
|
|
10
|
+
build:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@v3
|
|
15
|
+
|
|
16
|
+
- name: Release Gem
|
|
17
|
+
if: contains(github.ref, 'refs/tags/v')
|
|
18
|
+
uses: cadwallion/publish-rubygems-action@master
|
|
19
|
+
env:
|
|
20
|
+
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
|
21
|
+
RUBYGEMS_API_KEY: ${{secrets.RUBYGEMS_API_KEY}}
|
|
22
|
+
RELEASE_COMMAND: rake release
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# This workflow uses actions that are not certified by GitHub.
|
|
2
|
+
# They are provided by a third-party and are governed by
|
|
3
|
+
# separate terms of service, privacy policy, and support
|
|
4
|
+
# documentation.
|
|
5
|
+
# This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
|
|
6
|
+
# For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
|
|
7
|
+
|
|
8
|
+
name: Ruby
|
|
9
|
+
|
|
10
|
+
on:
|
|
11
|
+
push:
|
|
12
|
+
branches: [ "main" ]
|
|
13
|
+
pull_request:
|
|
14
|
+
branches: [ "main" ]
|
|
15
|
+
|
|
16
|
+
permissions:
|
|
17
|
+
contents: read
|
|
18
|
+
|
|
19
|
+
jobs:
|
|
20
|
+
test:
|
|
21
|
+
|
|
22
|
+
runs-on: ubuntu-latest
|
|
23
|
+
strategy:
|
|
24
|
+
matrix:
|
|
25
|
+
ruby-version: ['2.7', '3.0']
|
|
26
|
+
|
|
27
|
+
steps:
|
|
28
|
+
- uses: actions/checkout@v3
|
|
29
|
+
- name: Set up Ruby
|
|
30
|
+
# To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
|
|
31
|
+
# change this to (see https://github.com/ruby/setup-ruby#versioning):
|
|
32
|
+
# uses: ruby/setup-ruby@v1
|
|
33
|
+
uses: ruby/setup-ruby@ee2113536afb7f793eed4ce60e8d3b26db912da4 # v1.127.0
|
|
34
|
+
with:
|
|
35
|
+
ruby-version: ${{ matrix.ruby-version }}
|
|
36
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
|
37
|
+
- name: Run tests
|
|
38
|
+
run: bundle exec rake
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
require "rspec/core/rake_task"
|
|
1
|
+
# frozen_string_literal: true
|
|
3
2
|
|
|
4
|
-
|
|
3
|
+
require 'bundler/gem_tasks'
|
|
4
|
+
require 'rspec/core/rake_task'
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
RSpec::Core::RakeTask.new :spec
|
|
7
|
+
|
|
8
|
+
task default: :spec
|
data/bin/console
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
4
|
+
require 'bundler/setup'
|
|
5
|
+
require 'owmo'
|
|
5
6
|
|
|
6
7
|
# You can add fixtures and/or initialization code here to make experimenting
|
|
7
8
|
# with your gem easier. You can also use a different console, if you like.
|
|
@@ -10,5 +11,5 @@ require "owmo"
|
|
|
10
11
|
# require "pry"
|
|
11
12
|
# Pry.start
|
|
12
13
|
|
|
13
|
-
require
|
|
14
|
+
require 'irb'
|
|
14
15
|
IRB.start(__FILE__)
|
data/examples/current.rb
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'owmo'
|
|
2
4
|
|
|
3
|
-
|
|
4
|
-
An example on how to get current conditions and use the different parameters.
|
|
5
|
-
=
|
|
6
|
-
api_key = ""
|
|
5
|
+
# rdoc
|
|
6
|
+
# An example on how to get current conditions and use the different parameters.
|
|
7
|
+
api_key = ''
|
|
7
8
|
|
|
8
9
|
weather = OWMO::Weather.new api_key
|
|
9
10
|
|
|
10
11
|
# http://openweathermap.org/current#data
|
|
11
|
-
current = weather.get :current, city_name:
|
|
12
|
+
current = weather.get :current, city_name: 'London,UK'
|
|
12
13
|
|
|
13
14
|
puts current
|
data/examples/current_box.rb
CHANGED
data/examples/current_circle.rb
CHANGED
data/examples/current_group.rb
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'owmo'
|
|
2
4
|
|
|
3
|
-
api_key =
|
|
5
|
+
api_key = ''
|
|
4
6
|
|
|
5
|
-
OWMO
|
|
6
|
-
puts weather.get :group, id: [
|
|
7
|
+
OWMO.weather(api_key) do |weather|
|
|
8
|
+
puts weather.get :group, id: [4_850_751, 4_887_398, 2_643_743, 4_164_138, 5_368_361].join(',')
|
|
7
9
|
end
|
data/examples/forecast16.rb
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'owmo'
|
|
3
4
|
|
|
4
|
-
|
|
5
|
-
An example on how to get the weather forcast and use the different parameters.
|
|
6
|
-
=
|
|
7
|
-
api_key = ""
|
|
5
|
+
# rdoc
|
|
6
|
+
# An example on how to get the weather forcast and use the different parameters.
|
|
7
|
+
api_key = ''
|
|
8
8
|
|
|
9
9
|
weather = OWMO::Weather.new api_key
|
|
10
10
|
|
|
11
11
|
# http://openweathermap.org/forecast16
|
|
12
|
-
forecast16 = weather.get :forecast16, city_name:
|
|
12
|
+
forecast16 = weather.get :forecast16, city_name: 'London,UK'
|
|
13
13
|
|
|
14
14
|
puts forecast16
|
data/examples/forecast5.rb
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'owmo'
|
|
3
4
|
|
|
4
|
-
|
|
5
|
-
An example on how to get the extended forcast and use the different parameters.
|
|
6
|
-
=
|
|
7
|
-
api_key = ""
|
|
5
|
+
# rdoc
|
|
6
|
+
# An example on how to get the extended forcast and use the different parameters.
|
|
7
|
+
api_key = ''
|
|
8
8
|
|
|
9
9
|
weather = OWMO::Weather.new api_key
|
|
10
10
|
|
|
11
11
|
# http://openweathermap.org/forecast5
|
|
12
|
-
forecast5 = weather.get :forecast5, city_name:
|
|
12
|
+
forecast5 = weather.get :forecast5, city_name: 'London,UK'
|
|
13
13
|
|
|
14
14
|
puts forecast5
|
data/examples/query_all.rb
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'owmo'
|
|
2
4
|
|
|
3
|
-
api_key =
|
|
5
|
+
api_key = ''
|
|
4
6
|
|
|
5
7
|
weather = OWMO::Weather.new api_key
|
|
6
8
|
|
|
7
9
|
query = {
|
|
8
|
-
city_name:
|
|
10
|
+
city_name: 'London,UK', # Geolocation, required
|
|
9
11
|
mode: 'json', # Return data [json (defaul), xml, html]
|
|
10
12
|
units: 'imperial', # [imperial, metric, or blank (Default, Kelvin)]
|
|
11
13
|
lang: 'fr' # Language support
|
data/examples/query_geocode.rb
CHANGED
|
@@ -1,20 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'owmo'
|
|
2
4
|
|
|
3
|
-
api_key =
|
|
5
|
+
api_key = ''
|
|
4
6
|
|
|
5
7
|
weather = OWMO::Weather.new api_key
|
|
6
8
|
|
|
7
9
|
# Geocode by City ID
|
|
8
|
-
puts weather.get :current, city_id:
|
|
9
|
-
puts weather.get :current, id:
|
|
10
|
+
puts weather.get :current, city_id: 5_328_041
|
|
11
|
+
puts weather.get :current, id: 5_328_041
|
|
10
12
|
|
|
11
13
|
# Geocode by City Name
|
|
12
|
-
puts weather.get :current, city_name:
|
|
13
|
-
puts weather.get :current, q:
|
|
14
|
+
puts weather.get :current, city_name: 'Beverly Hills'
|
|
15
|
+
puts weather.get :current, q: 'Beverly Hills'
|
|
14
16
|
|
|
15
17
|
# Geocode by Zip Code
|
|
16
|
-
puts weather.get :current, zip:
|
|
17
|
-
puts weather.get :current, zip_code:
|
|
18
|
+
puts weather.get :current, zip: 90_210
|
|
19
|
+
puts weather.get :current, zip_code: 90_210
|
|
18
20
|
|
|
19
21
|
# Geocode by Coordinance
|
|
20
22
|
puts weather.get :current, lon: -118.41, lat: 34.09
|
data/examples/query_mode.rb
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'owmo'
|
|
2
4
|
|
|
3
|
-
api_key =
|
|
5
|
+
api_key = ''
|
|
4
6
|
|
|
5
7
|
weather = OWMO::Weather.new api_key
|
|
6
8
|
|
|
7
9
|
# Response in JSON format
|
|
8
|
-
puts weather.get :current, city_name:
|
|
9
|
-
puts weather.get :current, city_name:
|
|
10
|
+
puts weather.get :current, city_name: 'London,UK'
|
|
11
|
+
puts weather.get :current, city_name: 'London,UK', mode: :json
|
|
10
12
|
|
|
11
13
|
# Response in XML format
|
|
12
|
-
puts weather.get :current, city_name:
|
|
14
|
+
puts weather.get :current, city_name: 'London,UK', mode: :xml
|
|
13
15
|
|
|
14
16
|
# Response in HTML format
|
|
15
|
-
puts weather.get :current, city_name:
|
|
17
|
+
puts weather.get :current, city_name: 'London,UK', mode: :html
|
data/examples/query_units.rb
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'owmo'
|
|
2
4
|
|
|
3
|
-
api_key =
|
|
5
|
+
api_key = ''
|
|
4
6
|
|
|
5
7
|
weather = OWMO::Weather.new api_key
|
|
6
8
|
|
|
7
9
|
# Kelvin
|
|
8
|
-
puts weather.get :current, city_name:
|
|
10
|
+
puts weather.get :current, city_name: 'London,UK'
|
|
9
11
|
|
|
10
12
|
# Imperial
|
|
11
|
-
puts weather.get :current, city_name:
|
|
13
|
+
puts weather.get :current, city_name: 'London,UK', units: :imperial
|
|
12
14
|
|
|
13
15
|
# Metric
|
|
14
|
-
puts weather.get :current, city_name:
|
|
16
|
+
puts weather.get :current, city_name: 'London,UK', units: :metric
|
data/examples/sinatra_example.rb
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'owmo'
|
|
2
4
|
require 'sinatra' # Need to install, not included in gemspec
|
|
3
5
|
require 'uri'
|
|
4
6
|
|
|
5
|
-
|
|
6
7
|
get '/current/:name' do
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
api_key = '<API Key>'
|
|
9
|
+
weather = OWMO::Weather.new api_key
|
|
10
|
+
weather.get :current, city_name: params[:name], mode: :html
|
|
10
11
|
end
|
|
@@ -1,56 +1,60 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'json'
|
|
2
4
|
|
|
3
5
|
module CoreExtensions
|
|
4
6
|
module Net
|
|
5
7
|
module HTTPResponse
|
|
6
8
|
module WeatherResponse
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
Returns the weather
|
|
10
|
-
=end
|
|
9
|
+
# rdoc
|
|
10
|
+
# Returns the weather
|
|
11
11
|
def weather
|
|
12
12
|
parse_weather
|
|
13
13
|
@weather
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
Returns the response code
|
|
18
|
-
=end
|
|
16
|
+
# rdoc
|
|
17
|
+
# Returns the response code
|
|
19
18
|
def weather_code
|
|
20
19
|
parse_weather
|
|
21
|
-
return (
|
|
20
|
+
return (weather['cod'] || '200').to_i if weather.is_a? Hash
|
|
21
|
+
|
|
22
22
|
200
|
|
23
23
|
end
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
Returns the response message
|
|
27
|
-
=end
|
|
25
|
+
# rdoc
|
|
26
|
+
# Returns the response message
|
|
28
27
|
def weather_message
|
|
29
28
|
parse_weather
|
|
30
|
-
return
|
|
31
|
-
|
|
29
|
+
return weather['message'] if weather.is_a? Hash
|
|
30
|
+
|
|
31
|
+
'None'
|
|
32
32
|
end
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
Returns boolean if the response contains an error or not.
|
|
36
|
-
|
|
37
|
-
def has_error?
|
|
34
|
+
# rdoc
|
|
35
|
+
# Returns boolean if the response contains an error or not.
|
|
36
|
+
def error?
|
|
38
37
|
weather_code != 200
|
|
39
38
|
end
|
|
40
39
|
|
|
41
|
-
=begin rdoc
|
|
42
|
-
Attempts to parse the body to JSON. This is so we don't have to continually
|
|
43
|
-
parse the raw JSON.
|
|
44
|
-
=end
|
|
45
40
|
private
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
end if @weather.nil?
|
|
41
|
+
|
|
42
|
+
# rdoc
|
|
43
|
+
# Sets the weather variable
|
|
44
|
+
def weather=(weather)
|
|
45
|
+
@weather = weather if @weather.nil?
|
|
52
46
|
end
|
|
53
47
|
|
|
48
|
+
# rdoc
|
|
49
|
+
# Attempts to parse the body to JSON. This is so we don't have to continually
|
|
50
|
+
# parse the raw JSON.
|
|
51
|
+
def parse_weather
|
|
52
|
+
# Try to parse the response and return a hash
|
|
53
|
+
@weather = JSON.parse(body)
|
|
54
|
+
rescue StandardError
|
|
55
|
+
# Return the body string if parsing fails (used for html and xml responses)
|
|
56
|
+
@weather = body
|
|
57
|
+
end
|
|
54
58
|
end
|
|
55
59
|
end
|
|
56
60
|
end
|
data/lib/owmo/version.rb
CHANGED
data/lib/owmo/weather.rb
CHANGED
|
@@ -1,30 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'logger'
|
|
1
4
|
require 'net/http'
|
|
2
|
-
require 'time'
|
|
3
|
-
require 'core_extensions/net/http_response/weather_response'
|
|
4
5
|
|
|
6
|
+
require 'core_extensions/net/http_response/weather_response'
|
|
5
7
|
|
|
6
|
-
|
|
7
|
-
Include some weather response info into Net::HTTPResponse
|
|
8
|
-
=end
|
|
8
|
+
# rdoc
|
|
9
|
+
# Include some weather response info into Net::HTTPResponse
|
|
9
10
|
Net::HTTPResponse.include CoreExtensions::Net::HTTPResponse::WeatherResponse
|
|
10
11
|
|
|
11
|
-
|
|
12
12
|
module OWMO
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
weather
|
|
21
|
-
puts weather.get :current, city_name: "London,uk"
|
|
22
|
-
=end
|
|
13
|
+
# rdoc
|
|
14
|
+
# A weather class for retrieving current and forecasted weather conditions.
|
|
15
|
+
# ==== Attributes
|
|
16
|
+
# * +api_key+ - {OpenWeatherMap.org API key}[http://openweathermap.org/appid]
|
|
17
|
+
# ==== Examples
|
|
18
|
+
# api_key = "<My API Key>"
|
|
19
|
+
# weather = OWMO::Weather.new api_key: api_key
|
|
20
|
+
# puts weather.get :current, city_name: "London,uk"
|
|
23
21
|
class Weather
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
Weather response error to handle errors received from OpenWeatherMap.orgs API
|
|
27
|
-
=end
|
|
22
|
+
# rdoc
|
|
23
|
+
# Weather response error to handle errors received from OpenWeatherMap.orgs API
|
|
28
24
|
class WeatherResponseError < StandardError
|
|
29
25
|
def initialize(response)
|
|
30
26
|
@response = response
|
|
@@ -32,139 +28,104 @@ Weather response error to handle errors received from OpenWeatherMap.orgs API
|
|
|
32
28
|
end
|
|
33
29
|
end
|
|
34
30
|
|
|
35
|
-
|
|
36
|
-
OpenWeatherMap.Org weather API key
|
|
37
|
-
=end
|
|
31
|
+
# rdoc
|
|
32
|
+
# OpenWeatherMap.Org weather API key
|
|
38
33
|
attr_reader :api_key
|
|
39
34
|
|
|
40
|
-
|
|
41
|
-
Access current or forecasted conditions by (required):
|
|
42
|
-
=
|
|
43
|
-
Paths = {
|
|
35
|
+
# rdoc
|
|
36
|
+
# Access current or forecasted conditions by (required):
|
|
37
|
+
PATHS = {
|
|
44
38
|
current: 'weather', # Current weather data
|
|
45
39
|
group: 'group', # Current weather w/multiple IDs
|
|
46
40
|
box: 'box/city', # Current weather w/in a rectangle box
|
|
47
41
|
circle: 'find', # Current weather w/in a circle
|
|
48
42
|
forecast5: 'forecast', # 5 day / 3 hour forecast
|
|
49
43
|
forecast16: 'forecast/daily' # 16 day / daily forecast
|
|
50
|
-
}
|
|
44
|
+
}.freeze
|
|
51
45
|
|
|
52
|
-
|
|
53
|
-
Geocode aliases
|
|
54
|
-
=
|
|
55
|
-
Geocode_Aliases = {
|
|
46
|
+
# rdoc
|
|
47
|
+
# Geocode aliases
|
|
48
|
+
GEOCODE_ALIASES = {
|
|
56
49
|
city_name: :q,
|
|
57
50
|
city_id: :id,
|
|
58
51
|
zip_code: :zip,
|
|
59
52
|
latitude: :lat,
|
|
60
|
-
longitude: :lon
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
*
|
|
68
|
-
|
|
69
|
-
def initialize(api_key, **
|
|
70
|
-
@debug = kwargs[:debug] || FALSE
|
|
71
|
-
log "Debug= #{@debug}"
|
|
72
|
-
|
|
53
|
+
longitude: :lon,
|
|
54
|
+
box: :bbox
|
|
55
|
+
}.freeze
|
|
56
|
+
|
|
57
|
+
# rdoc
|
|
58
|
+
# Either yeild the class, or instanciate it.
|
|
59
|
+
# ==== Attributes
|
|
60
|
+
# * +api_key+ - OpenWEatherMap.Org's weather API key
|
|
61
|
+
# * +**kwargs+ - Any additional paramters
|
|
62
|
+
def initialize(api_key, **_kwargs)
|
|
73
63
|
@api_key = api_key
|
|
74
|
-
log "Api Key= #{@api_key}"
|
|
75
64
|
|
|
76
|
-
|
|
65
|
+
return unless block_given?
|
|
77
66
|
|
|
78
|
-
|
|
79
|
-
log "Yielding"
|
|
80
|
-
yield self
|
|
81
|
-
log "Yield complete."
|
|
82
|
-
end
|
|
67
|
+
yield self
|
|
83
68
|
end
|
|
84
69
|
|
|
85
|
-
|
|
86
|
-
A weather class for retrieving current and forecasted weather conditions.
|
|
87
|
-
==== Attributes
|
|
88
|
-
* +path+ - OWMO::Wether.Path parameter
|
|
89
|
-
* +query+ - Hash of query options (Geocode, response format, units, etc.)
|
|
90
|
-
==== Examples
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
=end
|
|
95
|
-
public
|
|
96
|
-
def get(path, **query)
|
|
97
|
-
log "Starting request= #{path} -> #{query}"
|
|
98
|
-
start = Time.now
|
|
70
|
+
# rdoc
|
|
71
|
+
# A weather class for retrieving current and forecasted weather conditions.
|
|
72
|
+
# ==== Attributes
|
|
73
|
+
# * +path+ - OWMO::Wether.Path parameter
|
|
74
|
+
# * +query+ - Hash of query options (Geocode, response format, units, etc.)
|
|
75
|
+
# ==== Examples
|
|
76
|
+
# api_key = "<My API Key>"
|
|
77
|
+
# weather = OWMO::Weather.new api_key: api_key
|
|
78
|
+
# puts weather.get :current, city_name: "London,uk"
|
|
99
79
|
|
|
80
|
+
def get(path, **query)
|
|
100
81
|
# Format Geocode info
|
|
101
82
|
query = alias_geocodes(query)
|
|
102
83
|
|
|
103
84
|
# Add the api key
|
|
104
|
-
query[:APPID] =
|
|
85
|
+
query[:APPID] = api_key
|
|
105
86
|
|
|
106
87
|
# Create the uri
|
|
107
|
-
uri = format_uri(OWMO::URL,
|
|
88
|
+
uri = format_uri(OWMO::URL, PATHS[path], query)
|
|
108
89
|
|
|
109
90
|
# Get the weather data
|
|
110
|
-
|
|
91
|
+
GET(uri)
|
|
92
|
+
end
|
|
111
93
|
|
|
112
|
-
|
|
113
|
-
log "Request completed in #{elapsed_sec} seconds."
|
|
94
|
+
private
|
|
114
95
|
|
|
115
|
-
|
|
96
|
+
# rdoc
|
|
97
|
+
# Retruns the geocode keys from specified query.
|
|
98
|
+
def query_geocode_keys(**query)
|
|
99
|
+
query.keys & GEOCODE_ALIASES.keys
|
|
116
100
|
end
|
|
117
101
|
|
|
118
|
-
|
|
119
|
-
Aliases some geocode parameters to the correct ones, for example :city_name is
|
|
120
|
-
easier to read than :q
|
|
121
|
-
=end
|
|
122
|
-
private
|
|
102
|
+
# rdoc
|
|
103
|
+
# Aliases some geocode parameters to the correct ones, for example :city_name is
|
|
104
|
+
# easier to read than :q
|
|
123
105
|
def alias_geocodes(**query)
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
(query.keys & Geocode_Aliases.keys).each do |key|
|
|
127
|
-
query[Geocode_Aliases[key]] = query.delete(key)
|
|
106
|
+
query_geocode_keys(query).each do |key|
|
|
107
|
+
query[GEOCODE_ALIASES[key]] = query.delete(key)
|
|
128
108
|
end
|
|
129
|
-
|
|
130
|
-
log "Query after= #{query}"
|
|
131
109
|
query
|
|
132
110
|
end
|
|
133
111
|
|
|
134
|
-
|
|
135
|
-
Formats the url with the given url, path, and query
|
|
136
|
-
=end
|
|
137
|
-
private
|
|
112
|
+
# rdoc
|
|
113
|
+
# Formats the url with the given url, path, and query
|
|
138
114
|
def format_uri(url, path, query)
|
|
139
|
-
|
|
140
|
-
log "URI= #{uri}"
|
|
141
|
-
uri
|
|
115
|
+
URI "#{url}/#{path}?#{URI.encode_www_form(query).gsub('%2C', ',')}"
|
|
142
116
|
end
|
|
143
117
|
|
|
144
|
-
|
|
145
|
-
Sends the GET request to OpenWeatherMap.org
|
|
146
|
-
=end
|
|
147
|
-
private
|
|
118
|
+
# rdoc
|
|
119
|
+
# Sends the GET request to OpenWeatherMap.org
|
|
148
120
|
def GET(uri)
|
|
149
|
-
log "Starting GET request"
|
|
150
121
|
response = Net::HTTP.start(uri.hostname, uri.port) do |http|
|
|
151
122
|
http.request(Net::HTTP::Get.new(uri))
|
|
152
123
|
end
|
|
153
|
-
log "Request returned= #{response.weather_code}: #{response.weather_message}".gsub(/: $/, '')
|
|
154
124
|
|
|
155
125
|
# Check the response
|
|
156
|
-
raise WeatherResponseError
|
|
126
|
+
raise WeatherResponseError, response if response.error?
|
|
157
127
|
|
|
158
128
|
response.weather
|
|
159
129
|
end
|
|
160
|
-
|
|
161
|
-
=begin rdoc
|
|
162
|
-
Simple log method for debugging purposes
|
|
163
|
-
=end
|
|
164
|
-
private
|
|
165
|
-
def log(msg)
|
|
166
|
-
puts "#{DateTime.now} :~> #{msg}" if @debug
|
|
167
|
-
end
|
|
168
|
-
|
|
169
130
|
end
|
|
170
131
|
end
|
data/lib/owmo.rb
CHANGED
|
@@ -1,42 +1,38 @@
|
|
|
1
|
-
|
|
2
|
-
require "owmo/weather"
|
|
1
|
+
# frozen_string_literal: true
|
|
3
2
|
|
|
3
|
+
require 'owmo/version'
|
|
4
|
+
require 'owmo/weather'
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
OMWO = OpenWeatherMap.org client for current and forecasted weather conditions.
|
|
7
|
-
=end
|
|
6
|
+
# rdoc
|
|
7
|
+
# OMWO = OpenWeatherMap.org client for current and forecasted weather conditions.
|
|
8
8
|
module OWMO
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
Openweathermap.org URL
|
|
12
|
-
=end
|
|
9
|
+
# rdoc
|
|
10
|
+
# Openweathermap.org URL
|
|
13
11
|
URL = 'http://api.openweathermap.org/data/2.5'
|
|
14
12
|
|
|
15
|
-
|
|
16
|
-
Yield a weather object for querying weather data
|
|
17
|
-
==== Attributes
|
|
18
|
-
* +api_key:+ - {OpenWeatherMap.org API key}[http://openweathermap.org/appid]
|
|
19
|
-
==== Examples
|
|
20
|
-
* Single request:
|
|
21
|
-
api_key = ''
|
|
22
|
-
OWMO::weather(api_key).get :current, city_name: "London,UK"
|
|
23
|
-
* Muliple requests:
|
|
24
|
-
api_key = ''
|
|
25
|
-
OWMO::weather(api_key) do |weather|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
Weather.new(api_key, params) do |weather|
|
|
13
|
+
# rdoc
|
|
14
|
+
# Yield a weather object for querying weather data
|
|
15
|
+
# ==== Attributes
|
|
16
|
+
# * +api_key:+ - {OpenWeatherMap.org API key}[http://openweathermap.org/appid]
|
|
17
|
+
# ==== Examples
|
|
18
|
+
# * Single request:
|
|
19
|
+
# api_key = ''
|
|
20
|
+
# OWMO::weather(api_key).get :current, city_name: "London,UK"
|
|
21
|
+
# * Muliple requests:
|
|
22
|
+
# api_key = ''
|
|
23
|
+
# OWMO::weather(api_key) do |weather|
|
|
24
|
+
# puts weather.get :current, city_name: "London,UK"
|
|
25
|
+
# puts weather.get :forecast5, city_name: "London,UK"
|
|
26
|
+
# puts weather.get :forecast16, city_name: "London,UK"
|
|
27
|
+
# end
|
|
28
|
+
|
|
29
|
+
def self.weather(api_key, **kwargs)
|
|
30
|
+
OWMO::Weather.new(api_key, **kwargs) do |weather|
|
|
34
31
|
if block_given?
|
|
35
32
|
yield weather
|
|
36
33
|
else
|
|
37
|
-
|
|
34
|
+
weather
|
|
38
35
|
end
|
|
39
36
|
end
|
|
40
37
|
end
|
|
41
|
-
|
|
42
38
|
end
|
data/owmo.gemspec
CHANGED
|
@@ -1,27 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
# coding: utf-8
|
|
2
|
-
|
|
3
|
+
|
|
4
|
+
lib = File.expand_path('lib', __dir__)
|
|
3
5
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
6
|
+
|
|
4
7
|
require 'owmo/version'
|
|
5
8
|
|
|
6
9
|
Gem::Specification.new do |spec|
|
|
7
|
-
spec.name =
|
|
10
|
+
spec.name = 'owmo'
|
|
8
11
|
spec.version = OWMO::VERSION
|
|
9
|
-
spec.authors = [
|
|
10
|
-
spec.email = [
|
|
12
|
+
spec.authors = ['Robb Randall']
|
|
13
|
+
spec.email = ['robb.randall@gmail.com']
|
|
11
14
|
|
|
12
|
-
spec.summary =
|
|
13
|
-
spec.description =
|
|
14
|
-
spec.homepage =
|
|
15
|
-
spec.license =
|
|
15
|
+
spec.summary = 'OpenWeatherMap.org client for current and forecasted weather conditions.'
|
|
16
|
+
spec.description = 'OpenWeatherMap.org client for current and forecasted weather conditions.'
|
|
17
|
+
spec.homepage = 'https://github.com/robb-randall/owmo'
|
|
18
|
+
spec.license = 'MIT'
|
|
16
19
|
|
|
17
20
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
|
18
21
|
f.match(%r{^(test|spec|features)/})
|
|
19
22
|
end
|
|
20
|
-
spec.bindir =
|
|
23
|
+
spec.bindir = 'exe'
|
|
21
24
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
22
|
-
spec.require_paths = [
|
|
25
|
+
spec.require_paths = ['lib']
|
|
23
26
|
|
|
24
|
-
spec.add_development_dependency
|
|
25
|
-
spec.add_development_dependency
|
|
26
|
-
spec.add_development_dependency
|
|
27
|
+
spec.add_development_dependency 'bundler', '~> 2.x'
|
|
28
|
+
spec.add_development_dependency 'rake', '~> 13.x'
|
|
29
|
+
spec.add_development_dependency 'rspec', '~> 3.x'
|
|
27
30
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: owmo
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.0.
|
|
4
|
+
version: 2.0.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
|
-
- Robb
|
|
7
|
+
- Robb Randall
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2022-12-29 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -16,42 +16,42 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version:
|
|
19
|
+
version: 2.x
|
|
20
20
|
type: :development
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version:
|
|
26
|
+
version: 2.x
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: rake
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
31
|
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version:
|
|
33
|
+
version: 13.x
|
|
34
34
|
type: :development
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
38
|
- - "~>"
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
|
-
version:
|
|
40
|
+
version: 13.x
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: rspec
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
45
|
- - "~>"
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version:
|
|
47
|
+
version: 3.x
|
|
48
48
|
type: :development
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
52
|
- - "~>"
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version:
|
|
54
|
+
version: 3.x
|
|
55
55
|
description: OpenWeatherMap.org client for current and forecasted weather conditions.
|
|
56
56
|
email:
|
|
57
57
|
- robb.randall@gmail.com
|
|
@@ -59,6 +59,8 @@ executables: []
|
|
|
59
59
|
extensions: []
|
|
60
60
|
extra_rdoc_files: []
|
|
61
61
|
files:
|
|
62
|
+
- ".github/workflows/ruby-publish-gem.yml"
|
|
63
|
+
- ".github/workflows/ruby.yml"
|
|
62
64
|
- ".gitignore"
|
|
63
65
|
- ".rspec"
|
|
64
66
|
- ".travis.yml"
|
|
@@ -104,8 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
104
106
|
- !ruby/object:Gem::Version
|
|
105
107
|
version: '0'
|
|
106
108
|
requirements: []
|
|
107
|
-
|
|
108
|
-
rubygems_version: 2.4.5.2
|
|
109
|
+
rubygems_version: 3.4.1
|
|
109
110
|
signing_key:
|
|
110
111
|
specification_version: 4
|
|
111
112
|
summary: OpenWeatherMap.org client for current and forecasted weather conditions.
|