owmo 2.1.2 → 2.1.5

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: edf9511c6a44ae70b3f4823aef686e12f5b7f13e530526364a1f6dc9c476b96b
4
- data.tar.gz: 0f10c539d774fc03f682d1c2977c12518f9e028288d9a7584d220e76dd2e55fe
3
+ metadata.gz: 7206b29a014088dd08403d1199d6b410a4d2d2e7dd1087290058d542add26f79
4
+ data.tar.gz: 0115ffba7abd0eca441f6117c2cb20561a09c2556b606af56c1cde829372fe7c
5
5
  SHA512:
6
- metadata.gz: 37250290ebe64c1bee4757b68dcfb79058765ab0c25776e8d556730899098a454ea8afa23fc6f7f5ec06a658789024d5460e8259e5117ba318e727e36838f415
7
- data.tar.gz: 29d07afd68aecc136cbc7a6e4b60c302bd005fb0bd762721edc183c1a7ea40b4df0170c0b9d6c7f40a0228ed102b03e02ee6bfe020cc8ae8ac60318bbfeeb80d
6
+ metadata.gz: 48059ce954439c46e4c19edc050c9b0d8193caf6b9e464726b255f88aa42b5591dc69b6bbd17c227728bf89a16e4c8adfe744ad0891d1f9bd448c6250ceadc01
7
+ data.tar.gz: 73af163549823603d7222ed682367c91baa4dab7276bd2bcd318ede49e435b03c4480abb318e3425cec3a5ace4dd8f5c393a5591622c519a8cc75c8e86a9c5e6
@@ -1,4 +1,4 @@
1
- name: Publish Gem
1
+ name: Publish to Rubygems
2
2
 
3
3
  on:
4
4
  push:
@@ -13,9 +13,9 @@ jobs:
13
13
  steps:
14
14
  - uses: actions/checkout@v3
15
15
 
16
- - name: Release Gem
16
+ - name: Publish to Rubygems
17
17
  if: contains(github.ref, 'refs/tags/v')
18
- uses: cadwallion/publish-rubygems-action@master
18
+ uses: cadwallion/publish-rubygems-action@v1.0.0
19
19
  env:
20
20
  GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
21
21
  RUBYGEMS_API_KEY: ${{secrets.RUBYGEMS_API_KEY}}
@@ -0,0 +1,23 @@
1
+ name: Ruby CI
2
+
3
+ on: [push]
4
+
5
+ jobs:
6
+ test:
7
+
8
+ runs-on: ubuntu-latest
9
+
10
+ strategy:
11
+ matrix:
12
+ ruby-version: ['3.1', '3.0', '2.7']
13
+
14
+ steps:
15
+ - uses: actions/checkout@v3
16
+ - name: Set up Ruby ${{ matrix.ruby-version }}
17
+ uses: ruby/setup-ruby@359bebbc29cbe6c87da6bc9ea3bc930432750108
18
+ with:
19
+ ruby-version: ${{ matrix.ruby-version }}
20
+ - name: Install dependencies
21
+ run: bundle install
22
+ - name: Run tests
23
+ run: bundle exec rake
data/.gitignore CHANGED
@@ -13,6 +13,5 @@
13
13
 
14
14
 
15
15
  *.gem
16
- test.rb
17
- scratch.rb
18
16
  api_key.txt
17
+ coverage
data/.rubocop.yml ADDED
@@ -0,0 +1,7 @@
1
+ require:
2
+ - rubocop-rake
3
+ - rubocop-rspec
4
+
5
+ AllCops:
6
+ NewCops: enable
7
+
data/Gemfile CHANGED
@@ -4,5 +4,12 @@ source 'https://rubygems.org'
4
4
 
5
5
  gemspec
6
6
 
7
+ gem 'rake_tasks', '>= 5.x'
8
+
7
9
  gem 'rspec'
10
+
11
+ gem 'rubocop', require: false
12
+ gem 'rubocop-rake', require: false
13
+ gem 'rubocop-rspec', require: false
14
+
8
15
  gem 'simplecov', require: false, group: :test
data/Rakefile CHANGED
@@ -2,7 +2,12 @@
2
2
 
3
3
  require 'bundler/gem_tasks'
4
4
  require 'rspec/core/rake_task'
5
+ require 'rubocop/rake_task'
5
6
 
6
7
  RSpec::Core::RakeTask.new :spec
7
8
 
8
- task default: :spec
9
+ RuboCop::RakeTask.new(:rubocop) do |task|
10
+ task.requires << 'rubocop-rake'
11
+ end
12
+
13
+ task default: %i[rubocop spec]
data/bin/examples CHANGED
@@ -4,40 +4,73 @@
4
4
  require 'bundler/setup'
5
5
  require 'owmo'
6
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
- ]
7
+ # Read the API key
8
+ api_key_file = 'api_key.txt'
9
+
10
+ unless File.exist? api_key_file
11
+ puts %(
12
+ File `#{api_key_file}` does not exist in the root of the repository.
13
+ Please create the file with your OpenWeatherMap API key and rerun bin/example.
14
+
15
+ # #{api_key_file} << cat '<your api key>'
16
+ )
17
+ exit(1)
18
+ end
19
+
20
+ api_key = File.read(api_key_file).chomp
21
+
22
+ unless api_key.length == 32
23
+ puts %(
24
+ File `#{api_key_file}` does not contain a valid OpenWeatherMap API key.
25
+ Please update the file with a valid key and rerun bin/example.
26
+
27
+ Found: '#{api_key}'
28
+ )
29
+ exit(1)
30
+ end
31
+
32
+ examples = {
33
+ 'current_box' => { path: :box, query: { bbox: [12, 32, 15, 37, 10].join(',') } },
34
+ 'current_circle' => { path: :circle, query: { lat: 55.5, lon: 37.5, cnt: 10 } },
35
+ 'current_group' => { path: :group,
36
+ query: { id: [4_850_751, 4_887_398, 2_643_743, 4_164_138, 5_368_361].join(',') } },
37
+ 'forecast16 by city_name' => { path: :forecast16, query: { city_name: 'London,UK' } },
38
+ 'forecast5 by city_name' => { path: :forecast5, query: { city_name: 'London,UK' } },
39
+ 'current by city_name, (json/imperial/fr)' => { path: :current,
40
+ query: { city_name: 'London,UK', mode: 'json', units: 'imperial',
41
+ lang: 'fr' } },
42
+ 'current by city_id' => { path: :current, query: { city_id: 5_328_041 } },
43
+ 'current by city_name' => { path: :current, query: { city_name: 'Beverly Hills' } },
44
+ 'current by id' => { path: :current, query: { id: 5_328_041 } },
45
+ 'current by lon/lat' => { path: :current, query: { lon: -118.41, lat: 34.09 } },
46
+ 'current by q' => { path: :current, query: { q: 'Beverly Hills' } },
47
+ 'current by zip' => { path: :current, query: { zip: 90_210 } },
48
+ 'current by zip_code' => { path: :current, query: { zip_code: 90_210 } },
49
+ 'current by city_name (html)' => { path: :current, query: { city_name: 'London,UK', mode: :html } },
50
+ 'current by city_name (json)' => { path: :current, query: { city_name: 'London,UK', mode: :json } },
51
+ 'current by city_name (xml)' => { path: :current, query: { city_name: 'London,UK', mode: :xml } },
52
+ 'current by city_name (imperial)' => { path: :current, query: { city_name: 'London,UK', units: :imperial } },
53
+ 'current by city_name (metric)' => { path: :current, query: { city_name: 'London,UK', units: :metric } }
54
+ }
55
+
56
+ execution_output = {}
35
57
 
36
58
  puts "OWMO Version #{OWMO::VERSION}"
37
59
 
38
60
  OWMO.weather(api_key) do |weather|
39
- examples.each do |example|
40
- puts '', '/********************', example[:description], '********************/'
41
- pp weather.get example[:path], **example[:query]
61
+ examples.each do |name, params|
62
+ puts '', '/********************', name, '********************/'
63
+ begin
64
+ pp weather.get params[:path], **params[:query]
65
+ execution_output[name] = 'SUCCESS'
66
+ rescue StandardError => e
67
+ pp e.message
68
+ execution_output[name] = 'FAILURE'
42
69
  end
43
- end
70
+ end
71
+ end
72
+
73
+ puts "\n\nSummary:"
74
+ execution_output.each do |name, outcome|
75
+ puts " - [#{outcome}] #{name.capitalize}"
76
+ end
data/bin/rake ADDED
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'rake' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
12
+
13
+ bundle_binstub = File.expand_path('bundle', __dir__)
14
+
15
+ if File.file?(bundle_binstub)
16
+ if File.read(bundle_binstub, 300).include?('This file was generated by Bundler')
17
+ load(bundle_binstub)
18
+ else
19
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
20
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
21
+ end
22
+ end
23
+
24
+ require 'rubygems'
25
+ require 'bundler/setup'
26
+
27
+ load Gem.bin_path('rake', 'rake')
data/bin/rspec CHANGED
@@ -8,12 +8,12 @@
8
8
  # this file is here to facilitate running it.
9
9
  #
10
10
 
11
- ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
11
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
12
12
 
13
- bundle_binstub = File.expand_path("bundle", __dir__)
13
+ bundle_binstub = File.expand_path('bundle', __dir__)
14
14
 
15
15
  if File.file?(bundle_binstub)
16
- if File.read(bundle_binstub, 300).include?("This file was generated by Bundler")
16
+ if File.read(bundle_binstub, 300).include?('This file was generated by Bundler')
17
17
  load(bundle_binstub)
18
18
  else
19
19
  abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
@@ -21,7 +21,7 @@ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this
21
21
  end
22
22
  end
23
23
 
24
- require "rubygems"
25
- require "bundler/setup"
24
+ require 'rubygems'
25
+ require 'bundler/setup'
26
26
 
27
- load Gem.bin_path("rspec-core", "rspec")
27
+ load Gem.bin_path('rspec-core', 'rspec')
data/bin/rubocop ADDED
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'rubocop' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
12
+
13
+ bundle_binstub = File.expand_path('bundle', __dir__)
14
+
15
+ if File.file?(bundle_binstub)
16
+ if File.read(bundle_binstub, 300).include?('This file was generated by Bundler')
17
+ load(bundle_binstub)
18
+ else
19
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
20
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
21
+ end
22
+ end
23
+
24
+ require 'rubygems'
25
+ require 'bundler/setup'
26
+
27
+ load Gem.bin_path('rubocop', 'rubocop')
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.2'
6
+ VERSION = '2.1.5'
7
7
  end
data/lib/owmo/weather.rb CHANGED
@@ -121,11 +121,9 @@ module OWMO
121
121
  # Sends the GET request to OpenWeatherMap.org
122
122
  # :nocov:
123
123
  def http_get(uri)
124
- response = Net::HTTP.start(uri.hostname, uri.port) do |http|
124
+ Net::HTTP.start(uri.hostname, uri.port) do |http|
125
125
  http.request(Net::HTTP::Get.new(uri))
126
126
  end
127
-
128
- response
129
127
  end
130
128
  end
131
129
  # :nocov:
@@ -3,27 +3,34 @@
3
3
  require 'json'
4
4
 
5
5
  module OWMO
6
+ # Weather response class
7
+ class WeatherResponse
8
+ attr_reader :weather, :code
9
+
10
+ def initialize(http_response)
11
+ # JSON
12
+ @weather = JSON.parse(http_response.body)
13
+ @code = parse_code
14
+ rescue JSON::ParserError, TypeError
15
+ # Assume XML or HTML
16
+ @weather = http_response.body
17
+ @code = weather.length > 10 ? 200 : 500
18
+ end
6
19
 
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
20
+ def error?
21
+ code != 200
22
+ end
22
23
 
23
- def error?
24
- self.code != 200
25
- end
24
+ private
26
25
 
26
+ def parse_code
27
+ if weather.key? 'cod'
28
+ weather['cod'].to_i
29
+ elsif weather.key? 'cnt'
30
+ weather['cnt'].to_i >= 0 ? 200 : 500
31
+ else
32
+ 500
33
+ end
27
34
  end
28
-
29
- end
35
+ end
36
+ end
data/owmo.gemspec CHANGED
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # coding: utf-8
3
2
 
4
3
  lib = File.expand_path('lib', __dir__)
5
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
@@ -24,7 +23,9 @@ Gem::Specification.new do |spec|
24
23
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
25
24
  spec.require_paths = ['lib']
26
25
 
26
+ spec.required_ruby_version = '>= 2.7'
27
27
  spec.add_development_dependency 'bundler', '~> 2.x'
28
28
  spec.add_development_dependency 'rake', '~> 13.x'
29
29
  spec.add_development_dependency 'rspec', '~> 3.x'
30
+ spec.metadata['rubygems_mfa_required'] = 'true'
30
31
  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.2
4
+ version: 2.1.5
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-15 00:00:00.000000000 Z
11
+ date: 2023-01-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -59,10 +59,11 @@ 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
+ - ".github/workflows/rake-release.yml"
63
+ - ".github/workflows/rake.yml"
64
64
  - ".gitignore"
65
65
  - ".rspec"
66
+ - ".rubocop.yml"
66
67
  - ".travis.yml"
67
68
  - CONTRIBUTING.MD
68
69
  - Gemfile
@@ -72,7 +73,9 @@ files:
72
73
  - _config.yml
73
74
  - bin/console
74
75
  - bin/examples
76
+ - bin/rake
75
77
  - bin/rspec
78
+ - bin/rubocop
76
79
  - bin/setup
77
80
  - examples/current.rb
78
81
  - examples/current_box.rb
@@ -93,7 +96,8 @@ files:
93
96
  homepage: https://github.com/robb-randall/owmo
94
97
  licenses:
95
98
  - MIT
96
- metadata: {}
99
+ metadata:
100
+ rubygems_mfa_required: 'true'
97
101
  post_install_message:
98
102
  rdoc_options: []
99
103
  require_paths:
@@ -102,7 +106,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
102
106
  requirements:
103
107
  - - ">="
104
108
  - !ruby/object:Gem::Version
105
- version: '0'
109
+ version: '2.7'
106
110
  required_rubygems_version: !ruby/object:Gem::Requirement
107
111
  requirements:
108
112
  - - ">="
@@ -1,38 +0,0 @@
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