nps_sdk 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/nps/api_exception.rb +40 -0
- data/lib/nps/configuration.rb +1 -0
- data/lib/nps/environments.rb +36 -4
- data/lib/nps/nps_formatter.rb +1 -1
- data/lib/nps/soap_client.rb +96 -16
- data/lib/nps/utils.rb +2 -0
- data/lib/nps/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 91bef4b7f40520eb77e2e6a0da83b4bced5c1553c2e39b078d0ef9588e20122e
|
4
|
+
data.tar.gz: 28ea5d36c97e0e452ff428eee01f3134d62e6478a89adb16233bd3cb26ca307c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7ff32579588daa0f8fa0dc2fc2ed214d9867356cd922338236d223d22516d733b45346cde0c59d99adf309823b69a829d0ab9ba666cd2991cdbec2d808748856
|
7
|
+
data.tar.gz: b0b0a774e27e9d059a8720f89251e0254325aa4abbdccd319790a4fda82587825d4c901f6f72f49b9ed0c07d920972808613f8e6fb7b40bbc3967735babaaee1
|
data/lib/nps/api_exception.rb
CHANGED
@@ -8,4 +8,44 @@ class LoggerException < StandardError
|
|
8
8
|
def message
|
9
9
|
"DEBUG level is now allowed in PRODUCTION ENVIRONMENT"
|
10
10
|
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class EmptyCustomUrlsException < StandardError
|
14
|
+
def message
|
15
|
+
"CustomUrls cannot by empty"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
class InvalidUrlException < StandardError
|
20
|
+
def message
|
21
|
+
"Invalid URL"
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.error_message_with_url (url)
|
25
|
+
"Invalid URL - #{url}"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class WrongConfigurationException < StandardError
|
30
|
+
def message
|
31
|
+
"Only CUSTOM_ENV environment is available with CustomUrls"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
class MissingEnvironmentException < StandardError
|
36
|
+
def message
|
37
|
+
"Environment field not specified"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
class MaxCustomUrlsException < StandardError
|
42
|
+
def message
|
43
|
+
"Custom Urls must contain at most 2 urls"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
class EmptyCustomUrlsWithCustomEnvException < StandardError
|
48
|
+
def message
|
49
|
+
"CustomEnvUrls cannot be empty using CUSTOM_ENV environment"
|
50
|
+
end
|
11
51
|
end
|
data/lib/nps/configuration.rb
CHANGED
data/lib/nps/environments.rb
CHANGED
@@ -1,8 +1,40 @@
|
|
1
1
|
module Nps
|
2
2
|
class Environments
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
DEVELOPMENT_ENV =
|
3
|
+
PRODUCTION_ENV = 0
|
4
|
+
SANDBOX_ENV = 1
|
5
|
+
STAGING_ENV = 2
|
6
|
+
DEVELOPMENT_ENV = 3
|
7
|
+
CUSTOM_ENV = 4
|
8
|
+
|
9
|
+
SANDBOX_WSDL = "sandbox.wsdl"
|
10
|
+
STAGING_WSDL = "staging.wsdl"
|
11
|
+
PRODUCTION_WSDL = "production.wsdl"
|
12
|
+
DEVELOPMENT_WSDL = "development.wsdl"
|
13
|
+
CUSTOM_WSDL = "production.wsdl"
|
14
|
+
|
15
|
+
private_constant :SANDBOX_WSDL
|
16
|
+
private_constant :STAGING_WSDL
|
17
|
+
private_constant :PRODUCTION_WSDL
|
18
|
+
private_constant :DEVELOPMENT_WSDL
|
19
|
+
private_constant :CUSTOM_WSDL
|
20
|
+
|
21
|
+
def self.get_wsdl (environment)
|
22
|
+
begin
|
23
|
+
if environment < 0
|
24
|
+
raise "Invalid environment"
|
25
|
+
end
|
26
|
+
environments = [
|
27
|
+
PRODUCTION_WSDL,
|
28
|
+
STAGING_WSDL,
|
29
|
+
SANDBOX_WSDL,
|
30
|
+
DEVELOPMENT_WSDL,
|
31
|
+
CUSTOM_WSDL
|
32
|
+
]
|
33
|
+
return environments[environment]
|
34
|
+
rescue
|
35
|
+
raise "Environment not found"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
7
39
|
end
|
8
40
|
end
|
data/lib/nps/nps_formatter.rb
CHANGED
data/lib/nps/soap_client.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'certifi'
|
2
2
|
require_relative 'services'
|
3
|
+
require_relative 'environments'
|
4
|
+
require_relative 'utils'
|
3
5
|
module Nps
|
4
6
|
class SoapClient
|
5
7
|
|
@@ -13,12 +15,48 @@ module Nps
|
|
13
15
|
end
|
14
16
|
if conf.log_level == Logger::DEBUG and conf.environment == Nps::Environments::PRODUCTION_ENV
|
15
17
|
raise LoggerException
|
16
|
-
end
|
18
|
+
end
|
19
|
+
|
20
|
+
if conf.environment.nil?
|
21
|
+
raise MissingEnvironmentException
|
22
|
+
end
|
23
|
+
|
24
|
+
if conf.environment == Nps::Environments::CUSTOM_ENV and conf.custom_env_urls.nil?
|
25
|
+
raise EmptyCustomUrlsWithCustomEnvException
|
26
|
+
end
|
27
|
+
|
28
|
+
if conf.custom_env_urls
|
29
|
+
if conf.environment != Nps::Environments::CUSTOM_ENV
|
30
|
+
raise WrongConfigurationException
|
31
|
+
end
|
32
|
+
|
33
|
+
if conf.custom_env_urls.length > Nps::Utils::MAX_CUSTOM_URLS
|
34
|
+
raise MaxCustomUrlsException
|
35
|
+
end
|
36
|
+
|
37
|
+
if conf.custom_env_urls.kind_of?(Array) and conf.custom_env_urls.empty?
|
38
|
+
raise EmptyCustomUrlsException
|
39
|
+
end
|
40
|
+
|
41
|
+
conf.custom_env_urls.each do |url|
|
42
|
+
# if url =~ /\A#{URI::regexp}\z/
|
43
|
+
# raise InvalidUrlException.error_message_with_url url
|
44
|
+
# end
|
45
|
+
|
46
|
+
unless url_valid? url
|
47
|
+
raise InvalidUrlException.error_message_with_url url
|
48
|
+
end
|
49
|
+
|
50
|
+
# unless valid_url_1? url
|
51
|
+
# raise InvalidUrlException.error_message_with_url url
|
52
|
+
# end
|
53
|
+
end
|
54
|
+
end
|
17
55
|
|
18
56
|
@key = conf.key
|
19
57
|
@log = true
|
20
58
|
@logger = conf.logger
|
21
|
-
@wsdl = conf.environment
|
59
|
+
@wsdl = Nps::Environments::get_wsdl(conf.environment)
|
22
60
|
@open_timeout = conf.o_timeout.nil? ? 5 : conf.o_timeout
|
23
61
|
@read_timeout = conf.r_timeout.nil? ? 60 : conf.r_timeout
|
24
62
|
@verify_ssl = conf.verify_ssl.nil? ? true : conf.verify_ssl
|
@@ -27,15 +65,28 @@ module Nps
|
|
27
65
|
@proxy = conf.proxy_url ? conf.proxy_url : nil
|
28
66
|
@proxy_username = conf.proxy_username ? @proxy_username : nil
|
29
67
|
@proxy_password = conf.proxy_password ? @proxy_password : nil
|
68
|
+
@custom_env_urls = conf.custom_env_urls ? conf.custom_env_urls : nil
|
30
69
|
|
31
70
|
setup
|
32
71
|
end
|
33
72
|
|
73
|
+
def url_valid?(url)
|
74
|
+
url = URI.parse(url) rescue false
|
75
|
+
url.kind_of?(URI::HTTP) || url.kind_of?(URI::HTTPS)
|
76
|
+
end
|
77
|
+
|
78
|
+
def valid_url_1?(url)
|
79
|
+
uri = URI.parse(url)
|
80
|
+
uri.is_a?(URI::HTTP) && !uri.host.nil?
|
81
|
+
rescue URI::InvalidURIError
|
82
|
+
false
|
83
|
+
end
|
84
|
+
|
34
85
|
def setup
|
35
|
-
client_config = {
|
86
|
+
@client_config = {
|
36
87
|
ssl_verify_mode: :none,
|
37
|
-
wsdl: File.join(File.dirname(File.expand_path(__FILE__)), "/wsdl/" + @wsdl),
|
38
88
|
logger: @logger,
|
89
|
+
wsdl: File.join(File.dirname(File.expand_path(__FILE__)), "/wsdl/" + @wsdl),
|
39
90
|
open_timeout: @open_timeout,
|
40
91
|
read_timeout: @read_timeout,
|
41
92
|
pretty_print_xml: true,
|
@@ -46,7 +97,7 @@ module Nps
|
|
46
97
|
lvl_config = {
|
47
98
|
log_level: :debug
|
48
99
|
}
|
49
|
-
client_config.merge!(lvl_config)
|
100
|
+
@client_config.merge!(lvl_config)
|
50
101
|
end
|
51
102
|
|
52
103
|
if @verify_ssl
|
@@ -54,26 +105,23 @@ module Nps
|
|
54
105
|
ssl_verify_mode: :peer,
|
55
106
|
ssl_ca_cert_file: Certifi.where
|
56
107
|
}
|
57
|
-
client_config.merge!(ssl_config)
|
108
|
+
@client_config.merge!(ssl_config)
|
58
109
|
end
|
59
110
|
|
60
111
|
if @proxy
|
61
112
|
proxy = {
|
62
113
|
proxy: @proxy
|
63
114
|
}
|
64
|
-
client_config.merge!(proxy)
|
115
|
+
@client_config.merge!(proxy)
|
65
116
|
end
|
66
117
|
|
67
118
|
if @proxy_username
|
68
119
|
proxy_auth = {
|
69
120
|
headers: { "Proxy-Authorization" => "Basic #{secret}" }
|
70
121
|
}
|
71
|
-
client_config.merge!(proxy_auth)
|
122
|
+
@client_config.merge!(proxy_auth)
|
72
123
|
end
|
73
124
|
|
74
|
-
|
75
|
-
@client = Savon.client client_config
|
76
|
-
|
77
125
|
end
|
78
126
|
|
79
127
|
def add_secure_hash(params)
|
@@ -124,11 +172,43 @@ module Nps
|
|
124
172
|
params = add_secure_hash(params)
|
125
173
|
end
|
126
174
|
params = {"Requerimiento" => params}
|
127
|
-
|
128
|
-
@
|
129
|
-
|
130
|
-
|
131
|
-
|
175
|
+
|
176
|
+
if @custom_env_urls
|
177
|
+
internal_connection_timeout = @read_timeout
|
178
|
+
@custom_env_urls.each do |url|
|
179
|
+
begin
|
180
|
+
start_time = Time.now
|
181
|
+
@client_config.merge!({endpoint: url,
|
182
|
+
open_timeout: Nps::Utils::CUSTOM_URL_CONNECTION_TIMEOUT,
|
183
|
+
read_timeout: internal_connection_timeout})
|
184
|
+
@client = Savon.client @client_config
|
185
|
+
@client.call(service, message: params).body
|
186
|
+
break
|
187
|
+
rescue SocketError, HTTPClient::ConnectTimeoutError
|
188
|
+
if @custom_env_urls.last == url
|
189
|
+
raise ApiException
|
190
|
+
end
|
191
|
+
@logger.warn("Could not connect to #{url}")
|
192
|
+
finish_time = Time.now
|
193
|
+
delta_time = finish_time - start_time
|
194
|
+
internal_connection_timeout -= delta_time.ceil
|
195
|
+
next
|
196
|
+
rescue HTTPClient::ReceiveTimeoutError
|
197
|
+
raise ApiException
|
198
|
+
rescue StandardError
|
199
|
+
raise 'An unexpected error occurred'
|
200
|
+
end
|
201
|
+
end
|
202
|
+
else
|
203
|
+
begin
|
204
|
+
@client = Savon.client @client_config
|
205
|
+
@client.call(service, message: params).body
|
206
|
+
rescue HTTPClient::ReceiveTimeoutError
|
207
|
+
raise ApiException
|
208
|
+
rescue StandardError
|
209
|
+
raise 'An unexpected error occurred'
|
210
|
+
end
|
211
|
+
end
|
132
212
|
end
|
133
213
|
end
|
134
214
|
end
|
data/lib/nps/utils.rb
CHANGED
data/lib/nps/version.rb
CHANGED