owmo 2.1.0 → 2.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fde6157e383b210aee0eb881e5607997e2de408d9fd63f36cfb33b84f221599f
4
- data.tar.gz: b1e9310c8f042693cc6ff29abebdb6449d111c7281e7605a47fcb6799d0e7bec
3
+ metadata.gz: edf9511c6a44ae70b3f4823aef686e12f5b7f13e530526364a1f6dc9c476b96b
4
+ data.tar.gz: 0f10c539d774fc03f682d1c2977c12518f9e028288d9a7584d220e76dd2e55fe
5
5
  SHA512:
6
- metadata.gz: 92e3df1af5aedba4b8aeeb2724a134e8dfc5ef13d8208420a3ce2a831cf328b51e93b14330c52a9bc725fb834d7eaaa4867ad4ce610472b3f48436d296f0bc10
7
- data.tar.gz: 8418b07518cebc176310097358f933ccd95269df15c099b017f17c60ea0538afd8d450efbc769208774feb1eea16e3844846ccaf17b36d686695afc55990f38f
6
+ metadata.gz: 37250290ebe64c1bee4757b68dcfb79058765ab0c25776e8d556730899098a454ea8afa23fc6f7f5ec06a658789024d5460e8259e5117ba318e727e36838f415
7
+ data.tar.gz: 29d07afd68aecc136cbc7a6e4b60c302bd005fb0bd762721edc183c1a7ea40b4df0170c0b9d6c7f40a0228ed102b03e02ee6bfe020cc8ae8ac60318bbfeeb80d
data/bin/examples ADDED
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'bundler/setup'
5
+ require 'owmo'
6
+
7
+ # Create a file at the root of the repo with your api key and call it api_key.txt
8
+ api_key = File.read('api_key.txt')
9
+
10
+
11
+
12
+ examples = [
13
+ { description: 'current_box', path: :box, query: { bbox: [12, 32, 15, 37, 10].join(',') } },
14
+ { description: 'current_circle', path: :circle, query: { lat: 55.5, lon: 37.5, cnt: 10 } },
15
+ #{ description: 'current_group', path: :group, query: { id: [4_850_751, 4_887_398, 2_643_743, 4_164_138, 5_368_361].join(',') } },
16
+ { description: 'current', path: :current, query: { city_name: 'London,UK' } },
17
+ { description: 'forecast16', path: :forecast16, query: { city_name: 'London,UK' } },
18
+ { description: 'forecast5', path: :forecast5, query: { city_name: 'London,UK' } },
19
+ { description: 'query_all', path: :current, query: { city_name: 'London,UK', mode: 'json', units: 'imperial', lang: 'fr' } },
20
+ { description: 'query_geocode', path: :current, query: { city_id: 5_328_041 } },
21
+ { description: 'query_geocode', path: :current, query: { city_name: 'Beverly Hills' } },
22
+ { description: 'query_geocode', path: :current, query: { id: 5_328_041 } },
23
+ { description: 'query_geocode', path: :current, query: { lon: -118.41, lat: 34.09 } },
24
+ { description: 'query_geocode', path: :current, query: { q: 'Beverly Hills' } },
25
+ { description: 'query_geocode', path: :current, query: { zip: 90_210 } },
26
+ { description: 'query_geocode', path: :current, query: { zip_code: 90_210 } },
27
+ { description: 'query_mode', path: :current, query: { city_name: 'London,UK' } },
28
+ { description: 'query_mode', path: :current, query: { city_name: 'London,UK', mode: :html } },
29
+ { description: 'query_mode', path: :current, query: { city_name: 'London,UK', mode: :json } },
30
+ { description: 'query_mode', path: :current, query: { city_name: 'London,UK', mode: :xml } },
31
+ { description: 'query_units', path: :current, query: { city_name: 'London,UK' } },
32
+ { description: 'query_units', path: :current, query: { city_name: 'London,UK', units: :imperial } },
33
+ { description: 'query_units', path: :current, query: { city_name: 'London,UK', units: :metric } }
34
+ ]
35
+
36
+ puts "OWMO Version #{OWMO::VERSION}"
37
+
38
+ OWMO.weather(api_key) do |weather|
39
+ examples.each do |example|
40
+ puts '', '/********************', example[:description], '********************/'
41
+ pp weather.get example[:path], **example[:query]
42
+ end
43
+ end
data/lib/owmo/version.rb CHANGED
@@ -3,5 +3,5 @@
3
3
  module OWMO
4
4
  # rdoc
5
5
  # Gem Version
6
- VERSION = '2.1.0'
6
+ VERSION = '2.1.2'
7
7
  end
data/lib/owmo/weather.rb CHANGED
@@ -1,9 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'owmo/weather_response'
4
+
5
+ require 'json'
3
6
  require 'logger'
4
7
  require 'net/http'
5
8
 
6
-
7
9
  module OWMO
8
10
  # rdoc
9
11
  # A weather class for retrieving current and forecasted weather conditions.
@@ -17,8 +19,8 @@ module OWMO
17
19
  # rdoc
18
20
  # Weather response error to handle errors received from OpenWeatherMap.orgs API
19
21
  class WeatherResponseError < StandardError
20
- def initialize(response)
21
- super("ERROR #{response[:cod]}: #{response[:message]}")
22
+ def initialize(weather_response)
23
+ super("ERROR #{weather_response.code}: #{weather_response.weather}")
22
24
  end
23
25
  end
24
26
 
@@ -82,11 +84,13 @@ module OWMO
82
84
  uri = format_uri(OWMO::URL, PATHS[path], query)
83
85
 
84
86
  # Get the weather data
85
- weather = http_get(uri)
87
+ http_response = http_get(uri)
88
+
89
+ weather_response = WeatherResponse.new(http_response)
86
90
 
87
- raise WeatherResponseError, weather unless weather.fetch(:cod) == 200
91
+ raise(WeatherResponseError, weather_response) if weather_response.error?
88
92
 
89
- weather
93
+ weather_response.weather
90
94
  end
91
95
 
92
96
  private
@@ -121,7 +125,7 @@ module OWMO
121
125
  http.request(Net::HTTP::Get.new(uri))
122
126
  end
123
127
 
124
- JSON.parse(response.weather)
128
+ response
125
129
  end
126
130
  end
127
131
  # :nocov:
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+
5
+ module OWMO
6
+
7
+ class WeatherResponse
8
+
9
+ attr_reader :weather, :code
10
+
11
+ def initialize http_response
12
+ begin
13
+ # JSON
14
+ @weather = JSON.parse(http_response.body)
15
+ @code = self.weather["cod"].to_i
16
+ rescue JSON::ParserError, TypeError
17
+ # Assume XML or HTML
18
+ @weather = http_response.body
19
+ @code = self.weather.length > 10 ? 200 : 500
20
+ end
21
+ end
22
+
23
+ def error?
24
+ self.code != 200
25
+ end
26
+
27
+ end
28
+
29
+ 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.1.0
4
+ version: 2.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robb Randall
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-01-02 00:00:00.000000000 Z
11
+ date: 2023-01-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -71,6 +71,7 @@ files:
71
71
  - Rakefile
72
72
  - _config.yml
73
73
  - bin/console
74
+ - bin/examples
74
75
  - bin/rspec
75
76
  - bin/setup
76
77
  - examples/current.rb
@@ -84,10 +85,10 @@ files:
84
85
  - examples/query_mode.rb
85
86
  - examples/query_units.rb
86
87
  - examples/sinatra_example.rb
87
- - lib/core_extensions/net/http_response/weather_response.rb
88
88
  - lib/owmo.rb
89
89
  - lib/owmo/version.rb
90
90
  - lib/owmo/weather.rb
91
+ - lib/owmo/weather_response.rb
91
92
  - owmo.gemspec
92
93
  homepage: https://github.com/robb-randall/owmo
93
94
  licenses:
@@ -1,61 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'json'
4
-
5
- module CoreExtensions
6
- module Net
7
- module HTTPResponse
8
- module WeatherResponse
9
- # rdoc
10
- # Returns the weather
11
- def weather
12
- parse_weather
13
- @weather
14
- end
15
-
16
- # rdoc
17
- # Returns the response code
18
- def weather_code
19
- parse_weather
20
- return (weather['cod'] || '200').to_i if weather.is_a? Hash
21
-
22
- 200
23
- end
24
-
25
- # rdoc
26
- # Returns the response message
27
- def weather_message
28
- parse_weather
29
- return weather['message'] if weather.is_a? Hash
30
-
31
- 'None'
32
- end
33
-
34
- # rdoc
35
- # Returns boolean if the response contains an error or not.
36
- def error?
37
- weather_code != 200
38
- end
39
-
40
- private
41
-
42
- # rdoc
43
- # Sets the weather variable
44
- def weather=(weather)
45
- @weather = weather if @weather.nil?
46
- end
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
58
- end
59
- end
60
- end
61
- end