nws-api-alerts 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +11 -0
- data/.rspec +3 -0
- data/.travis.yml +7 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +58 -0
- data/LICENSE.txt +21 -0
- data/README.md +105 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/nws/api/alerts.rb +12 -0
- data/lib/nws/api/alerts/alert.rb +58 -0
- data/lib/nws/api/alerts/alert_set.rb +117 -0
- data/lib/nws/api/alerts/client.rb +35 -0
- data/lib/nws/api/alerts/version.rb +7 -0
- data/nws-api-alerts.gemspec +37 -0
- data/quick-test.rb +8 -0
- metadata +130 -0
checksums.yaml
ADDED
@@ -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
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -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
|
data/LICENSE.txt
ADDED
@@ -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.
|
data/README.md
ADDED
@@ -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).
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -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__)
|
data/bin/setup
ADDED
@@ -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,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
|
data/quick-test.rb
ADDED
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: []
|