cloud_party 0.1.1.pre.alpha.1 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +1 -1
- data/.rubocop_config.yml +2 -1
- data/.travis.yml +11 -6
- data/README.md +17 -8
- data/Rakefile +1 -1
- data/cloud_party.gemspec +27 -25
- data/lib/cloud_party/context.rb +5 -7
- data/lib/cloud_party/exception.rb +28 -54
- data/lib/cloud_party/exceptions/request_errors/bad_request_error.rb +26 -0
- data/lib/cloud_party/exceptions/request_errors/forbidden_error.rb +26 -0
- data/lib/cloud_party/exceptions/request_errors/method_not_allowed_error.rb +27 -0
- data/lib/cloud_party/exceptions/request_errors/not_found_error.rb +26 -0
- data/lib/cloud_party/exceptions/request_errors/too_many_requests_error.rb +27 -0
- data/lib/cloud_party/exceptions/request_errors/unauthorized_error.rb +26 -0
- data/lib/cloud_party/exceptions/request_errors/unsupported_media_type_error.rb +27 -0
- data/lib/cloud_party/exceptions/request_errors.rb +25 -0
- data/lib/cloud_party/exceptions/un_recognized_endpoint_error.rb +20 -0
- data/lib/cloud_party/exceptions/un_recognized_result_type_error.rb +14 -0
- data/lib/cloud_party/exceptions.rb +42 -1
- data/lib/cloud_party/nodes/accounts.rb +26 -0
- data/lib/cloud_party/nodes/ips.rb +5 -3
- data/lib/cloud_party/nodes/memberships.rb +6 -6
- data/lib/cloud_party/nodes/zones.rb +30 -0
- data/lib/cloud_party/nodes.rb +2 -0
- data/lib/cloud_party/response.rb +17 -3
- data/lib/cloud_party/responses/accounts.rb +148 -0
- data/lib/cloud_party/responses/ips.rb +3 -6
- data/lib/cloud_party/responses/memberships.rb +1 -0
- data/lib/cloud_party/responses/nodes/accounts.rb +3 -0
- data/lib/cloud_party/responses/nodes/zones/account.rb +30 -0
- data/lib/cloud_party/responses/nodes/zones/permissions.rb +33 -0
- data/lib/cloud_party/responses/nodes/zones/plan.rb +25 -0
- data/lib/cloud_party/responses/nodes/zones/plan_pending.rb +27 -0
- data/lib/cloud_party/responses/nodes/zones.rb +6 -0
- data/lib/cloud_party/responses/nodes.rb +7 -2
- data/lib/cloud_party/responses/zones.rb +150 -0
- data/lib/cloud_party/responses.rb +11 -0
- data/lib/cloud_party/version.rb +1 -1
- data/lib/cloud_party.rb +5 -1
- data/sonar-project.properties +9 -0
- metadata +55 -37
- data/lib/cloud_party/exceptions/bad_request_400.rb +0 -24
@@ -4,18 +4,20 @@ require 'cloud_party/context'
|
|
4
4
|
require 'cloud_party/responses'
|
5
5
|
module CloudParty
|
6
6
|
module Nodes
|
7
|
-
class IPs
|
7
|
+
class IPs
|
8
|
+
include CloudParty::Context
|
8
9
|
include HTTParty
|
9
10
|
base_uri 'api.cloudflare.com:443/client/v4'
|
10
11
|
headers 'X-Auth-Email' => cfg.email,
|
11
|
-
'X-Auth-Key'
|
12
|
+
'X-Auth-Key' => cfg.api_key,
|
12
13
|
'Content-Type' => 'application/json',
|
13
|
-
'User-Agent'
|
14
|
+
'User-Agent' => "CloudParty/#{CloudParty::VERSION}"
|
14
15
|
|
15
16
|
def initialize(options = nil)
|
16
17
|
super()
|
17
18
|
@options = options
|
18
19
|
end
|
20
|
+
|
19
21
|
def list
|
20
22
|
CloudParty::Responses::IPs.new(:get, '/ips', self.class.get('/ips'), @options)
|
21
23
|
end
|
@@ -4,13 +4,14 @@ require 'cloud_party/context'
|
|
4
4
|
require 'cloud_party/responses'
|
5
5
|
module CloudParty
|
6
6
|
module Nodes
|
7
|
-
class Memberships
|
7
|
+
class Memberships
|
8
|
+
include CloudParty::Context
|
8
9
|
include HTTParty
|
9
10
|
base_uri 'api.cloudflare.com:443/client/v4'
|
10
11
|
headers 'X-Auth-Email' => cfg.email,
|
11
|
-
'X-Auth-Key'
|
12
|
+
'X-Auth-Key' => cfg.api_key,
|
12
13
|
'Content-Type' => 'application/json',
|
13
|
-
'User-Agent'
|
14
|
+
'User-Agent' => "CloudParty/#{CloudParty::VERSION}"
|
14
15
|
|
15
16
|
def initialize(options)
|
16
17
|
super()
|
@@ -19,9 +20,8 @@ module CloudParty
|
|
19
20
|
|
20
21
|
def list
|
21
22
|
CloudParty::Responses::Memberships.new(:get, '/memberships', self.class.get('/memberships', @options))
|
22
|
-
rescue APIError
|
23
|
-
|
24
|
-
puts e.response
|
23
|
+
rescue APIError
|
24
|
+
raise
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'cloud_party/context'
|
4
|
+
require 'cloud_party/responses'
|
5
|
+
module CloudParty
|
6
|
+
module Nodes
|
7
|
+
class Zones
|
8
|
+
include CloudParty::Context
|
9
|
+
include HTTParty
|
10
|
+
base_uri 'api.cloudflare.com:443/client/v4'
|
11
|
+
headers 'X-Auth-Email' => cfg.email,
|
12
|
+
'X-Auth-Key' => cfg.api_key,
|
13
|
+
'Content-Type' => 'application/json',
|
14
|
+
'User-Agent' => "CloudParty/#{CloudParty::VERSION}"
|
15
|
+
|
16
|
+
def initialize(options = nil)
|
17
|
+
super()
|
18
|
+
@options = options
|
19
|
+
end
|
20
|
+
|
21
|
+
def list
|
22
|
+
CloudParty::Responses::Zones.new(:get, '/zones', self.class.get('/zones'), @options)
|
23
|
+
end
|
24
|
+
|
25
|
+
def get(id)
|
26
|
+
CloudParty::Responses::Zones.new(:get, '/zones/:id', self.class.get("/zones/#{id}"), @options)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/cloud_party/nodes.rb
CHANGED
data/lib/cloud_party/response.rb
CHANGED
@@ -1,11 +1,25 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
3
2
|
module CloudParty
|
3
|
+
|
4
4
|
module Response
|
5
5
|
def self.included(base)
|
6
|
-
|
6
|
+
base.include CloudParty::Responses::ResponseMethods
|
7
|
+
base.attr_reader :body, :parsed_response, :code, :errors, :messages, :results, :result
|
7
8
|
end
|
8
9
|
|
9
|
-
def
|
10
|
+
def filter_by_account(account)
|
11
|
+
# blah
|
12
|
+
end
|
13
|
+
# @param [Result] result_json_object check result type for parsing
|
14
|
+
# @raise [UnRecognizedResultTypeError] when the result type is neither Hash nor Array
|
15
|
+
def check_result_type(result_json_object)
|
16
|
+
if result_json_object.is_a?(Hash)
|
17
|
+
'Hash'
|
18
|
+
elsif result_json_object.is_a?(Array)
|
19
|
+
'Array'
|
20
|
+
else
|
21
|
+
raise UnRecognizedResultTypeError, result_json_object.class
|
22
|
+
end
|
23
|
+
end
|
10
24
|
end
|
11
25
|
end
|
@@ -0,0 +1,148 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'cloud_party/responses/nodes/accounts'
|
4
|
+
module CloudParty
|
5
|
+
module Responses
|
6
|
+
class Accounts
|
7
|
+
include CloudParty::Response
|
8
|
+
def initialize(method_name, endpoint, response)
|
9
|
+
@code = response.code
|
10
|
+
@body = JSON.parse(response.body, symbolize_names: true)
|
11
|
+
@success = @body[:success]
|
12
|
+
unless successful?
|
13
|
+
message = <<~MESSAGE
|
14
|
+
Unable to #{method_name.to_s.upcase} to endpoint:
|
15
|
+
#{endpoint}. Inspect CloudParty::APIError#response
|
16
|
+
for further details
|
17
|
+
MESSAGE
|
18
|
+
raise CloudParty::APIError.new(message, response)
|
19
|
+
end
|
20
|
+
|
21
|
+
@results = []
|
22
|
+
@body[:result].each do |res|
|
23
|
+
@results << CloudParty::Responses::Result.new(res)
|
24
|
+
end
|
25
|
+
@errors = []
|
26
|
+
@body[:errors].each do |err|
|
27
|
+
@errors << CloudParty::Responses::Error.new(err)
|
28
|
+
end
|
29
|
+
@messages = []
|
30
|
+
@body[:messages].each do |msg|
|
31
|
+
@messages << CloudParty::Responses::Message.new(msg)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def successful?
|
36
|
+
@success
|
37
|
+
end
|
38
|
+
alias success successful?
|
39
|
+
attr_reader :messages
|
40
|
+
|
41
|
+
def result
|
42
|
+
@results.first
|
43
|
+
end
|
44
|
+
|
45
|
+
attr_reader :results
|
46
|
+
|
47
|
+
def inspect
|
48
|
+
wanted_methods = %i[errors messages success results result]
|
49
|
+
our_methods = methods.select do |m|
|
50
|
+
wanted_methods.include? m
|
51
|
+
end
|
52
|
+
outputs = []
|
53
|
+
our_methods.each do |m|
|
54
|
+
outputs << "#{m}=#{send(m)}"
|
55
|
+
end
|
56
|
+
"#<Response: #{outputs.join(', ')}>"
|
57
|
+
end
|
58
|
+
|
59
|
+
def to_s
|
60
|
+
inspect
|
61
|
+
end
|
62
|
+
end
|
63
|
+
class Result
|
64
|
+
def initialize(result)
|
65
|
+
@result = result
|
66
|
+
@result.each do |k, v|
|
67
|
+
next if k == :permissions
|
68
|
+
next if k == :account
|
69
|
+
|
70
|
+
instance_variable_set(:"@#{k}", v)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def account
|
75
|
+
CloudParty::Responses::Node::Account.new(@result[:account])
|
76
|
+
end
|
77
|
+
|
78
|
+
def permissions
|
79
|
+
CloudParty::Responses::Node::Permissions.new(@result[:permissions])
|
80
|
+
end
|
81
|
+
|
82
|
+
def status
|
83
|
+
@status
|
84
|
+
end
|
85
|
+
|
86
|
+
def roles
|
87
|
+
@roles
|
88
|
+
end
|
89
|
+
|
90
|
+
def id
|
91
|
+
@id
|
92
|
+
end
|
93
|
+
|
94
|
+
def inspect
|
95
|
+
wanted = %i[permissions account status roles id]
|
96
|
+
outputs = []
|
97
|
+
wanted.each do |m|
|
98
|
+
outputs << "#{m.to_s}=#{send(m)}"
|
99
|
+
end
|
100
|
+
"#<Result #{outputs.join(', ')}>"
|
101
|
+
end
|
102
|
+
|
103
|
+
def to_s
|
104
|
+
inspect
|
105
|
+
end
|
106
|
+
end
|
107
|
+
class Error
|
108
|
+
def initialize(error)
|
109
|
+
@error = error
|
110
|
+
@code = error.fetch(:code, nil)
|
111
|
+
@message = error.fetch(:message, nil)
|
112
|
+
end
|
113
|
+
|
114
|
+
attr_reader :code
|
115
|
+
|
116
|
+
attr_reader :message
|
117
|
+
|
118
|
+
def inspect
|
119
|
+
to_s
|
120
|
+
end
|
121
|
+
|
122
|
+
def to_s
|
123
|
+
wanted_methods = %i[code message]
|
124
|
+
our_methods = methods.select do |m|
|
125
|
+
wanted_methods.include? m
|
126
|
+
end
|
127
|
+
outputs = []
|
128
|
+
our_methods.each do |m|
|
129
|
+
outputs << "#{m}=#{send(m)}"
|
130
|
+
end
|
131
|
+
"#<Error: #{output.join(', ')}>"
|
132
|
+
end
|
133
|
+
end
|
134
|
+
class Message
|
135
|
+
def initialize(message)
|
136
|
+
@message = message
|
137
|
+
end
|
138
|
+
|
139
|
+
def inspect
|
140
|
+
to_s
|
141
|
+
end
|
142
|
+
|
143
|
+
def to_s
|
144
|
+
@messages.join(', ')
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
@@ -5,6 +5,7 @@ module CloudParty
|
|
5
5
|
module Responses
|
6
6
|
#
|
7
7
|
class IPs
|
8
|
+
include CloudParty::Response
|
8
9
|
def initialize(method_name, endpoint, response, options)
|
9
10
|
@code = response.code
|
10
11
|
@body = JSON.parse(response.body, symbolize_names: true)
|
@@ -66,6 +67,7 @@ module CloudParty
|
|
66
67
|
end
|
67
68
|
end
|
68
69
|
class Result
|
70
|
+
attr_reader :ipv4_cidrs, :ipv6_cidrs
|
69
71
|
def initialize(result)
|
70
72
|
@result = result
|
71
73
|
@result.each do |k, v|
|
@@ -73,12 +75,7 @@ module CloudParty
|
|
73
75
|
end
|
74
76
|
end
|
75
77
|
|
76
|
-
|
77
|
-
@ipv4_cidrs
|
78
|
-
end
|
79
|
-
def ipv6_cidrs
|
80
|
-
@ipv6_cidrs
|
81
|
-
end
|
78
|
+
|
82
79
|
|
83
80
|
def inspect
|
84
81
|
wanted = %i[ipv4_cidrs ipv6_cidrs]
|
@@ -4,6 +4,7 @@ require 'cloud_party/responses/nodes/memberships'
|
|
4
4
|
module CloudParty
|
5
5
|
module Responses
|
6
6
|
class Memberships
|
7
|
+
include CloudParty::Response
|
7
8
|
def initialize(method_name, endpoint, response)
|
8
9
|
@code = response.code
|
9
10
|
@body = JSON.parse(response.body, symbolize_names: true)
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module CloudParty
|
4
|
+
module Responses
|
5
|
+
module Node
|
6
|
+
class Account
|
7
|
+
def initialize(account_hsh)
|
8
|
+
@account = account_hsh
|
9
|
+
@name = @account[:name]
|
10
|
+
@id = @account[:id]
|
11
|
+
end
|
12
|
+
|
13
|
+
attr_reader :name
|
14
|
+
attr_reader :id
|
15
|
+
|
16
|
+
def inspect
|
17
|
+
outputs = []
|
18
|
+
%i[id name].each do |var|
|
19
|
+
outputs << "#{var}=#{send(var)}"
|
20
|
+
end
|
21
|
+
"#<Account #{outputs.join(', ')}>"
|
22
|
+
end
|
23
|
+
|
24
|
+
def to_s
|
25
|
+
inspect
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module CloudParty
|
4
|
+
module Responses
|
5
|
+
module Node
|
6
|
+
class Permissions
|
7
|
+
def initialize(array)
|
8
|
+
@perms = {}
|
9
|
+
array.each do |perm|
|
10
|
+
perm_obj = parse_perm(perm)
|
11
|
+
@perms[perm_obj[:perm_name]] ||= []
|
12
|
+
@perms[perm_obj[:perm_name]] << perm_obj[:perm_value]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def parse_perm(perm)
|
17
|
+
pattern = /\#(?<perm_name>.+):(?<perm_value>.+)/
|
18
|
+
pattern.match(perm)
|
19
|
+
end
|
20
|
+
|
21
|
+
attr_reader :perms
|
22
|
+
|
23
|
+
def to_s
|
24
|
+
"#<Permissions: #{perms}>"
|
25
|
+
end
|
26
|
+
|
27
|
+
def inspect
|
28
|
+
to_s
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module CloudParty
|
4
|
+
module Responses
|
5
|
+
module Node
|
6
|
+
class Plan
|
7
|
+
def initialize(hsh)
|
8
|
+
hsh.each do |name, value|
|
9
|
+
instance_variable_set(:"@#{name}", value)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
attr_reader :list
|
14
|
+
|
15
|
+
def to_s
|
16
|
+
"#<Plan: #{list}>"
|
17
|
+
end
|
18
|
+
|
19
|
+
def inspect
|
20
|
+
to_s
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module CloudParty
|
4
|
+
module Responses
|
5
|
+
module Node
|
6
|
+
class PlanPending
|
7
|
+
def initialize(hsh)
|
8
|
+
if hsh.nil?
|
9
|
+
@list = nil
|
10
|
+
else
|
11
|
+
hsh.each do |name, value|
|
12
|
+
instance_variable_set(:"@#{name}", value)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_s
|
18
|
+
"#<PlanPending: #{list}>"
|
19
|
+
end
|
20
|
+
|
21
|
+
def inspect
|
22
|
+
to_s
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -2,9 +2,14 @@
|
|
2
2
|
|
3
3
|
module CloudParty
|
4
4
|
module Responses
|
5
|
+
# Response Node
|
6
|
+
#
|
7
|
+
# This module is to be first ancestor of each node's response objects.
|
8
|
+
#
|
9
|
+
# This being in some way a Permissions class is to be
|
10
|
+
# formed as CloudParty::Responses::Node::Permissions
|
11
|
+
# instead of CloudParty::Responses::ENDPOINT::Permissions
|
5
12
|
module Node
|
6
|
-
autoload :Account, 'cloud_party/responses/nodes/account'
|
7
|
-
autoload :Permissions, 'cloud_party/responses/nodes/permissions'
|
8
13
|
end
|
9
14
|
end
|
10
15
|
end
|
@@ -0,0 +1,150 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'cloud_party/responses/nodes/zones'
|
4
|
+
module CloudParty
|
5
|
+
module Responses
|
6
|
+
include CloudParty::Response
|
7
|
+
# '/zones' endpoint response object
|
8
|
+
class Zones
|
9
|
+
# @raise [CloudParty::APIError] if the library encountered
|
10
|
+
# an error and {#successful?} is false
|
11
|
+
# @raise [CloudParty::UnRecognizedEndpointError] if the library encountered
|
12
|
+
# an unknown endpoint for this class
|
13
|
+
def initialize(method_name, endpoint, response, options)
|
14
|
+
@code = response.code
|
15
|
+
@body = JSON.parse(response.body, symbolize_names: true)
|
16
|
+
@parsed_response = response.parsed_response
|
17
|
+
@success = @body[:success]
|
18
|
+
unless successful?
|
19
|
+
message = <<~MESSAGE
|
20
|
+
Unable to #{method_name.to_s.upcase} to endpoint:
|
21
|
+
#{endpoint}. Inspect CloudParty::APIError#response
|
22
|
+
for further details
|
23
|
+
MESSAGE
|
24
|
+
raise CloudParty::APIError.new(message, response)
|
25
|
+
end
|
26
|
+
@results = []
|
27
|
+
case endpoint
|
28
|
+
when '/zones'
|
29
|
+
|
30
|
+
@body[:result].each do |res|
|
31
|
+
@results << CloudParty::Responses::Result.new(res)
|
32
|
+
end
|
33
|
+
when '/zones/:id'
|
34
|
+
@result = CloudParty::Responses::Result.new(@body[:result])
|
35
|
+
@results << @result
|
36
|
+
else
|
37
|
+
raise UnRecognizedEndpointError.new(endpoint, self.class)
|
38
|
+
end
|
39
|
+
|
40
|
+
@errors = []
|
41
|
+
@body[:errors].each do |err|
|
42
|
+
@errors << CloudParty::Responses::Error.new(err)
|
43
|
+
end
|
44
|
+
@messages = []
|
45
|
+
@body[:messages].each do |msg|
|
46
|
+
@messages << CloudParty::Responses::Message.new(msg)
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
attr_reader :errors
|
51
|
+
attr_reader :messages
|
52
|
+
attr_reader :results
|
53
|
+
def successful?
|
54
|
+
@success
|
55
|
+
end
|
56
|
+
alias success successful?
|
57
|
+
|
58
|
+
|
59
|
+
def result
|
60
|
+
@body[:result]
|
61
|
+
end
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
def inspect
|
66
|
+
wanted_methods = %i[success messages errors results]
|
67
|
+
our_methods = methods.select do |m|
|
68
|
+
wanted_methods.include? m
|
69
|
+
end
|
70
|
+
outputs = []
|
71
|
+
our_methods.sort.each do |m|
|
72
|
+
outputs << "#{m}=#{send(m)}"
|
73
|
+
end
|
74
|
+
"#<Response: #{outputs.join(', ')}>"
|
75
|
+
end
|
76
|
+
|
77
|
+
def to_s
|
78
|
+
inspect
|
79
|
+
end
|
80
|
+
end
|
81
|
+
class Result
|
82
|
+
attr_reader :id, :name, :development_mode, :original_registar, :original_dnshost, :status, :paused, :type, :permissions
|
83
|
+
def initialize(result)
|
84
|
+
@result = result
|
85
|
+
@result.each do |k, v|
|
86
|
+
@plan = CloudParty::Responses::Node::Plan.new(@result.dig(:plan))
|
87
|
+
@plan_pending = CloudParty::Responses::Node::PlanPending.new(@result.dig(:plan_pending))
|
88
|
+
@account = CloudParty::Responses::Node::Account.new(@result.dig(:account))
|
89
|
+
@permissions = CloudParty::Responses::Node::Permissions.new(@result.dig(:permissions))
|
90
|
+
instance_variable_set(:"@#{k}", v) unless %i[plan plan_pending account permissions].include?(k)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
|
95
|
+
|
96
|
+
def inspect
|
97
|
+
wanted = %i[id name development_mode original_registar original_dnshost status paused type permissions]
|
98
|
+
outputs = []
|
99
|
+
wanted.each do |m|
|
100
|
+
outputs << "#{m}=#{send(m)}"
|
101
|
+
end
|
102
|
+
"#<Result #{outputs.join(', ')}>"
|
103
|
+
end
|
104
|
+
|
105
|
+
def to_s
|
106
|
+
inspect
|
107
|
+
end
|
108
|
+
end
|
109
|
+
class Error
|
110
|
+
def initialize(error)
|
111
|
+
@error = error
|
112
|
+
@code = error.fetch(:code, nil)
|
113
|
+
@message = error.fetch(:message, nil)
|
114
|
+
end
|
115
|
+
|
116
|
+
attr_reader :code
|
117
|
+
|
118
|
+
attr_reader :message
|
119
|
+
|
120
|
+
def inspect
|
121
|
+
to_s
|
122
|
+
end
|
123
|
+
|
124
|
+
def to_s
|
125
|
+
wanted_methods = %i[code message]
|
126
|
+
our_methods = methods.select do |m|
|
127
|
+
wanted_methods.include? m
|
128
|
+
end
|
129
|
+
outputs = []
|
130
|
+
our_methods.each do |m|
|
131
|
+
outputs << "#{m}=#{send(m)}"
|
132
|
+
end
|
133
|
+
"#<Error: #{output.join(', ')}>"
|
134
|
+
end
|
135
|
+
end
|
136
|
+
class Message
|
137
|
+
def initialize(message)
|
138
|
+
@message = message
|
139
|
+
end
|
140
|
+
|
141
|
+
def inspect
|
142
|
+
to_s
|
143
|
+
end
|
144
|
+
|
145
|
+
def to_s
|
146
|
+
@messages.join(', ')
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
@@ -1,8 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module CloudParty
|
4
|
+
# base module to have responses from the API be parents of,
|
5
|
+
# all response nodes (read: endpoints) are to have their own autoload line
|
6
|
+
# if an endpoint has numerous uses, like Zones and its dns_records endpoint
|
7
|
+
# a sane class is to be used instead, e.g. .../zones/#!{zone_id}/dns_records ->
|
8
|
+
# {Responses::DnsRecords} or {Responses::Zones_DnsRecords}
|
4
9
|
module Responses
|
5
10
|
autoload :Memberships, 'cloud_party/responses/memberships'
|
6
11
|
autoload :IPs, 'cloud_party/responses/ips'
|
12
|
+
autoload :Zones, 'cloud_party/responses/zones'
|
13
|
+
|
14
|
+
module ResponseMethods
|
15
|
+
|
16
|
+
end
|
7
17
|
end
|
18
|
+
|
8
19
|
end
|
data/lib/cloud_party/version.rb
CHANGED
data/lib/cloud_party.rb
CHANGED
@@ -31,10 +31,14 @@ class String
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
module CloudParty
|
34
|
+
autoload :Errors, 'cloud_party/exceptions'
|
35
|
+
class Connection
|
36
|
+
include CloudParty::Context
|
37
|
+
end
|
34
38
|
def self.simple_connect
|
35
39
|
CloudParty::Simple.new.connect
|
36
40
|
end
|
37
41
|
def self.context_connect
|
38
|
-
|
42
|
+
Connection.new
|
39
43
|
end
|
40
44
|
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
sonar.projectKey=iotaspencer_gem_cloud_party
|
2
|
+
sonar.projectName=Cloud Party
|
3
|
+
sonar.projectVersion=0.0.0
|
4
|
+
sonar.sources=.
|
5
|
+
sonar.host.url=https://sonarcloud.io
|
6
|
+
sonar.links.homepage=https://iotaspencer.me/projects/cloud_party
|
7
|
+
sonar.links.ci=https://travis-ci.org/IotaSpencer/cloud_party
|
8
|
+
sonar.links.scm=https://github.com/ElectroCode-Gems/cloud_party
|
9
|
+
sonar.tests=tests
|