reach-ruby 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +7 -0
  2. data/.dockerignore +1 -0
  3. data/.gitignore +18 -0
  4. data/.rubocop.yml +58 -0
  5. data/.rubocop_todo.yml +193 -0
  6. data/AUTHORS.md +52 -0
  7. data/CHANGES.md +3 -0
  8. data/CODE_OF_CONDUCT.md +73 -0
  9. data/CONTRIBUTING.md +163 -0
  10. data/Dockerfile +9 -0
  11. data/Gemfile +3 -0
  12. data/ISSUE_TEMPLATE.md +30 -0
  13. data/LICENSE +21 -0
  14. data/Makefile +34 -0
  15. data/PULL_REQUEST_TEMPLATE.md +31 -0
  16. data/README.md +237 -0
  17. data/Rakefile +10 -0
  18. data/UPGRADE.md +5 -0
  19. data/VERSIONS.md +35 -0
  20. data/advanced-examples/custom-http-client.md +166 -0
  21. data/examples/examples.rb +23 -0
  22. data/githooks/pre-commit +1 -0
  23. data/lib/rack/reach_webhook_authentication.rb +72 -0
  24. data/lib/reach-ruby/framework/reach_response.rb +19 -0
  25. data/lib/reach-ruby/framework/request.rb +41 -0
  26. data/lib/reach-ruby/framework/response.rb +18 -0
  27. data/lib/reach-ruby/framework/rest/domain.rb +39 -0
  28. data/lib/reach-ruby/framework/rest/error.rb +51 -0
  29. data/lib/reach-ruby/framework/rest/helper.rb +11 -0
  30. data/lib/reach-ruby/framework/rest/page.rb +144 -0
  31. data/lib/reach-ruby/framework/rest/resource.rb +23 -0
  32. data/lib/reach-ruby/framework/rest/version.rb +240 -0
  33. data/lib/reach-ruby/framework/serialize.rb +81 -0
  34. data/lib/reach-ruby/framework/values.rb +9 -0
  35. data/lib/reach-ruby/http/http_client.rb +82 -0
  36. data/lib/reach-ruby/http.rb +5 -0
  37. data/lib/reach-ruby/rest/api/authentix/.openapi-generator/FILES +10 -0
  38. data/lib/reach-ruby/rest/api/authentix/.openapi-generator/VERSION +1 -0
  39. data/lib/reach-ruby/rest/api/authentix/.openapi-generator-ignore +23 -0
  40. data/lib/reach-ruby/rest/api/authentix/authentication_trial_item.rb +418 -0
  41. data/lib/reach-ruby/rest/api/authentix/authentication_trial_stat_item.rb +279 -0
  42. data/lib/reach-ruby/rest/api/authentix/configuration_item/authentication_control_item.rb +214 -0
  43. data/lib/reach-ruby/rest/api/authentix/configuration_item/authentication_item.rb +449 -0
  44. data/lib/reach-ruby/rest/api/authentix/configuration_item.rb +583 -0
  45. data/lib/reach-ruby/rest/api/authentix.rb +72 -0
  46. data/lib/reach-ruby/rest/api/messaging/.openapi-generator/FILES +2 -0
  47. data/lib/reach-ruby/rest/api/messaging/.openapi-generator/VERSION +1 -0
  48. data/lib/reach-ruby/rest/api/messaging/.openapi-generator-ignore +23 -0
  49. data/lib/reach-ruby/rest/api/messaging/messaging_item.rb +582 -0
  50. data/lib/reach-ruby/rest/api/messaging.rb +51 -0
  51. data/lib/reach-ruby/rest/api.rb +50 -0
  52. data/lib/reach-ruby/rest/client.rb +130 -0
  53. data/lib/reach-ruby/rest.rb +13 -0
  54. data/lib/reach-ruby/security/request_validator.rb +149 -0
  55. data/lib/reach-ruby/util/configuration.rb +25 -0
  56. data/lib/reach-ruby/version.rb +3 -0
  57. data/lib/reach-ruby.rb +44 -0
  58. data/reach-ruby.gemspec +38 -0
  59. data/sonar-project.properties +13 -0
  60. metadata +267 -0
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Reach
4
+ module REST
5
+ class Domain
6
+ attr_reader :client
7
+
8
+ def initialize(client)
9
+ @client = client
10
+ @host = nil
11
+ @base_url = nil
12
+ @port = nil
13
+ end
14
+
15
+ def absolute_url(uri)
16
+ "#{@base_url.chomp('/')}/#{uri.chomp('/').gsub(/^\//, '')}"
17
+ end
18
+
19
+ def request(method, uri, params = {}, data = {}, headers = {}, auth = nil, timeout = nil)
20
+ url = uri.match(/^http/) ? uri : absolute_url(uri)
21
+
22
+ baseUrl = URI(@base_url)
23
+ baseHost = "#{baseUrl.scheme}//#{baseUrl.host}"
24
+
25
+ @client.request(
26
+ baseHost,
27
+ @port,
28
+ method,
29
+ url,
30
+ params,
31
+ data,
32
+ headers,
33
+ auth,
34
+ timeout
35
+ )
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Reach
4
+ module REST
5
+ class ReachError < StandardError
6
+ # @deprecated all errors that have a body are now 'Reach::RestError's
7
+ def body
8
+ warn "'Reach::REST::ReachError#body' has been deprecated. No 'ReachError' objects are raised with a body."
9
+ nil
10
+ end
11
+ end
12
+
13
+ class RestError < ReachError
14
+ attr_reader :message, :response, :code, :status_code, :details, :more_info, :error_message
15
+
16
+ def initialize(message, response)
17
+ @status_code = response.status_code
18
+ @code = response.body.fetch('errorCode', @status_code)
19
+ @details = response.body.fetch('errorDetails', nil)
20
+ @error_message = response.body.fetch('errorMessage', nil)
21
+ @more_info = response.body.fetch('more_info', nil)
22
+ @message = format_message(message)
23
+ @response = response
24
+ end
25
+
26
+ # @deprecated use #response instead
27
+ def body
28
+ warn 'This error used to be a "Reach::REST::ReachError" but is now a "Reach::REST::RestError". ' \
29
+ 'Please use #response instead of #body.'
30
+ @response
31
+ end
32
+
33
+ def to_s
34
+ message
35
+ end
36
+
37
+ private
38
+
39
+ def format_message(initial_message)
40
+ message = "[HTTP #{status_code}] #{code} : #{initial_message}"
41
+ message += "\n#{error_message}" if error_message
42
+ message += "\n#{details}" if details
43
+ message += "\n#{more_info}" if more_info
44
+ message + "\n\n"
45
+ end
46
+ end
47
+
48
+ class ObsoleteError < StandardError
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Reach
4
+ module REST
5
+ def url_join(left, right)
6
+ left = left.sub(/\/+$/, '').sub(/^\/+/, '')
7
+ right = right.sub(/\/+$/, '').sub(/^\/+/, '')
8
+ "#{left}/#{right}"
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,144 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Reach
4
+ module REST
5
+ # Page Base Class
6
+ class Page
7
+ include Enumerable
8
+
9
+ META_KEYS = [
10
+ 'page',
11
+ 'pageSize',
12
+ 'totalPages',
13
+ 'outOfPageRange'
14
+ ].freeze
15
+
16
+ def initialize(url, version, response)
17
+ payload = process_response(response)
18
+
19
+ @url = url
20
+ @version = version
21
+ @payload = payload
22
+ @solution = {}
23
+ @records = load_page(payload)
24
+ end
25
+
26
+ def process_response(response)
27
+ if response.status_code != 200
28
+ raise Reach::REST::RestError.new('Unable to fetch page', response)
29
+ end
30
+
31
+ response.body
32
+ end
33
+
34
+ def load_page(payload)
35
+ if payload['meta'] && payload['meta']['key']
36
+ return payload[payload['meta']['key']]
37
+ else
38
+ keys = payload.keys
39
+ key = keys - META_KEYS
40
+ if key.size == 1
41
+ return payload[key.first]
42
+ end
43
+ if key.size == 2
44
+ key1 = key[0]
45
+ key2 = key[1]
46
+ if key1.length > key2.length
47
+ aux = key2
48
+ key2 = key1
49
+ key1 = aux
50
+ end
51
+ val = "total" + key1[0,1].upcase + key1[1..-1]
52
+ if val == key2
53
+ return payload[key1]
54
+ end
55
+ end
56
+ end
57
+
58
+ raise Reach::REST::ReachError, 'Page Records can not be deserialized'
59
+ end
60
+
61
+ def previous_page_url
62
+ page = 0
63
+ if @payload.key?('page')
64
+ page = @payload['page']
65
+ end
66
+ pageSize = 1
67
+ if @payload.key?('pageSize')
68
+ pageSize = @payload['pageSize']
69
+ end
70
+ if page > 0
71
+ query = "pageSize=#{pageSize}&page=#{page-1}"
72
+ uri = URI.parse(@url)
73
+ if (!(uri.query == nil || uri.query.length == 0))
74
+ query = uri.query + "&" + query
75
+ end
76
+ uri.query = query
77
+ return uri.to_s
78
+ end
79
+
80
+ nil
81
+ end
82
+
83
+ def next_page_url
84
+ page = 0
85
+ if @payload.key?('page')
86
+ page = @payload['page']
87
+ end
88
+ pageSize = 1
89
+ if @payload.key?('pageSize')
90
+ pageSize = @payload['pageSize']
91
+ end
92
+ outOfPageRange = true
93
+ if @payload.key?('outOfPageRange')
94
+ outOfPageRange = @payload['outOfPageRange']
95
+ end
96
+ totalPages = 1
97
+ if @payload.key?('totalPages')
98
+ totalPages = @payload['totalPages']
99
+ end
100
+ if !(outOfPageRange || (page + 1 >= totalPages))
101
+ query = "pageSize=#{pageSize}&page=#{page+1}"
102
+ uri = URI.parse(@url)
103
+ if (!(uri.query == nil || uri.query.length == 0))
104
+ query = uri.query + "&" + query
105
+ end
106
+ uri.query = query
107
+ return uri.to_s
108
+ end
109
+
110
+ nil
111
+ end
112
+
113
+ def get_instance(payload)
114
+ raise Reach::REST::ReachError, 'Page.get_instance() must be implemented in the derived class'
115
+ end
116
+
117
+ def previous_page
118
+ return nil unless previous_page_url
119
+
120
+ response = @version.domain.request('GET', previous_page_url)
121
+
122
+ self.class.new(@url, @version, response, @solution)
123
+ end
124
+
125
+ def next_page
126
+ return nil unless next_page_url
127
+
128
+ response = @version.domain.request('GET', next_page_url)
129
+
130
+ self.class.new(@url, @version, response, @solution)
131
+ end
132
+
133
+ def each
134
+ @records.each do |record|
135
+ yield get_instance(record)
136
+ end
137
+ end
138
+
139
+ def to_s
140
+ '#<Page>'
141
+ end
142
+ end
143
+ end
144
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Reach
4
+ module REST
5
+ class ListResource
6
+ def initialize(version)
7
+ @version = version
8
+ end
9
+ end
10
+
11
+ class InstanceContext
12
+ def initialize(version)
13
+ @version = version
14
+ end
15
+ end
16
+
17
+ class InstanceResource
18
+ def initialize(version)
19
+ @version = version
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,240 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Reach
4
+ module REST
5
+ class Version
6
+ attr_accessor :domain
7
+
8
+ class RecordStream
9
+ include Enumerable
10
+
11
+ def initialize(page, limit: nil, page_limit: nil)
12
+ @page = page
13
+ @limit = limit
14
+ @page_limit = page_limit
15
+ end
16
+
17
+ def each
18
+ current_record = 0
19
+ current_page = 1
20
+
21
+ while @page
22
+ @page.each do |record|
23
+ yield record
24
+ current_record += 1
25
+ return nil if @limit && @limit <= current_record
26
+ end
27
+
28
+ return nil if @page_limit && @page_limit <= current_page
29
+
30
+ @page = @page.next_page
31
+ current_page += 1
32
+ end
33
+ end
34
+ end
35
+
36
+ def initialize(domain)
37
+ @domain = domain
38
+ @version = nil
39
+ end
40
+
41
+ def absolute_url(uri)
42
+ @domain.absolute_url(relative_uri(uri))
43
+ end
44
+
45
+ def url_without_pagination_info(url, params = {})
46
+ uri = URI.parse(url)
47
+ clo = params.clone
48
+ clo = clo.delete_if { |_k, v| v.nil? }
49
+ query = clo.map{|k, v| "#{k}=#{v}"}.join("&")
50
+ if (!(uri.query == nil || uri.query.length == 0))
51
+ sep = ""
52
+ if (query.length>0)
53
+ sep = "&"
54
+ end
55
+ query = uri.query + sep + query;
56
+ end
57
+ if (query.length ==0)
58
+ return url
59
+ end
60
+ queryParams = query.split("&")
61
+ idx = 0;
62
+ q = ["page", "pageSize"];
63
+ while (idx < q.length)
64
+ par = q[idx]
65
+ prefix = par + "="
66
+ i = 0
67
+ while (i < queryParams.length)
68
+ if (queryParams[i].start_with?(prefix))
69
+ queryParams.delete_at(i)
70
+ else
71
+ i = i + 1
72
+ end
73
+ end
74
+ idx = idx + 1
75
+ end
76
+ query = ""
77
+ if (queryParams.length > 0)
78
+ query = queryParams.join("&")
79
+ end
80
+ uri.query = query
81
+ return uri.to_s
82
+ end
83
+
84
+ def relative_uri(uri)
85
+ "#{@version.chomp('/').gsub(/^\//, '')}/#{uri.chomp('/').gsub(/^\//, '')}"
86
+ end
87
+
88
+ def request(method, uri, params = {}, data = {}, headers = {}, auth = nil, timeout = nil)
89
+ url = relative_uri(uri)
90
+ params = params.delete_if { |_k, v| v.nil? }
91
+ data = data
92
+ @domain.request(method, url, params, data, headers, auth, timeout)
93
+ end
94
+
95
+ def exception(response, header)
96
+ Reach::REST::RestError.new(header, response)
97
+ end
98
+
99
+ def fetch(method, uri, params: {}, data: {}, headers: {}, auth: nil, timeout: nil)
100
+ response = request(
101
+ method,
102
+ uri,
103
+ params,
104
+ data,
105
+ headers,
106
+ auth,
107
+ timeout
108
+ )
109
+
110
+ # Note that 3XX response codes are allowed for fetches.
111
+ if response.status_code < 200 || response.status_code >= 400
112
+ raise exception(response, 'Unable to fetch record')
113
+ end
114
+
115
+ response.body
116
+ end
117
+
118
+ def update(method, uri, params: {}, data: {}, headers: {}, auth: nil, timeout: nil)
119
+ response = request(
120
+ method,
121
+ uri,
122
+ params,
123
+ data,
124
+ headers,
125
+ auth,
126
+ timeout
127
+ )
128
+
129
+ if response.status_code < 200 || response.status_code >= 300
130
+ raise exception(response, 'Unable to update record')
131
+ end
132
+
133
+ response.body
134
+ end
135
+
136
+ def unschedule(method, uri, params: {}, data: {}, headers: {}, auth: nil, timeout: nil)
137
+ response = request(
138
+ method,
139
+ uri,
140
+ params,
141
+ data,
142
+ headers,
143
+ auth,
144
+ timeout
145
+ )
146
+
147
+ if response.status_code < 200 || response.status_code >= 300
148
+ raise exception(response, 'Unable to unschedule record')
149
+ end
150
+
151
+ response.body
152
+ end
153
+
154
+ def delete(method, uri, params: {}, data: {}, headers: {}, auth: nil, timeout: nil)
155
+ response = request(
156
+ method,
157
+ uri,
158
+ params,
159
+ data,
160
+ headers,
161
+ auth,
162
+ timeout
163
+ )
164
+
165
+ if response.status_code < 200 || response.status_code >= 300
166
+ raise exception(response, 'Unable to delete record')
167
+ end
168
+
169
+ response.status_code == 204
170
+ end
171
+
172
+ def read_limits(limit = nil, page_size = nil)
173
+ unless limit.nil? || page_size
174
+ page_size = limit
175
+ end
176
+
177
+ {
178
+ limit: limit || nil,
179
+ page_size: page_size || nil
180
+ }
181
+ end
182
+
183
+ def page(method, uri, params: {}, data: {}, headers: {}, auth: nil, timeout: nil)
184
+ request(
185
+ method,
186
+ uri,
187
+ params,
188
+ data,
189
+ headers,
190
+ auth,
191
+ timeout
192
+ )
193
+ end
194
+
195
+ def stream(page, limit: nil, page_limit: nil)
196
+ RecordStream.new(page, limit: limit, page_limit: page_limit)
197
+ end
198
+
199
+ def create(method, uri, params: {}, data: {}, headers: {}, auth: nil, timeout: nil)
200
+ response = request(method, uri, params, data, headers, auth, timeout)
201
+
202
+ if response.status_code < 200 || response.status_code >= 300
203
+ raise exception(response, 'Unable to create record')
204
+ end
205
+
206
+ response.body
207
+ end
208
+
209
+ def dispatch(method, uri, params: {}, data: {}, headers: {}, auth: nil, timeout: nil)
210
+ response = request(method, uri, params, data, headers, auth, timeout)
211
+
212
+ if response.status_code < 200 || response.status_code >= 300
213
+ raise exception(response, 'Unable to dispatch record')
214
+ end
215
+
216
+ response.body
217
+ end
218
+
219
+ def start(method, uri, params: {}, data: {}, headers: {}, auth: nil, timeout: nil)
220
+ response = request(method, uri, params, data, headers, auth, timeout)
221
+
222
+ if response.status_code < 200 || response.status_code >= 300
223
+ raise exception(response, 'Unable to start record')
224
+ end
225
+
226
+ response.body
227
+ end
228
+
229
+ def check(method, uri, params: {}, data: {}, headers: {}, auth: nil, timeout: nil)
230
+ response = request(method, uri, params, data, headers, auth, timeout)
231
+
232
+ if response.status_code < 200 || response.status_code >= 300
233
+ raise exception(response, 'Unable to check record')
234
+ end
235
+
236
+ response.body
237
+ end
238
+ end
239
+ end
240
+ end
@@ -0,0 +1,81 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Reach
4
+ def self.serialize_iso8601_date(date)
5
+ if date.eql?(:unset)
6
+ date
7
+ elsif date.is_a?(Date)
8
+ date.iso8601
9
+ elsif date.is_a?(Time)
10
+ date.strftime('%Y-%m-%d')
11
+ elsif date.is_a?(String)
12
+ date
13
+ end
14
+ end
15
+
16
+ def self.serialize_iso8601_datetime(date)
17
+ if date.eql?(:unset)
18
+ date
19
+ elsif date.is_a?(Date)
20
+ Time.new(date.year, date.month, date.day).utc.iso8601
21
+ elsif date.is_a?(Time)
22
+ date.utc.iso8601
23
+ elsif date.is_a?(String)
24
+ date
25
+ end
26
+ end
27
+
28
+ def self.deserialize_rfc2822(date)
29
+ Time.rfc2822(date) unless date.nil?
30
+ end
31
+
32
+ def self.deserialize_iso8601_date(date)
33
+ Date.parse(date) unless date.nil?
34
+ end
35
+
36
+ def self.deserialize_iso8601_datetime(date)
37
+ Time.parse(date) unless date.nil?
38
+ end
39
+
40
+ def self.serialize_object(object)
41
+ if object.is_a?(Hash) || object.is_a?(Array)
42
+ JSON.generate(object)
43
+ else
44
+ object
45
+ end
46
+ end
47
+
48
+ def self.flatten(map, result = {}, previous = [])
49
+ map.each do |key, value|
50
+ if value.is_a? Hash
51
+ self.flatten(value, result, previous + [key])
52
+ else
53
+ result[(previous + [key]).join('.')] = value
54
+ end
55
+ end
56
+
57
+ result
58
+ end
59
+
60
+ def self.prefixed_collapsible_map(map, prefix)
61
+ result = {}
62
+ if map.is_a? Hash
63
+ flattened = self.flatten(map)
64
+ result = {}
65
+ flattened.each do |key, value|
66
+ result[prefix + '.' + key] = value
67
+ end
68
+ end
69
+
70
+ result
71
+ end
72
+
73
+ def self.serialize_list(input_list)
74
+ return input_list unless input_list.is_a? Array
75
+ result = []
76
+ input_list.each do |e|
77
+ result.push yield e
78
+ end
79
+ result
80
+ end
81
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Reach
4
+ class Values
5
+ def self.of(hash)
6
+ hash.delete_if { |_, v| v.eql?(:unset) }
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'faraday'
4
+
5
+ module Reach
6
+ module HTTP
7
+ class Client
8
+ attr_accessor :adapter
9
+ attr_reader :timeout, :last_response, :last_request
10
+
11
+ def initialize(proxy_prot = nil, proxy_addr = nil, proxy_port = nil, proxy_user = nil, proxy_pass = nil,
12
+ ssl_ca_file = nil, timeout: nil)
13
+ @proxy_prot = proxy_prot
14
+ @proxy_path = "#{proxy_addr}:#{proxy_port}" if proxy_addr && proxy_port
15
+ @proxy_auth = "#{proxy_user}:#{proxy_pass}@" if proxy_pass && proxy_user
16
+ @ssl_ca_file = ssl_ca_file
17
+ @timeout = timeout
18
+ @adapter = Faraday.default_adapter
19
+ @configure_connection_blocks = []
20
+ end
21
+
22
+ def configure_connection(&block)
23
+ raise ArgumentError, "#{__method__} must be given a block!" unless block_given?
24
+
25
+ @configure_connection_blocks << block
26
+ nil
27
+ end
28
+
29
+ def _request(request) # rubocop:disable Metrics/MethodLength
30
+ sslVerify = true
31
+ @connection = Faraday.new(url: request.host + ':' + request.port.to_s, ssl: { verify: sslVerify }) do |f|
32
+ f.options.params_encoder = Faraday::FlatParamsEncoder
33
+ f.request :url_encoded
34
+ f.headers = request.headers
35
+ #if Faraday::VERSION.start_with?('2.')
36
+ # f.request(:authorization, :basic, request.auth[0], request.auth[1])
37
+ #else
38
+ # f.request(:basic_auth, request.auth[0], request.auth[1])
39
+ #end
40
+ f.headers["ApiUser"] = request.auth[0]
41
+ f.headers["ApiKey"] = request.auth[1]
42
+ f.proxy = "#{@proxy_prot}://#{@proxy_auth}#{@proxy_path}" if @proxy_prot && @proxy_path
43
+ f.options.open_timeout = request.timeout || @timeout
44
+ f.options.timeout = request.timeout || @timeout
45
+
46
+ @configure_connection_blocks.each { |block| block.call(f) }
47
+ f.adapter @adapter
48
+ end
49
+
50
+ @last_request = request
51
+ @last_response = nil
52
+
53
+ response = send(request)
54
+ if (500..599).include?(response.status)
55
+ object = { message: "Server error (#{response.status})", code: response.status }.to_json
56
+ elsif response.body && !response.body.empty?
57
+ object = response.body
58
+ elsif response.status == 400
59
+ object = { message: 'Bad request', code: 400 }.to_json
60
+ end
61
+
62
+ reach_response = Reach::Response.new(response.status, object, headers: response.headers)
63
+ @last_response = reach_response
64
+
65
+ reach_response
66
+ end
67
+
68
+ def send(request)
69
+ @connection.send(request.method.downcase.to_sym,
70
+ request.url,
71
+ request.method == 'GET' ? request.params : request.data)
72
+ rescue Faraday::Error => e
73
+ raise Reach::REST::ReachError, e
74
+ end
75
+
76
+ def request(host, port, method, url, params = {}, data = {}, headers = {}, auth = nil, timeout = nil)
77
+ request = Reach::Request.new(host, port, method, url, params, data, headers, auth, timeout)
78
+ _request(request)
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ Dir[File.join(__dir__, 'http/**/*.rb')].sort.each do |file|
4
+ require file
5
+ end
@@ -0,0 +1,10 @@
1
+ ../authentix.rb
2
+ ../authentix.rb
3
+ ../authentix.rb
4
+ ../authentix.rb
5
+ ../authentix.rb
6
+ authentication_trial_item.rb
7
+ authentication_trial_stat_item.rb
8
+ configuration_item.rb
9
+ configuration_item/authentication_control_item.rb
10
+ configuration_item/authentication_item.rb