ns-1 0.3.4 → 0.4.1

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: fd79d309501f2a7050ac268294910f89adcd0460b6878c4a2e925871ec03983b
4
- data.tar.gz: a18251a62183147f61fc237ce07098c435ebf60c2fc20a1ef1cbf9b72207bbc6
3
+ metadata.gz: 53d583c0dc699961263edfc90e1acbe5888edc5e5fd45e0eb1c233a85b3311c5
4
+ data.tar.gz: f1b314fe81a07341b3ed732b84bdb0d149ff08e2578f6114032589293d465d13
5
5
  SHA512:
6
- metadata.gz: e951b30fe33df1be2888a6b952c8c20045b3a4960f56ae9cc915f8aa11f45d218025e2f9600330495e3c1995bcf0842d5fa098fe68be73b187a7a52b4f36dba6
7
- data.tar.gz: b1b2b1a6c490da1e1ee40f9e681c22d3434c7840bc1f899b503095289b830b3a4487c2ea9cb743b7756ab63828552ddba8cc14857d98cfe4a4328953606d9612
6
+ metadata.gz: f3026392da94f8fc9a57e954a9d80f5c27cec58a958a59f6866db07ce961af7c454a3ea5578ae8f91f5a8d4bf9ea027c3dbd2bb4754dacf85156f80703cb45dc
7
+ data.tar.gz: a4bfc1757973256ef7e31198bf3b7816c71155bdd4463456acb6edcba2480f99d852a8dbf2772dc3726fe87665a001c4a8da75303dfc497c3d0d85cc3ec2b19b
data/CHANGELOG.md CHANGED
@@ -1,6 +1,15 @@
1
1
  # Changelog
2
2
  All notable changes to this project will be documented in this file.
3
3
 
4
+ ## 0.4.1 - 2019-08-26
5
+ - Added network call for managed/private/dedicated networks lists
6
+
7
+ ## 0.4.0 - 2019-08-17
8
+ - Added NSOne::Transport::RateLimitExceeded exception and get_rates method to add to the NSOne::Response::Base class the rate limit headers to help with exponential backoff
9
+ - Added billataglance and plan methods for account API
10
+ - Added Feeds APIs
11
+ - Seperated API version string from static paths to allow easy to change, versions in the future.
12
+
4
13
  ## 0.3.4 - 2019-08-06
5
14
  - change module name
6
15
 
@@ -10,7 +10,7 @@ module NSOne
10
10
  # @return [NSOne::Response]
11
11
  #
12
12
  def account()
13
- perform_request(HTTP_GET, "/v1/account/settings")
13
+ perform_request(HTTP_GET, "/account/settings")
14
14
  end
15
15
 
16
16
  #
@@ -19,7 +19,15 @@ module NSOne
19
19
  # @return [NSOne::Response]
20
20
  #
21
21
  def account_overage()
22
- perform_request(HTTP_GET, "/v1/account/usagewarnings")
22
+ perform_request(HTTP_GET, "/account/usagewarnings")
23
+ end
24
+
25
+ def plan
26
+ perform_request(HTTP_GET, "/account/plan")
27
+ end
28
+
29
+ def billataglance
30
+ perform_request(HTTP_GET, "/account/billataglance")
23
31
  end
24
32
 
25
33
  end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NSOne
4
+ module API
5
+ module Feeds
6
+
7
+ def source_types()
8
+ types = perform_request(HTTP_GET, "/data/sourcetypes")
9
+ raise NSOne::UnexpectedResponse, "Expected a Hash but responses does not look like a Hash" if ! types.respond_to?(:keys)
10
+ types.keys
11
+ end
12
+
13
+ def data_sources()
14
+ perform_request(HTTP_GET, "/data/sources")
15
+ end
16
+
17
+ def data_source(data_source_id)
18
+ raise NSOne::MissingParameter, "Data Source ID cannot be blank" if blank?(data_source_id)
19
+ perform_request(HTTP_GET, "/data/sources/#{data_source_id}")
20
+ end
21
+
22
+ def create_data_source(params)
23
+ validate_required!(params, :sourcetype, :name, :config)
24
+ perform_request(HTTP_PUT, "/data/sources", params)
25
+ end
26
+
27
+ def feeds(data_source_id)
28
+ raise NSOne::MissingParameter, "Data Source ID cannot be blank" if blank?(data_source_id)
29
+ perform_request(HTTP_GET, "/data/feeds/#{data_source_id}")
30
+ end
31
+
32
+ def create_data_feed(data_source_id, params)
33
+ raise NSOne::MissingParameter, "Data Source ID cannot be blank" if blank?(data_source_id)
34
+ validate_required!(params, :name, :config)
35
+ perform_request(HTTP_PUT, "/data/feeds/#{data_source_id}", params)
36
+ end
37
+
38
+ def delete_data_feed(data_source_id, data_feed_id)
39
+ raise NSOne::MissingParameter, "Data Source ID cannot be blank" if blank?(data_source_id)
40
+ raise NSOne::MissingParameter, "Data Feed ID cannot be blank" if blank?(data_feed_id)
41
+ perform_request(HTTP_DELETE, "/data/feeds/#{data_source_id}/#{data_feed_id}")
42
+ end
43
+
44
+ def modify_feed(data_source_id, params)
45
+ raise NSOne::MissingParameter, "Data Source ID cannot be blank" if blank?(data_source_id)
46
+ perform_request(HTTP_POST, "/feed/#{data_source_id}", params)
47
+ end
48
+
49
+ end
50
+ end
51
+ end
@@ -10,7 +10,7 @@ module NSOne
10
10
  # @return [NSOne::Response]
11
11
  #
12
12
  def jobs()
13
- perform_request(HTTP_GET, "/v1/monitoring/jobs")
13
+ perform_request(HTTP_GET, "/monitoring/jobs")
14
14
  end
15
15
 
16
16
  #
@@ -22,7 +22,7 @@ module NSOne
22
22
  #
23
23
  def job(job_id)
24
24
  raise NSOne::MissingParameter, "job_id cannot be blank" if blank?(job_id)
25
- perform_request(HTTP_GET, "/v1/monitoring/jobs/#{job_id}")
25
+ perform_request(HTTP_GET, "/monitoring/jobs/#{job_id}")
26
26
  end
27
27
 
28
28
  end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NSOne
4
+ module API
5
+ module Networks
6
+
7
+ #
8
+ # Returns a lists of all networks for which you may create zones and records.
9
+ # By default network '0' is always returned as it the NS1 main network.
10
+ # Customers with dedicated/private DNS service can have more.
11
+ #
12
+ # @example Response
13
+ # [
14
+ # {
15
+ # "network_id"=>0,
16
+ # "name"=>"NS1 Managed DNS Network",
17
+ # "label"=>"NSONE"
18
+ # }
19
+ # ]
20
+ #
21
+ # @return [NSOne::Response]
22
+ #
23
+ def networks()
24
+ perform_request(HTTP_GET, "/networks")
25
+ end
26
+
27
+ end
28
+ end
29
+ end
@@ -16,10 +16,9 @@ module NSOne
16
16
  #
17
17
  def record(zone, domain, type)
18
18
  raise NSOne::MissingParameter, "zone cannot be blank" if blank?(zone)
19
- raise NSOne::MissingParameter, "domain cannot be blank" if blank?(domain)
20
19
  raise NSOne::MissingParameter, "type cannot be blank" if blank?(type)
21
20
  normalize_names!(zone, domain)
22
- perform_request(HTTP_GET, "/v1/zones/#{zone}/#{domain}/#{type}")
21
+ perform_request(HTTP_GET, "/zones/#{zone}/#{domain}/#{type}")
23
22
  end
24
23
 
25
24
  #
@@ -99,7 +98,7 @@ module NSOne
99
98
  validate_required!(params, :answers)
100
99
  normalize_names!(zone, domain)
101
100
  params = params.merge(zone: zone, domain: domain, type: type)
102
- perform_request(HTTP_PUT, "/v1/zones/#{zone}/#{domain}/#{type}", params)
101
+ perform_request(HTTP_PUT, "/zones/#{zone}/#{domain}/#{type}", params)
103
102
  end
104
103
 
105
104
  #
@@ -112,7 +111,7 @@ module NSOne
112
111
  raise NSOne::MissingParameter, "domain cannot be blank" if blank?(domain)
113
112
  raise NSOne::MissingParameter, "type cannot be blank" if blank?(type)
114
113
  normalize_names!(zone, domain)
115
- perform_request(HTTP_POST, "/v1/zones/#{zone}/#{domain}/#{type}", params)
114
+ perform_request(HTTP_POST, "/zones/#{zone}/#{domain}/#{type}", params)
116
115
  end
117
116
 
118
117
  #
@@ -129,7 +128,7 @@ module NSOne
129
128
  raise NSOne::MissingParameter, "domain cannot be blank" if blank?(domain)
130
129
  raise NSOne::MissingParameter, "type cannot be blank" if blank?(type)
131
130
  normalize_names!(zone, domain)
132
- perform_request(HTTP_DELETE, "/v1/zones/#{zone}/#{domain}/#{type}")
131
+ perform_request(HTTP_DELETE, "/zones/#{zone}/#{domain}/#{type}")
133
132
  end
134
133
 
135
134
  end
@@ -10,9 +10,10 @@ module NSOne
10
10
  # @return [NSOne::Response]
11
11
  #
12
12
  def qps()
13
- perform_request(HTTP_GET, "/v1/stats/qps")
13
+ perform_request(HTTP_GET, "/stats/qps")
14
14
  end
15
15
 
16
+
16
17
  #
17
18
  # Returns current queries per second (QPS) for a specific zone
18
19
  #
@@ -23,9 +24,10 @@ module NSOne
23
24
  def zone_qps(zone)
24
25
  raise NSOne::MissingParameter, "zone cannot be blank" if blank?(zone)
25
26
  normalize_names!(zone)
26
- perform_request(HTTP_GET, "/v1/stats/qps/#{zone}")
27
+ perform_request(HTTP_GET, "/stats/qps/#{zone}")
27
28
  end
28
29
 
30
+
29
31
  #
30
32
  # Returns current queries per second (QPS) for a specific record
31
33
  #
@@ -40,9 +42,10 @@ module NSOne
40
42
  raise NSOne::MissingParameter, "domain cannot be blank" if blank?(domain)
41
43
  raise NSOne::MissingParameter, "type cannot be blank" if blank?(type)
42
44
  normalize_names!(zone, domain)
43
- perform_request(HTTP_GET, "/v1/stats/qps/#{zone}/#{domain}/#{type}")
45
+ perform_request(HTTP_GET, "/stats/qps/#{zone}/#{domain}/#{type}")
44
46
  end
45
47
 
48
+
46
49
  #
47
50
  # Returns statistics and graphs for the entire account over a given period
48
51
  #
@@ -63,13 +66,15 @@ module NSOne
63
66
  # @return [NSOne::Response]
64
67
  #
65
68
  def usage(params = {})
66
- perform_request(HTTP_GET, "/v1/stats/usage", params)
69
+ perform_request(HTTP_GET, "/stats/usage", params)
67
70
  end
68
71
 
72
+
69
73
  #
70
- # Returns statistics and graphs on `NSOne Network` level (Managed/Dedicated)
74
+ # Returns statistics and graphs for a given zone over a given period
71
75
  #
72
76
  # @param [Hash] params will be used as the request body
77
+ # @param [String] zone NSOne zone name
73
78
  #
74
79
  # @option params [String] :period one of `1h`, `24h`, or `30d`
75
80
  #
@@ -85,15 +90,20 @@ module NSOne
85
90
  #
86
91
  # @return [NSOne::Response]
87
92
  #
88
- def network_usage(params = {})
89
- perform_request(HTTP_GET, "/v1/stats/network/usage", params)
93
+ def zone_usage(zone, params = {})
94
+ raise NSOne::MissingParameter, "zone cannot be blank" if blank?(zone)
95
+ normalize_names!(zone)
96
+ perform_request(HTTP_GET, "/stats/usage/#{zone}", params)
90
97
  end
91
98
 
99
+
92
100
  #
93
- # Returns total usage (Queries) during `:period` per region/Geo-Location. At the moment NSOne API return the following areas:
94
- # Europe, North America, Oceania, Africa, Asia
101
+ # Returns statistics and graphs for a given record over a given period
95
102
  #
96
103
  # @param [Hash] params will be used as the request body
104
+ # @param [String] zone zone name
105
+ # @param [String] domain record name
106
+ # @param [String] type record type (A, CNAME etc)
97
107
  #
98
108
  # @option params [String] :period one of `1h`, `24h`, or `30d`
99
109
  #
@@ -109,15 +119,19 @@ module NSOne
109
119
  #
110
120
  # @return [NSOne::Response]
111
121
  #
112
- def region_usage(params = {})
113
- perform_request(HTTP_GET, "/v1/stats/region/usage", params)
122
+ def record_usage(zone, domain, type, params = {})
123
+ raise NSOne::MissingParameter, "zone cannot be blank" if blank?(zone)
124
+ raise NSOne::MissingParameter, "domain cannot be blank" if blank?(domain)
125
+ raise NSOne::MissingParameter, "type cannot be blank" if blank?(type)
126
+ normalize_names!(zone, domain)
127
+ perform_request(HTTP_GET, "/stats/usage/#{zone}/#{domain}/#{type}", params)
114
128
  end
115
129
 
130
+
116
131
  #
117
- # Returns statistics and graphs for a given zone over a given period
132
+ # Returns statistics and graphs on `NSOne Network` level (Managed/Dedicated)
118
133
  #
119
134
  # @param [Hash] params will be used as the request body
120
- # @param [String] zone NSOne zone name
121
135
  #
122
136
  # @option params [String] :period one of `1h`, `24h`, or `30d`
123
137
  #
@@ -133,19 +147,16 @@ module NSOne
133
147
  #
134
148
  # @return [NSOne::Response]
135
149
  #
136
- def zone_usage(zone, params = {})
137
- raise NSOne::MissingParameter, "zone cannot be blank" if blank?(zone)
138
- normalize_names!(zone)
139
- perform_request(HTTP_GET, "/v1/stats/usage/#{zone}", params)
150
+ def network_usage(params = {})
151
+ perform_request(HTTP_GET, "/stats/network/usage", params)
140
152
  end
141
153
 
154
+
142
155
  #
143
- # Returns statistics and graphs for a given record over a given period
156
+ # Returns total usage (Queries) during `:period` per region/Geo-Location. At the moment NSOne API return the following areas:
157
+ # Europe, North America, Oceania, Africa, Asia
144
158
  #
145
159
  # @param [Hash] params will be used as the request body
146
- # @param [String] zone zone name
147
- # @param [String] domain record name
148
- # @param [String] type record type (A, CNAME etc)
149
160
  #
150
161
  # @option params [String] :period one of `1h`, `24h`, or `30d`
151
162
  #
@@ -161,12 +172,8 @@ module NSOne
161
172
  #
162
173
  # @return [NSOne::Response]
163
174
  #
164
- def record_usage(zone, domain, type, params = {})
165
- raise NSOne::MissingParameter, "zone cannot be blank" if blank?(zone)
166
- raise NSOne::MissingParameter, "domain cannot be blank" if blank?(domain)
167
- raise NSOne::MissingParameter, "type cannot be blank" if blank?(type)
168
- normalize_names!(zone, domain)
169
- perform_request(HTTP_GET, "/v1/stats/usage/#{zone}/#{domain}/#{type}", params)
175
+ def region_usage(params = {})
176
+ perform_request(HTTP_GET, "/stats/region/usage", params)
170
177
  end
171
178
 
172
179
  end
@@ -10,7 +10,7 @@ module NSOne
10
10
  # @return [NSOne::Response]
11
11
  #
12
12
  def zones
13
- perform_request(HTTP_GET, "/v1/zones")
13
+ perform_request(HTTP_GET, "/zones")
14
14
  end
15
15
 
16
16
  #
@@ -22,7 +22,7 @@ module NSOne
22
22
  #
23
23
  def zone(zone)
24
24
  raise NSOne::MissingParameter, "zone cannot be blank" if blank?(zone)
25
- perform_request(HTTP_GET, "/v1/zones/#{zone}")
25
+ perform_request(HTTP_GET, "/zones/#{zone}")
26
26
  end
27
27
 
28
28
  #
@@ -39,7 +39,7 @@ module NSOne
39
39
  def create_zone(zone, params = {})
40
40
  raise NSOne::MissingParameter, "zone cannot be blank" if blank?(zone)
41
41
  params = params.merge(zone: zone)
42
- perform_request(HTTP_PUT, "/v1/zones/#{zone}", params)
42
+ perform_request(HTTP_PUT, "/zones/#{zone}", params)
43
43
  end
44
44
 
45
45
  #
@@ -55,7 +55,7 @@ module NSOne
55
55
  def modify_zone(zone, params = {})
56
56
  raise NSOne::MissingParameter, "zone cannot be blank" if blank?(zone)
57
57
  raise NSOne::MissingParameter, "params hash must contain valid zone settings" if !params.is_a?(Hash) || params.empty?
58
- perform_request(HTTP_POST, "/v1/zones/#{zone}", params)
58
+ perform_request(HTTP_POST, "/zones/#{zone}", params)
59
59
  end
60
60
 
61
61
  #
@@ -67,7 +67,7 @@ module NSOne
67
67
  #
68
68
  def delete_zone(zone)
69
69
  raise NSOne::MissingParameter, "zone cannot be blank" if blank?(zone)
70
- perform_request(HTTP_DELETE, "/v1/zones/#{zone}")
70
+ perform_request(HTTP_DELETE, "/zones/#{zone}")
71
71
  end
72
72
 
73
73
  #
@@ -86,7 +86,7 @@ module NSOne
86
86
  def search(string, params = {})
87
87
  raise NSOne::MissingParameter, "search string cannot be blank" if blank?(string)
88
88
  params = params.merge(q: string)
89
- perform_request(HTTP_GET, "/v1/search", params)
89
+ perform_request(HTTP_GET, "/search", params)
90
90
  end
91
91
 
92
92
  end
data/lib/nsone/api.rb CHANGED
@@ -15,7 +15,9 @@ module NSOne
15
15
  NSOne::API::Records,
16
16
  NSOne::API::Account,
17
17
  NSOne::API::Stats,
18
- NSOne::API::Jobs
18
+ NSOne::API::Jobs,
19
+ NSOne::API::Feeds,
20
+ NSOne::API::Networks
19
21
  end
20
22
 
21
23
  end
data/lib/nsone/client.rb CHANGED
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  require "nsone/api"
4
2
  require "nsone/transport/net_http"
5
3
  require "nsone/error"
@@ -11,9 +9,10 @@ module NSOne
11
9
 
12
10
  BASE_URL = "https://api.nsone.net"
13
11
 
14
- def initialize(api_key, base_url: BASE_URL, logger: nil)
12
+ def initialize(api_key, api_version: "v1", base_url: BASE_URL, logger: nil)
15
13
  @api_key = api_key
16
14
  @base_url = base_url
15
+ @api_version = api_version
17
16
  @logger = logger
18
17
  end
19
18
 
@@ -33,7 +32,10 @@ module NSOne
33
32
  end
34
33
 
35
34
  def transport
36
- @transport ||= NSOne::Transport::NetHttp.new(@base_url, @api_key)
35
+ begin
36
+ @transport ||= NSOne::Transport::NetHttp.new(@base_url, @api_version, @api_key)
37
+ rescue NSOne::Transport::RateLimitExceeded
38
+ end
37
39
  end
38
40
 
39
41
  def blank?(object)
@@ -51,6 +53,7 @@ module NSOne
51
53
  # Helper to support `domain` name with or without the zone name.
52
54
  # e.g. zone: example.com domain: www will generate domain: www.example.com
53
55
  def normalize_names!(zone, domain = "")
56
+ domain.replace(zone) if domain.empty?
54
57
  no_dot!(zone, domain)
55
58
  domain << ".#{zone}" unless domain.empty? || domain.include?(zone)
56
59
  end
@@ -58,7 +61,6 @@ module NSOne
58
61
  # Removes trailing dot from all Strings given
59
62
  def no_dot!(*array)
60
63
  array.map {|a| a.chop! if a[/\.$/] != nil}
61
- array
62
64
  end
63
65
 
64
66
  end
data/lib/nsone/error.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  module NSOne
2
2
  class Error < StandardError; end
3
3
  class MissingParameter < Error; end
4
+ class UnexpectedResponse < Error; end
4
5
  end
@@ -3,10 +3,11 @@ require 'delegate'
3
3
  module NSOne
4
4
  module Response
5
5
  class Base < SimpleDelegator
6
- attr_reader :status
6
+ attr_reader :status, :rates
7
7
 
8
- def initialize(body, status)
8
+ def initialize(body, status, rates)
9
9
  @status = status
10
+ @rates = rates
10
11
  super(body)
11
12
  end
12
13
  end
@@ -10,31 +10,46 @@ require "nsone/response"
10
10
  module NSOne
11
11
  module Transport
12
12
  class NetHttp
13
- def initialize(base_url, api_key)
13
+
14
+
15
+ def initialize(base_url, api_version, api_key)
14
16
  @base_url = base_url
17
+ @api_version = api_version
15
18
  @api_key = api_key
16
19
  end
17
20
 
18
21
  def request(method, path, body = nil)
19
- uri = URI.join(@base_url, path)
22
+ uri = URI.join(@base_url, "#{@api_version}#{path}")
20
23
  Net::HTTP.start(uri.host, uri.port, opts(uri)) do |http|
21
24
  response = http.send_request(method, uri, body, headers(body))
22
- process_response(response)
25
+ process_response(response, get_rates(response))
23
26
  end
24
27
  end
25
28
 
26
29
  private
27
30
 
28
- def process_response(response)
31
+ def process_response(response, rates = {})
29
32
  body = JSON.parse(response.body)
30
33
  case response
34
+ when Net::HTTPTooManyRequests
35
+ raise NSOne::Transport::RateLimitExceeded, "#{response}, #{body}"
31
36
  when Net::HTTPOK
32
- NSOne::Response::Success.new(body, response.code.to_i)
37
+ NSOne::Response::Success.new(body, response.code.to_i, rates)
33
38
  else
34
- NSOne::Response::Error.new(body, response.code.to_i)
39
+ NSOne::Response::Error.new(body, response.code.to_i, rates)
40
+ end
41
+ rescue JSON::ParserError => e
42
+ raise NSOne::Transport::ResponseParseError, "#{response.code_type} #{response.code} error: #{e}"
43
+ end
44
+
45
+ def get_rates(response)
46
+ Hash.new.tap do | h |
47
+ h[:by] = response["x-ratelimit-by"] if response["x-ratelimit-by"]
48
+ h[:remaining] = response["x-ratelimit-remaining"] if response["x-ratelimit-remaining"]
49
+ h[:limit] = response["x-ratelimit-limit"].to_i if response["x-ratelimit-limit"]
50
+ h[:period] = response["x-ratelimit-period"].to_i if response["x-ratelimit-period"]
51
+ h[:rate] = (h[:limit] / h[:period]).to_f if h[:limit] && h[:period]
35
52
  end
36
- rescue JSON::ParserError
37
- raise NSOne::Transport::ResponseParseError
38
53
  end
39
54
 
40
55
  def opts(uri)
@@ -54,6 +69,7 @@ module NSOne
54
69
  def default_headers
55
70
  { "X-NSONE-Key" => @api_key }
56
71
  end
72
+
57
73
  end
58
74
  end
59
- end
75
+ end
@@ -4,5 +4,6 @@ module NSOne
4
4
  module Transport
5
5
  class Error < StandardError; end
6
6
  class ResponseParseError < Error; end
7
+ class RateLimitExceeded < Error; end
7
8
  end
8
9
  end
data/lib/nsone/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module NSOne
2
- VERSION = "0.3.4"
2
+ VERSION = "0.4.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ns-1
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esteban Pastorino
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-08-06 00:00:00.000000000 Z
11
+ date: 2019-08-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -86,7 +86,9 @@ files:
86
86
  - lib/nsone.rb
87
87
  - lib/nsone/api.rb
88
88
  - lib/nsone/api/account.rb
89
+ - lib/nsone/api/feeds.rb
89
90
  - lib/nsone/api/jobs.rb
91
+ - lib/nsone/api/networks.rb
90
92
  - lib/nsone/api/records.rb
91
93
  - lib/nsone/api/stats.rb
92
94
  - lib/nsone/api/zones.rb