nws-api-alerts 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: b331739dcd09b5ccde46291bca7f0dc820d1ac7be8f2f011344b9392c3c0fc2d
4
+ data.tar.gz: baa5f5f84d7481634a23608b1861ce7dfef43fc782394aa9e83f71b1968751cb
5
+ SHA512:
6
+ metadata.gz: 4d87621dd3ec649385cca092fa7b1ad0fdfa2f15ca35b42340fd318690e27fd39e538710059e243d71a863916f9ec7bed123c4838fdc9436c7016ec63a314b6f
7
+ data.tar.gz: dc62383232da06a465fae3a2deb718e0c2254501444a1c6f228d14d760d1b5096e4b31a436479fc8f2e7e88f441e8932904ab9178185f6f293e4b6df2f613e32
@@ -0,0 +1,11 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+
10
+ # rspec failure tracking
11
+ .rspec_status
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
@@ -0,0 +1,7 @@
1
+ ---
2
+ sudo: false
3
+ language: ruby
4
+ cache: bundler
5
+ rvm:
6
+ - 2.5.1
7
+ before_install: gem install bundler -v 1.17.3
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source "https://rubygems.org"
2
+
3
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
+
5
+ # Specify your gem's dependencies in nws-api-alerts.gemspec
6
+ gemspec
@@ -0,0 +1,58 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ nws-api-alerts (0.1.0)
5
+ activesupport
6
+ httparty
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ activesupport (6.0.0)
12
+ concurrent-ruby (~> 1.0, >= 1.0.2)
13
+ i18n (>= 0.7, < 2)
14
+ minitest (~> 5.1)
15
+ tzinfo (~> 1.1)
16
+ zeitwerk (~> 2.1, >= 2.1.8)
17
+ concurrent-ruby (1.1.5)
18
+ diff-lcs (1.3)
19
+ httparty (0.17.0)
20
+ mime-types (~> 3.0)
21
+ multi_xml (>= 0.5.2)
22
+ i18n (1.6.0)
23
+ concurrent-ruby (~> 1.0)
24
+ mime-types (3.2.2)
25
+ mime-types-data (~> 3.2015)
26
+ mime-types-data (3.2019.0331)
27
+ minitest (5.11.3)
28
+ multi_xml (0.6.0)
29
+ rake (10.5.0)
30
+ rspec (3.8.0)
31
+ rspec-core (~> 3.8.0)
32
+ rspec-expectations (~> 3.8.0)
33
+ rspec-mocks (~> 3.8.0)
34
+ rspec-core (3.8.2)
35
+ rspec-support (~> 3.8.0)
36
+ rspec-expectations (3.8.4)
37
+ diff-lcs (>= 1.2.0, < 2.0)
38
+ rspec-support (~> 3.8.0)
39
+ rspec-mocks (3.8.1)
40
+ diff-lcs (>= 1.2.0, < 2.0)
41
+ rspec-support (~> 3.8.0)
42
+ rspec-support (3.8.2)
43
+ thread_safe (0.3.6)
44
+ tzinfo (1.2.5)
45
+ thread_safe (~> 0.1)
46
+ zeitwerk (2.1.9)
47
+
48
+ PLATFORMS
49
+ ruby
50
+
51
+ DEPENDENCIES
52
+ bundler (~> 1.17)
53
+ nws-api-alerts!
54
+ rake (~> 10.0)
55
+ rspec (~> 3.0)
56
+
57
+ BUNDLED WITH
58
+ 1.17.3
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2019 Steve Lewis
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,105 @@
1
+ # Nws::Api::Alerts
2
+
3
+ This gem provides a wrapper around the [NWS Weather Alerts API](https://www.weather.gov/documentation/services-web-alerts) which provides the ability to fetch and filter weather alert information throughout the United States. While subject to rate-limiting for the sake of abuse prevention, the NWS API is entirely free to use by anyone, which means that this gem will work out of the box without any configuration.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'nws-api-alerts'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install nws-api-alerts
20
+
21
+ ## Usage
22
+
23
+ You can get back a list of every alert currently in force throughout the country with the following code snippet:
24
+
25
+ ```ruby
26
+ client = Nws::Api::Alerts::Client.new
27
+ alerts = client.get_alerts
28
+ ```
29
+
30
+ The plan is to introduce parameters for filtering the list of returned alerts in a forthcoming release. For now, the list returned represents _every_ currently active alert in the country. These alerts are returned inside of an `AlertSet` object.
31
+
32
+ An `AlertSet` implements the `Enumerable` interface, which makes methods such as `each`, `map`, and `select` available on it. It also implements a handful of methods that allow it to behave somewhat like an array. For instance, you can call `first` and `last` on an `AlertSet`, in addition to dereferencing a particular `Alert` by it's index. Here's some examples of the array methods in action:
33
+
34
+ ```ruby
35
+ client = Nws::Api::Alerts::Client.new
36
+ alerts = client.get_alerts
37
+
38
+ first_alert = alerts.first # => Nws::Api::Alerts::Alert
39
+ last_alert = alerts.last # => Nws::Api::Alerts::Alert
40
+
41
+ nth_alert = alerts[2] # => Nws::Api::Alerts::Alert
42
+
43
+ ```
44
+
45
+ Here are some examples of enumerating through an `AlertSet`:
46
+
47
+ ```ruby
48
+ alerts = client.get_alerts
49
+
50
+ nws_ids = alerts.map{|alert| alert.nws_id } # => Array
51
+ expirations = alerts.map(&:expires) # => Array
52
+
53
+ expired = alerts.select{|alert| Time.parse(alert.expires) < Time.now } # => Array
54
+ ```
55
+
56
+ ### Filtering Alerts
57
+
58
+ An `AlertSet` can also be filtered based upon the severity, urgency, or certainty of the Alert, or any combination thereof. You can also choose to filter out Alerts that do not provide geometry data for mapping purposes. Examples of these are below:
59
+
60
+ ```ruby
61
+ alerts = client.get_alerts
62
+
63
+ severe_severity = alerts.severe # => Nws::Api::Alerts::AlertSet
64
+ moderate_severity = alerts.moderate # => Nws::Api::Alerts::AlertSet
65
+
66
+ immediately_urgent = alerts.immediate # => Nws::Api::Alerts::AlertSet
67
+ expected_urgency = alerts.expected # => Nws::Api::Alerts::AlertSet
68
+
69
+ observed_certainty = alerts.observed # => Nws::Api::Alerts::AlertSet
70
+ possible_certainty = alerts.possible # => Nws::Api::Alerts::AlertSet
71
+
72
+ # You can also chain together filters in any order, bearing in mind that filters within a given category are mutually exclusive.
73
+ severe_immediate_observed_alerts = alerts.severe.immediate.observed # => Nws::Api::Alerts::AlertSet
74
+
75
+ ```
76
+ The filters available for each "category": severity, urgency, and certainty, are as follows:
77
+
78
+ * Severity: `severe`, `moderate`, `minor`, `unknown_severity`
79
+ * Urgency: `immediate`, `expected`, `future`, `unknown_urgency`
80
+ * Certainty: `observed`, `possible`, `likely`, `unknown_certainty`
81
+
82
+ To filter the `AlertSet` based upon whether or not geographic map data is available, you can call `with_geography` and `without_geography` respectively.
83
+
84
+ ### Alert Data
85
+
86
+ An `AlertSet` is ultimately a collection of `Alert` objects. An `Alert` instance currently doesn't do much more than store the attributes of a specific weather alert. The attributes/methods available on an `Alert` are as follows:
87
+
88
+ * `nws_id`: The unique identifier for this alert as assigned by the National Weather Service.
89
+ * `onset`: A timestamp referring to the time when the conditions described in the alert first began.
90
+ * `expires`: A timestamp referring to when the alert will no longer be in effect.
91
+ * `message_type`: Mostly used internally, currently will only ever be 'Alert'
92
+ * `severity`: A string describing the "severity" of the Alert, "Severe", "Moderate", "Minor", or "Unknown"
93
+ * `certainty`: A string describing the "certainty" of the Alert, "Observed", "Possible", "Likely", or "Unknown"
94
+ * `urgency`: A string describing the "urgency" of the Alert, "Immediate", "Expected", "Future", or "Unknown"
95
+ * `instruction`: A string describing the conditions of the alert and action recommended by local authorities for proceeding safely.
96
+ * `geometry`: An array of latitude, longitude pairs that describe a polygon over a geographic area. Used for displaying alert information on a map.
97
+
98
+
99
+ ## Contributing
100
+
101
+ Bug reports and pull requests are welcome on GitHub at https://github.com/Lojistic/NwsAlerts-gem.
102
+
103
+ ## License
104
+
105
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "nws/api/alerts"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,12 @@
1
+ require "nws/api/alerts/version"
2
+ require "nws/api/alerts/alert_set"
3
+ require "nws/api/alerts/alert"
4
+ require "nws/api/alerts/client"
5
+
6
+ module Nws
7
+ module Api
8
+ module Alerts
9
+ class Error < StandardError; end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,58 @@
1
+ # The Alert class encapsulates all of the important information for a given weather alert
2
+
3
+
4
+ module Nws
5
+ module Api
6
+ module Alerts
7
+ class Alert
8
+
9
+ attr_reader :nws_id, :onset, :expires, :message_type, :severity, :certainty, :urgency, :instruction, :geometry
10
+
11
+ def self.from_api_response(client, parsed_response, alerts = nil)
12
+ alerts ||= AlertSet.new
13
+ return alerts unless parsed_response['features']
14
+ parsed_response['features'].each do |alert_data|
15
+ alerts << self.new(alert_data)
16
+ end
17
+
18
+ if parsed_response['pagination'] && parsed_response['pagination']['next']
19
+ next_uri = URI.parse(parsed_response['pagination']['next'])
20
+ next_path = next_uri.to_s.gsub("#{next_uri.scheme}://#{next_uri.host}", '')
21
+
22
+ self.from_api_response(client, client.fetch_raw_alerts(path: next_path), alerts)
23
+ end
24
+
25
+ return alerts
26
+ end
27
+
28
+
29
+ def initialize(data)
30
+
31
+ if data['geometry']
32
+ @geometry = data['geometry']['coordinates'].first
33
+ end
34
+
35
+ properties = data['properties']
36
+ @nws_id = properties['id']
37
+ @onset = properties['onset']
38
+ @expires = properties['expires']
39
+ @message_type = properties['messageType']
40
+ @severity = properties['severity']
41
+ @certainty = properties['certainty']
42
+ @urgency = properties['urgency']
43
+ @instruction = properties['instruction']
44
+ end
45
+
46
+ def attributes
47
+ hsh = {}
48
+ # Give back a hash of attributes suitable for persistance to a DB, for instance.
49
+ instance_variables.map(&:to_s).map{|iv| iv.gsub('@', '')}.map{|att| hsh[att.to_sym] = self.send(att.to_sym)}
50
+
51
+ hsh
52
+ end
53
+
54
+
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,117 @@
1
+ # The AlertSet class implements Enumerable, (each, map, select, etc), and
2
+ # provides convenience methods for filtering a collection of Alerts
3
+
4
+ module Nws
5
+ module Api
6
+ module Alerts
7
+ class AlertSet
8
+ include Enumerable
9
+ attr_reader :alerts
10
+
11
+ def initialize(alerts = nil)
12
+ @alerts = alerts.is_a?(Array) ? alerts : []
13
+ end
14
+
15
+ def <<(alert)
16
+ @alerts << alert
17
+ end
18
+
19
+ def each(&block)
20
+ alerts.each(&block)
21
+ self
22
+ end
23
+
24
+ alias length count
25
+ alias size count
26
+
27
+ def [](idx)
28
+ alerts[idx]
29
+ end
30
+
31
+ def first
32
+ alerts.first
33
+ end
34
+
35
+ def last
36
+ alerts.last
37
+ end
38
+
39
+ def severe
40
+ severity_filter_for('Severe')
41
+ end
42
+
43
+ def minor
44
+ severity_filter_for('Minor')
45
+ end
46
+
47
+ def moderate
48
+ severity_filter_for('Moderate')
49
+ end
50
+
51
+ def unknown_severity
52
+ severity_filter_for('Unknown')
53
+ end
54
+
55
+ def past
56
+ urgency_filter_for('Past')
57
+ end
58
+
59
+ def immediate
60
+ urgency_filter_for('Immediate')
61
+ end
62
+
63
+ def expected
64
+ urgency_filter_for('Expected')
65
+ end
66
+
67
+ def future
68
+ urgency_filter_for('Future')
69
+ end
70
+
71
+ def unknown_urgency
72
+ urgency_filter_for('Unknown')
73
+ end
74
+
75
+ def observed
76
+ certainty_filter_for('Observed')
77
+ end
78
+
79
+ def possible
80
+ certainty_filter_for('Possible')
81
+ end
82
+
83
+ def likely
84
+ certainty_filter_for('Likely')
85
+ end
86
+
87
+ def unknown_certainty
88
+ certainty_filter_for('Unknown')
89
+ end
90
+
91
+ def with_geometry
92
+ return self.class.new(self.select{|alert| alert.geometry })
93
+ end
94
+
95
+ def without_geometry
96
+ return self.class.new(self.reject{|alert| alert.geometry })
97
+ end
98
+
99
+ private
100
+
101
+ def severity_filter_for(severity)
102
+ return self.class.new(self.select{|alert| alert.severity == severity })
103
+ end
104
+
105
+ def urgency_filter_for(urgency)
106
+ return self.class.new(self.select{|alert| alert.urgency == urgency })
107
+ end
108
+
109
+ def certainty_filter_for(certainty)
110
+ return self.class.new(self.select{|alert| alert.certainty == certainty })
111
+ end
112
+
113
+ end
114
+ end
115
+ end
116
+ end
117
+
@@ -0,0 +1,35 @@
1
+ require 'httparty'
2
+
3
+ module Nws
4
+ module Api
5
+ module Alerts
6
+ class Client
7
+ include HTTParty
8
+ base_uri "https://api.weather.gov"
9
+
10
+ def get_alerts(message_type: 'alert', status: 'actual', urgency: nil, severity: nil, certainty: nil, limit: nil)
11
+ parsed = fetch_raw_alerts(message_type: message_type,
12
+ status: status,
13
+ urgency: urgency,
14
+ severity: severity,
15
+ certainty: certainty,
16
+ limit: limit)
17
+ alerts = Alert.from_api_response(self, parsed)
18
+
19
+ return alerts
20
+ end
21
+
22
+ def fetch_raw_alerts(message_type: 'alert', status: 'actual', urgency: nil, severity: nil, certainty: nil, limit: nil, path: nil)
23
+ path ||= "/alerts?message_type=#{message_type}&status=#{status}"
24
+ path << "&urgency=#{urgency}" if urgency
25
+ path << "&severity=#{severity}" if severity
26
+ path << "&certainty=#{certainty}" if certainty
27
+ patch << "&limit=#{limit}" if limit
28
+ raw_result = self.class.get(path)
29
+ JSON.parse(raw_result)
30
+ end
31
+
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,7 @@
1
+ module Nws
2
+ module Api
3
+ module Alerts
4
+ VERSION = "0.1.0"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,37 @@
1
+
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "nws/api/alerts/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "nws-api-alerts"
8
+ spec.version = Nws::Api::Alerts::VERSION
9
+ spec.authors = ["Lojistic Dev Team"]
10
+ spec.email = ["dev@lojistic.com"]
11
+
12
+ spec.summary = %q{ Simple wrapper around the NWS Alert API }
13
+
14
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
15
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
16
+ if spec.respond_to?(:metadata)
17
+ else
18
+ raise "RubyGems 2.0 or newer is required to protect against " \
19
+ "public gem pushes."
20
+ end
21
+
22
+ # Specify which files should be added to the gem when it is released.
23
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
24
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
25
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
26
+ end
27
+ spec.bindir = "exe"
28
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
29
+ spec.require_paths = ["lib"]
30
+
31
+ spec.add_dependency "httparty"
32
+ spec.add_dependency "activesupport"
33
+
34
+ spec.add_development_dependency "bundler", "~> 1.17"
35
+ spec.add_development_dependency "rake", "~> 10.0"
36
+ spec.add_development_dependency "rspec", "~> 3.0"
37
+ end
@@ -0,0 +1,8 @@
1
+ require "bundler/setup"
2
+ require "nws/api/alerts"
3
+
4
+ client = Nws::Api::Alerts::Client.new
5
+ alerts = client.get_alerts
6
+
7
+
8
+
metadata ADDED
@@ -0,0 +1,130 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nws-api-alerts
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Lojistic Dev Team
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2019-09-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: httparty
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: activesupport
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.17'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.17'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '10.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '10.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.0'
83
+ description:
84
+ email:
85
+ - dev@lojistic.com
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - ".gitignore"
91
+ - ".rspec"
92
+ - ".travis.yml"
93
+ - Gemfile
94
+ - Gemfile.lock
95
+ - LICENSE.txt
96
+ - README.md
97
+ - Rakefile
98
+ - bin/console
99
+ - bin/setup
100
+ - lib/nws/api/alerts.rb
101
+ - lib/nws/api/alerts/alert.rb
102
+ - lib/nws/api/alerts/alert_set.rb
103
+ - lib/nws/api/alerts/client.rb
104
+ - lib/nws/api/alerts/version.rb
105
+ - nws-api-alerts.gemspec
106
+ - quick-test.rb
107
+ homepage:
108
+ licenses: []
109
+ metadata: {}
110
+ post_install_message:
111
+ rdoc_options: []
112
+ require_paths:
113
+ - lib
114
+ required_ruby_version: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ required_rubygems_version: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ requirements: []
125
+ rubyforge_project:
126
+ rubygems_version: 2.7.6
127
+ signing_key:
128
+ specification_version: 4
129
+ summary: Simple wrapper around the NWS Alert API
130
+ test_files: []