active_utils 2.2.3 → 3.3.19
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 +5 -5
- data/.github/probots.yml +2 -0
- data/.travis.yml +39 -3
- data/CHANGELOG.md +92 -0
- data/CONTRIBUTING.md +32 -0
- data/Gemfile +1 -1
- data/README.md +30 -16
- data/active_utils.gemspec +4 -1
- data/gemfiles/Gemfile.activesupport-master +4 -0
- data/gemfiles/Gemfile.activesupport42 +4 -0
- data/gemfiles/Gemfile.activesupport50 +4 -0
- data/gemfiles/Gemfile.activesupport52 +4 -0
- data/lib/active_utils/{common/connection.rb → connection.rb} +9 -3
- data/lib/active_utils/{common/country.rb → country.rb} +18 -3
- data/lib/active_utils/currency_code.rb +56 -0
- data/lib/active_utils/{common/error.rb → error.rb} +8 -6
- data/lib/active_utils/{common/network_connection_retries.rb → network_connection_retries.rb} +27 -11
- data/lib/active_utils/{common/post_data.rb → post_data.rb} +1 -1
- data/lib/active_utils/{common/posts_data.rb → posts_data.rb} +19 -10
- data/lib/active_utils/{common/requires_parameters.rb → requires_parameters.rb} +1 -1
- data/lib/active_utils/{common/validateable.rb → validateable.rb} +1 -1
- data/lib/active_utils/version.rb +1 -1
- data/lib/active_utils.rb +17 -16
- data/lib/certs/cacert.pem +1701 -2393
- data/test/test_helper.rb +7 -4
- data/test/unit/connection_test.rb +43 -15
- data/test/unit/country_test.rb +19 -0
- data/test/unit/network_connection_retries_test.rb +88 -11
- data/test/unit/post_data_test.rb +6 -6
- data/test/unit/posts_data_test.rb +19 -4
- data/test/unit/validateable_test.rb +1 -1
- metadata +38 -41
- checksums.yaml.gz.sig +0 -0
- data/lib/active_utils/common/currency_code.rb +0 -50
- data/lib/active_utils/common/utils.rb +0 -20
- data/test/unit/utils_test.rb +0 -7
- data.tar.gz.sig +0 -1
- metadata.gz.sig +0 -1
data/test/test_helper.rb
CHANGED
@@ -1,8 +1,11 @@
|
|
1
1
|
require 'active_utils'
|
2
|
-
|
3
2
|
require 'minitest/autorun'
|
3
|
+
require 'mocha/setup'
|
4
4
|
|
5
|
-
|
6
|
-
require 'mocha/mini_test'
|
5
|
+
include ActiveUtils
|
7
6
|
|
8
|
-
|
7
|
+
# This makes sure that Minitest::Test exists when an older version of Minitest
|
8
|
+
# (i.e. 4.x) is required by ActiveSupport.
|
9
|
+
unless defined?(Minitest::Test)
|
10
|
+
Minitest::Test = MiniTest::Unit::TestCase
|
11
|
+
end
|
@@ -6,23 +6,27 @@ class ConnectionTest < Minitest::Test
|
|
6
6
|
@ok = stub(:code => 200, :message => 'OK', :body => 'success')
|
7
7
|
|
8
8
|
@endpoint = 'https://example.com/tx.php'
|
9
|
-
@connection =
|
9
|
+
@connection = ActiveUtils::Connection.new(@endpoint)
|
10
10
|
@connection.logger = stub(:info => nil, :debug => nil, :error => nil)
|
11
11
|
end
|
12
12
|
|
13
|
+
def test_path_to_cert_is_correct
|
14
|
+
assert File.exists?(ActiveUtils::Connection::CA_FILE)
|
15
|
+
end
|
16
|
+
|
13
17
|
def test_connection_endpoint_parses_string_to_uri
|
14
18
|
assert_equal URI.parse(@endpoint), @connection.endpoint
|
15
19
|
end
|
16
20
|
|
17
21
|
def test_connection_endpoint_accepts_uri
|
18
22
|
endpoint = URI.parse(@endpoint)
|
19
|
-
connection =
|
23
|
+
connection = ActiveUtils::Connection.new(endpoint)
|
20
24
|
assert_equal endpoint, connection.endpoint
|
21
25
|
end
|
22
26
|
|
23
27
|
def test_connection_endpoint_raises_uri_error
|
24
28
|
assert_raises URI::InvalidURIError do
|
25
|
-
|
29
|
+
ActiveUtils::Connection.new("not a URI")
|
26
30
|
end
|
27
31
|
end
|
28
32
|
|
@@ -34,7 +38,7 @@ class ConnectionTest < Minitest::Test
|
|
34
38
|
end
|
35
39
|
|
36
40
|
def test_successful_post_request
|
37
|
-
Net::HTTP.any_instance.expects(:post).with('/tx.php', 'data',
|
41
|
+
Net::HTTP.any_instance.expects(:post).with('/tx.php', 'data', ActiveUtils::Connection::RUBY_184_POST_HEADERS).returns(@ok)
|
38
42
|
response = @connection.request(:post, 'data', {})
|
39
43
|
assert_equal 'success', response.body
|
40
44
|
end
|
@@ -45,6 +49,12 @@ class ConnectionTest < Minitest::Test
|
|
45
49
|
assert_equal 'success', response.body
|
46
50
|
end
|
47
51
|
|
52
|
+
def test_successful_patch_request
|
53
|
+
Net::HTTP.any_instance.expects(:patch).with('/tx.php', 'data', {}).returns(@ok)
|
54
|
+
response = @connection.request(:patch, 'data', {})
|
55
|
+
assert_equal 'success', response.body
|
56
|
+
end
|
57
|
+
|
48
58
|
def test_successful_delete_request
|
49
59
|
Net::HTTP.any_instance.expects(:delete).with('/tx.php', {}).returns(@ok)
|
50
60
|
response = @connection.request(:delete, nil, {})
|
@@ -76,7 +86,7 @@ class ConnectionTest < Minitest::Test
|
|
76
86
|
end
|
77
87
|
|
78
88
|
def test_default_read_timeout
|
79
|
-
assert_equal
|
89
|
+
assert_equal ActiveUtils::Connection::READ_TIMEOUT, @connection.read_timeout
|
80
90
|
end
|
81
91
|
|
82
92
|
def test_override_read_timeout
|
@@ -90,7 +100,7 @@ class ConnectionTest < Minitest::Test
|
|
90
100
|
end
|
91
101
|
|
92
102
|
def test_default_verify_peer
|
93
|
-
assert_equal
|
103
|
+
assert_equal ActiveUtils::Connection::VERIFY_PEER, @connection.verify_peer
|
94
104
|
end
|
95
105
|
|
96
106
|
def test_override_verify_peer
|
@@ -99,8 +109,8 @@ class ConnectionTest < Minitest::Test
|
|
99
109
|
end
|
100
110
|
|
101
111
|
def test_default_ca_file
|
102
|
-
assert_equal
|
103
|
-
assert_equal
|
112
|
+
assert_equal ActiveUtils::Connection::CA_FILE, @connection.ca_file
|
113
|
+
assert_equal ActiveUtils::Connection::CA_FILE, @connection.send(:http).ca_file
|
104
114
|
end
|
105
115
|
|
106
116
|
def test_override_ca_file
|
@@ -110,8 +120,8 @@ class ConnectionTest < Minitest::Test
|
|
110
120
|
end
|
111
121
|
|
112
122
|
def test_default_ca_path
|
113
|
-
assert_equal
|
114
|
-
assert_equal
|
123
|
+
assert_equal ActiveUtils::Connection::CA_PATH, @connection.ca_path
|
124
|
+
assert_equal ActiveUtils::Connection::CA_PATH, @connection.send(:http).ca_path
|
115
125
|
end
|
116
126
|
|
117
127
|
def test_override_ca_path
|
@@ -120,11 +130,29 @@ class ConnectionTest < Minitest::Test
|
|
120
130
|
assert_equal "/bogus", @connection.send(:http).ca_path
|
121
131
|
end
|
122
132
|
|
133
|
+
def test_default_proxy_address_is_nil
|
134
|
+
assert_equal nil, @connection.proxy_address
|
135
|
+
end
|
136
|
+
|
137
|
+
def test_default_proxy_port_is_nil
|
138
|
+
assert_equal nil, @connection.proxy_port
|
139
|
+
end
|
140
|
+
|
141
|
+
def test_override_proxy_address
|
142
|
+
@connection.proxy_address = "http://proxy.example.com"
|
143
|
+
assert_equal "http://proxy.example.com", @connection.proxy_address
|
144
|
+
end
|
145
|
+
|
146
|
+
def test_override_proxy_port
|
147
|
+
@connection.proxy_port = "8888"
|
148
|
+
assert_equal "8888", @connection.proxy_port
|
149
|
+
end
|
150
|
+
|
123
151
|
def test_unrecoverable_exception
|
124
152
|
@connection.logger.expects(:info).once
|
125
153
|
Net::HTTP.any_instance.expects(:post).raises(EOFError)
|
126
154
|
|
127
|
-
assert_raises(
|
155
|
+
assert_raises(ActiveUtils::ConnectionError) do
|
128
156
|
@connection.request(:post, '')
|
129
157
|
end
|
130
158
|
end
|
@@ -138,9 +166,9 @@ class ConnectionTest < Minitest::Test
|
|
138
166
|
|
139
167
|
def test_failure_limit_reached
|
140
168
|
@connection.logger.expects(:info).once
|
141
|
-
Net::HTTP.any_instance.expects(:post).times(
|
169
|
+
Net::HTTP.any_instance.expects(:post).times(ActiveUtils::Connection::MAX_RETRIES).raises(Errno::ECONNREFUSED)
|
142
170
|
|
143
|
-
assert_raises(
|
171
|
+
assert_raises(ActiveUtils::ConnectionError) do
|
144
172
|
@connection.request(:post, '')
|
145
173
|
end
|
146
174
|
end
|
@@ -160,7 +188,7 @@ class ConnectionTest < Minitest::Test
|
|
160
188
|
|
161
189
|
@connection.retry_safe = true
|
162
190
|
|
163
|
-
assert_raises(
|
191
|
+
assert_raises(ActiveUtils::ConnectionError) do
|
164
192
|
@connection.request(:post, '')
|
165
193
|
end
|
166
194
|
end
|
@@ -169,7 +197,7 @@ class ConnectionTest < Minitest::Test
|
|
169
197
|
@connection.logger.expects(:error).once
|
170
198
|
Net::HTTP.any_instance.expects(:post).raises(OpenSSL::X509::CertificateError)
|
171
199
|
|
172
|
-
assert_raises(
|
200
|
+
assert_raises(ActiveUtils::ClientCertificateError) do
|
173
201
|
@connection.request(:post, '')
|
174
202
|
end
|
175
203
|
end
|
data/test/unit/country_test.rb
CHANGED
@@ -65,4 +65,23 @@ class CountryTest < Minitest::Test
|
|
65
65
|
assert_equal(country_names.sort, country_names)
|
66
66
|
end
|
67
67
|
|
68
|
+
def test_countries_that_do_not_use_postalcodes_are_unique
|
69
|
+
country_codes = Country::COUNTRIES_THAT_DO_NOT_USE_POSTALCODES
|
70
|
+
assert_equal(country_codes.uniq.length, country_codes.length)
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_change_to_countries_that_do_not_use_postalcodes_is_intentional
|
74
|
+
country_codes = Country::COUNTRIES_THAT_DO_NOT_USE_POSTALCODES
|
75
|
+
assert_equal(country_codes.length, 31)
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_canada_uses_postal_codes
|
79
|
+
canada = Country.find('Canada')
|
80
|
+
assert canada.uses_postal_codes?
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_qatar_does_not_use_postal_codes
|
84
|
+
qatar = Country.find('Qatar')
|
85
|
+
refute qatar.uses_postal_codes?
|
86
|
+
end
|
68
87
|
end
|
@@ -15,15 +15,66 @@ class NetworkConnectionRetriesTest < Minitest::Test
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def test_unrecoverable_exception
|
18
|
-
assert_raises(
|
18
|
+
raised = assert_raises(ActiveUtils::ConnectionError) do
|
19
19
|
retry_exceptions do
|
20
20
|
raise EOFError
|
21
21
|
end
|
22
22
|
end
|
23
|
+
assert_equal "The remote server dropped the connection", raised.message
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_econnreset_raises_correctly
|
27
|
+
raised = assert_raises(ActiveUtils::ConnectionError) do
|
28
|
+
retry_exceptions do
|
29
|
+
raise Errno::ECONNRESET
|
30
|
+
end
|
31
|
+
end
|
32
|
+
assert_equal "The remote server reset the connection", raised.message
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_timeout_errors_raise_correctly
|
36
|
+
exceptions = [Timeout::Error, Errno::ETIMEDOUT]
|
37
|
+
if RUBY_VERSION >= '2.0.0'
|
38
|
+
exceptions += [Net::ReadTimeout, Net::OpenTimeout]
|
39
|
+
end
|
40
|
+
|
41
|
+
exceptions.each do |exception|
|
42
|
+
raised = assert_raises(ActiveUtils::ConnectionError) do
|
43
|
+
retry_exceptions do
|
44
|
+
raise exception
|
45
|
+
end
|
46
|
+
end
|
47
|
+
assert_equal "The connection to the remote server timed out", raised.message
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_socket_error_raises_correctly
|
52
|
+
raised = assert_raises(ActiveUtils::ConnectionError) do
|
53
|
+
retry_exceptions do
|
54
|
+
raise SocketError
|
55
|
+
end
|
56
|
+
end
|
57
|
+
assert_equal "The connection to the remote server could not be established", raised.message
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_ssl_errors_raise_correctly
|
61
|
+
exceptions = [OpenSSL::SSL::SSLError]
|
62
|
+
if RUBY_VERSION >= '2.1.0'
|
63
|
+
exceptions += [OpenSSL::SSL::SSLErrorWaitWritable, OpenSSL::SSL::SSLErrorWaitReadable]
|
64
|
+
end
|
65
|
+
|
66
|
+
exceptions.each do |exception|
|
67
|
+
raised = assert_raises(ActiveUtils::ConnectionError) do
|
68
|
+
retry_exceptions do
|
69
|
+
raise exception
|
70
|
+
end
|
71
|
+
end
|
72
|
+
assert_equal "The SSL connection to the remote server could not be established", raised.message
|
73
|
+
end
|
23
74
|
end
|
24
75
|
|
25
76
|
def test_invalid_response_error
|
26
|
-
assert_raises(
|
77
|
+
assert_raises(ActiveUtils::InvalidResponseError) do
|
27
78
|
retry_exceptions do
|
28
79
|
raise Zlib::BufError
|
29
80
|
end
|
@@ -32,7 +83,7 @@ class NetworkConnectionRetriesTest < Minitest::Test
|
|
32
83
|
|
33
84
|
def test_unrecoverable_exception_logged_if_logger_provided
|
34
85
|
@logger.expects(:info).once
|
35
|
-
assert_raises(
|
86
|
+
assert_raises(ActiveUtils::ConnectionError) do
|
36
87
|
retry_exceptions :logger => @logger do
|
37
88
|
raise EOFError
|
38
89
|
end
|
@@ -48,9 +99,9 @@ class NetworkConnectionRetriesTest < Minitest::Test
|
|
48
99
|
end
|
49
100
|
|
50
101
|
def test_failure_limit_reached
|
51
|
-
@requester.expects(:post).times(
|
102
|
+
@requester.expects(:post).times(ActiveUtils::NetworkConnectionRetries::DEFAULT_RETRIES).raises(Errno::ECONNREFUSED)
|
52
103
|
|
53
|
-
assert_raises(
|
104
|
+
assert_raises(ActiveUtils::ConnectionError) do
|
54
105
|
retry_exceptions do
|
55
106
|
@requester.post
|
56
107
|
end
|
@@ -59,9 +110,9 @@ class NetworkConnectionRetriesTest < Minitest::Test
|
|
59
110
|
|
60
111
|
def test_failure_limit_reached_logs_final_error
|
61
112
|
@logger.expects(:info).times(3)
|
62
|
-
@requester.expects(:post).times(
|
113
|
+
@requester.expects(:post).times(ActiveUtils::NetworkConnectionRetries::DEFAULT_RETRIES).raises(Errno::ECONNREFUSED)
|
63
114
|
|
64
|
-
assert_raises(
|
115
|
+
assert_raises(ActiveUtils::ConnectionError) do
|
65
116
|
retry_exceptions(:logger => @logger) do
|
66
117
|
@requester.post
|
67
118
|
end
|
@@ -91,17 +142,35 @@ class NetworkConnectionRetriesTest < Minitest::Test
|
|
91
142
|
raises(Errno::ECONNREFUSED).
|
92
143
|
raises(EOFError)
|
93
144
|
|
94
|
-
assert_raises(
|
145
|
+
assert_raises(ActiveUtils::ConnectionError) do
|
95
146
|
retry_exceptions :retry_safe => true do
|
96
147
|
@requester.post
|
97
148
|
end
|
98
149
|
end
|
99
150
|
end
|
100
151
|
|
152
|
+
def test_delay_between_retries
|
153
|
+
@requester.expects(:post).times(2).raises(EOFError).then.returns(@ok)
|
154
|
+
Kernel.expects(sleep: 0.5)
|
155
|
+
|
156
|
+
retry_exceptions retry_safe: true, delay: 0.5 do
|
157
|
+
@requester.post
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
def test_no_delay_without_specified_option
|
162
|
+
@requester.expects(:post).times(2).raises(EOFError).then.returns(@ok)
|
163
|
+
Kernel.expects(sleep: 0.5).never
|
164
|
+
|
165
|
+
retry_exceptions retry_safe: true do
|
166
|
+
@requester.post
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
101
170
|
def test_failure_with_ssl_certificate
|
102
171
|
@requester.expects(:post).raises(OpenSSL::X509::CertificateError)
|
103
172
|
|
104
|
-
assert_raises(
|
173
|
+
assert_raises(ActiveUtils::ClientCertificateError) do
|
105
174
|
retry_exceptions do
|
106
175
|
@requester.post
|
107
176
|
end
|
@@ -112,7 +181,7 @@ class NetworkConnectionRetriesTest < Minitest::Test
|
|
112
181
|
@logger.expects(:error).once
|
113
182
|
@requester.expects(:post).raises(OpenSSL::X509::CertificateError)
|
114
183
|
|
115
|
-
assert_raises(
|
184
|
+
assert_raises(ActiveUtils::ClientCertificateError) do
|
116
185
|
retry_exceptions :logger => @logger do
|
117
186
|
@requester.post
|
118
187
|
end
|
@@ -122,7 +191,7 @@ class NetworkConnectionRetriesTest < Minitest::Test
|
|
122
191
|
def test_failure_with_additional_exceptions_specified
|
123
192
|
@requester.expects(:post).raises(MyNewError)
|
124
193
|
|
125
|
-
assert_raises(
|
194
|
+
assert_raises(ActiveUtils::ConnectionError) do
|
126
195
|
retry_exceptions :connection_exceptions => {MyNewError => "my message"} do
|
127
196
|
@requester.post
|
128
197
|
end
|
@@ -138,4 +207,12 @@ class NetworkConnectionRetriesTest < Minitest::Test
|
|
138
207
|
end
|
139
208
|
end
|
140
209
|
end
|
210
|
+
|
211
|
+
def test_retries_with_custom_error_specified
|
212
|
+
@requester.expects(:post).times(2).raises(Errno::ETIMEDOUT).then.returns(@ok)
|
213
|
+
|
214
|
+
retry_exceptions retriable_exceptions: { Errno::ETIMEDOUT => "The connection to the remote server timed out"} do
|
215
|
+
@requester.post
|
216
|
+
end
|
217
|
+
end
|
141
218
|
end
|
data/test/unit/post_data_test.rb
CHANGED
@@ -1,24 +1,24 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
class MyPost <
|
3
|
+
class MyPost < ActiveUtils::PostData
|
4
4
|
self.required_fields = [ :ccnumber, :ccexp, :firstname, :lastname, :username, :password, :order_id, :key, :time ]
|
5
5
|
end
|
6
6
|
|
7
7
|
class PostDataTest < Minitest::Test
|
8
8
|
def teardown
|
9
|
-
|
9
|
+
ActiveUtils::PostData.required_fields = []
|
10
10
|
end
|
11
11
|
|
12
12
|
def test_element_assignment
|
13
13
|
name = 'Cody Fauser'
|
14
|
-
post =
|
14
|
+
post = ActiveUtils::PostData.new
|
15
15
|
|
16
16
|
post[:name] = name
|
17
17
|
assert_equal name, post[:name]
|
18
18
|
end
|
19
19
|
|
20
20
|
def test_ignore_blank_fields
|
21
|
-
post =
|
21
|
+
post = ActiveUtils::PostData.new
|
22
22
|
assert_equal 0, post.keys.size
|
23
23
|
|
24
24
|
post[:name] = ''
|
@@ -29,8 +29,8 @@ class PostDataTest < Minitest::Test
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def test_dont_ignore_required_blank_fields
|
32
|
-
|
33
|
-
post =
|
32
|
+
ActiveUtils::PostData.required_fields = [ :name ]
|
33
|
+
post = ActiveUtils::PostData.new
|
34
34
|
|
35
35
|
assert_equal 0, post.keys.size
|
36
36
|
|
@@ -18,7 +18,7 @@ class PostsDataTest < Minitest::Test
|
|
18
18
|
requester.expects(:post).raises(Errno::ECONNREFUSED).times(3)
|
19
19
|
Connection.any_instance.stubs(:http => requester)
|
20
20
|
|
21
|
-
assert_raises
|
21
|
+
assert_raises ActiveUtils::ConnectionError do
|
22
22
|
@poster.raw_ssl_request(:post, "https://shopify.com", "", {})
|
23
23
|
end
|
24
24
|
end
|
@@ -29,11 +29,11 @@ class PostsDataTest < Minitest::Test
|
|
29
29
|
requester.expects(:post).raises(Errno::ECONNREFUSED).times(1)
|
30
30
|
Connection.any_instance.stubs(:http => requester)
|
31
31
|
|
32
|
-
assert_raises
|
32
|
+
assert_raises ActiveUtils::ConnectionError do
|
33
33
|
@poster.raw_ssl_request(:post, "https://shopify.com", "", {})
|
34
34
|
end
|
35
35
|
ensure
|
36
|
-
SSLPoster.max_retries =
|
36
|
+
SSLPoster.max_retries = ActiveUtils::Connection::MAX_RETRIES
|
37
37
|
end
|
38
38
|
|
39
39
|
def test_logger_warns_if_ssl_strict_disabled
|
@@ -54,5 +54,20 @@ class PostsDataTest < Minitest::Test
|
|
54
54
|
SSLPoster.ssl_strict = true
|
55
55
|
@poster.raw_ssl_request(:post, "https://shopify.com", "", {})
|
56
56
|
end
|
57
|
-
|
57
|
+
|
58
|
+
def test_set_proxy_address_and_port
|
59
|
+
SSLPoster.proxy_address = 'http://proxy.example.com'
|
60
|
+
SSLPoster.proxy_port = '8888'
|
61
|
+
assert_equal @poster.proxy_address, 'http://proxy.example.com'
|
62
|
+
assert_equal @poster.proxy_port, '8888'
|
63
|
+
end
|
64
|
+
|
65
|
+
class HttpConnectionAbort < StandardError; end
|
66
|
+
|
67
|
+
def test_respecting_environment_proxy_settings
|
68
|
+
Net::HTTP.stubs(:new).with('example.com', 80, :ENV, nil).raises(PostsDataTest::HttpConnectionAbort)
|
69
|
+
assert_raises(PostsDataTest::HttpConnectionAbort) do
|
70
|
+
@poster.ssl_post('http://example.com', '')
|
71
|
+
end
|
72
|
+
end
|
58
73
|
end
|
metadata
CHANGED
@@ -1,36 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.3.19
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shopify
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
|
-
cert_chain:
|
11
|
-
-
|
12
|
-
-----BEGIN CERTIFICATE-----
|
13
|
-
MIIDcDCCAligAwIBAgIBATANBgkqhkiG9w0BAQUFADA/MQ8wDQYDVQQDDAZhZG1p
|
14
|
-
bnMxFzAVBgoJkiaJk/IsZAEZFgdzaG9waWZ5MRMwEQYKCZImiZPyLGQBGRYDY29t
|
15
|
-
MB4XDTE0MDUxNTIwMzM0OFoXDTE1MDUxNTIwMzM0OFowPzEPMA0GA1UEAwwGYWRt
|
16
|
-
aW5zMRcwFQYKCZImiZPyLGQBGRYHc2hvcGlmeTETMBEGCgmSJomT8ixkARkWA2Nv
|
17
|
-
bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL0/81O3e1vh5smcwp2G
|
18
|
-
MpLQ6q0kejQLa65bPYPxdzWA1SYOKyGfw+yR9LdFzsuKpwWzKq6zX35lj1IckWS4
|
19
|
-
bNBEQzxmufUxU0XPM02haFB8fOfDJzdXsWte9Ge4IFwahwn68gpMqN+BvxL+KMYz
|
20
|
-
Iut9YmN44d4LZdsENEIO5vmybuG2vYDz7R56qB0PA+Q2P2CdhymsBad2DQs69FBo
|
21
|
-
uico9V6VMYYctL9lCYdzu9IXrOYNTt88suKIVzzAlHOKeN0Ng5qdztFoTR8sfxDr
|
22
|
-
Ydg3KHl5n47wlpgd8R0f/4b5gGxW+v9pyJCgQnLlRu7DedVSvv7+GMtj3g9r3nhJ
|
23
|
-
KqECAwEAAaN3MHUwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFI/o
|
24
|
-
maf34HXbUOQsdoLHacEKQgunMB0GA1UdEQQWMBSBEmFkbWluc0BzaG9waWZ5LmNv
|
25
|
-
bTAdBgNVHRIEFjAUgRJhZG1pbnNAc2hvcGlmeS5jb20wDQYJKoZIhvcNAQEFBQAD
|
26
|
-
ggEBADkK9aj5T0HPExsov4EoMWFnO+G7RQ28C30VAfKxnL2UxG6i4XMHVs6Xi94h
|
27
|
-
qXFw1ec9Y2eDUqaolT3bviOk9BB197+A8Vz/k7MC6ci2NE+yDDB7HAC8zU6LAx8Y
|
28
|
-
Iqvw7B/PSZ/pz4bUVFlTATif4mi1vO3lidRkdHRtM7UePSn2rUpOi0gtXBP3bLu5
|
29
|
-
YjHJN7wx5cugMEyroKITG5gL0Nxtu21qtOlHX4Hc4KdE2JqzCPOsS4zsZGhgwhPs
|
30
|
-
fl3hbtVFTqbOlwL9vy1fudXcolIE/ZTcxQ+er07ZFZdKCXayR9PPs64heamfn0fp
|
31
|
-
TConQSX2BnZdhIEYW+cKzEC/bLc=
|
32
|
-
-----END CERTIFICATE-----
|
33
|
-
date: 2014-08-11 00:00:00.000000000 Z
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-11-08 00:00:00.000000000 Z
|
34
12
|
dependencies:
|
35
13
|
- !ruby/object:Gem::Dependency
|
36
14
|
name: activesupport
|
@@ -38,14 +16,14 @@ dependencies:
|
|
38
16
|
requirements:
|
39
17
|
- - ">="
|
40
18
|
- !ruby/object:Gem::Version
|
41
|
-
version: 2
|
19
|
+
version: '4.2'
|
42
20
|
type: :runtime
|
43
21
|
prerelease: false
|
44
22
|
version_requirements: !ruby/object:Gem::Requirement
|
45
23
|
requirements:
|
46
24
|
- - ">="
|
47
25
|
- !ruby/object:Gem::Version
|
48
|
-
version: 2
|
26
|
+
version: '4.2'
|
49
27
|
- !ruby/object:Gem::Dependency
|
50
28
|
name: i18n
|
51
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -74,6 +52,20 @@ dependencies:
|
|
74
52
|
- - ">="
|
75
53
|
- !ruby/object:Gem::Version
|
76
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: minitest
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
77
69
|
- !ruby/object:Gem::Dependency
|
78
70
|
name: mocha
|
79
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -95,24 +87,30 @@ executables: []
|
|
95
87
|
extensions: []
|
96
88
|
extra_rdoc_files: []
|
97
89
|
files:
|
90
|
+
- ".github/probots.yml"
|
98
91
|
- ".gitignore"
|
99
92
|
- ".travis.yml"
|
93
|
+
- CHANGELOG.md
|
94
|
+
- CONTRIBUTING.md
|
100
95
|
- Gemfile
|
101
96
|
- MIT-LICENSE
|
102
97
|
- README.md
|
103
98
|
- Rakefile
|
104
99
|
- active_utils.gemspec
|
100
|
+
- gemfiles/Gemfile.activesupport-master
|
101
|
+
- gemfiles/Gemfile.activesupport42
|
102
|
+
- gemfiles/Gemfile.activesupport50
|
103
|
+
- gemfiles/Gemfile.activesupport52
|
105
104
|
- lib/active_utils.rb
|
106
|
-
- lib/active_utils/
|
107
|
-
- lib/active_utils/
|
108
|
-
- lib/active_utils/
|
109
|
-
- lib/active_utils/
|
110
|
-
- lib/active_utils/
|
111
|
-
- lib/active_utils/
|
112
|
-
- lib/active_utils/
|
113
|
-
- lib/active_utils/
|
114
|
-
- lib/active_utils/
|
115
|
-
- lib/active_utils/common/validateable.rb
|
105
|
+
- lib/active_utils/connection.rb
|
106
|
+
- lib/active_utils/country.rb
|
107
|
+
- lib/active_utils/currency_code.rb
|
108
|
+
- lib/active_utils/error.rb
|
109
|
+
- lib/active_utils/network_connection_retries.rb
|
110
|
+
- lib/active_utils/post_data.rb
|
111
|
+
- lib/active_utils/posts_data.rb
|
112
|
+
- lib/active_utils/requires_parameters.rb
|
113
|
+
- lib/active_utils/validateable.rb
|
116
114
|
- lib/active_utils/version.rb
|
117
115
|
- lib/certs/cacert.pem
|
118
116
|
- shipit.rubygems.yml
|
@@ -124,12 +122,12 @@ files:
|
|
124
122
|
- test/unit/network_connection_retries_test.rb
|
125
123
|
- test/unit/post_data_test.rb
|
126
124
|
- test/unit/posts_data_test.rb
|
127
|
-
- test/unit/utils_test.rb
|
128
125
|
- test/unit/validateable_test.rb
|
129
126
|
homepage: http://github.com/shopify/active_utils
|
130
127
|
licenses:
|
131
128
|
- MIT
|
132
|
-
metadata:
|
129
|
+
metadata:
|
130
|
+
allowed_push_host: https://rubygems.org
|
133
131
|
post_install_message:
|
134
132
|
rdoc_options: []
|
135
133
|
require_paths:
|
@@ -145,8 +143,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
145
143
|
- !ruby/object:Gem::Version
|
146
144
|
version: '0'
|
147
145
|
requirements: []
|
148
|
-
|
149
|
-
rubygems_version: 2.2.2
|
146
|
+
rubygems_version: 3.2.20
|
150
147
|
signing_key:
|
151
148
|
specification_version: 4
|
152
149
|
summary: Common utils used by active_merchant, active_fulfillment, and active_shipping
|
checksums.yaml.gz.sig
DELETED
Binary file
|
@@ -1,50 +0,0 @@
|
|
1
|
-
module ActiveMerchant
|
2
|
-
class InvalidCurrencyCodeError < StandardError
|
3
|
-
end
|
4
|
-
|
5
|
-
class CurrencyCode
|
6
|
-
ISO_CURRENCIES = [
|
7
|
-
"AED", "ALL", "AMD", "ANG", "AOA", "ARS", "AUD", "AWG", "AZN", "BAM", "BBD", "BDT", "BGN", "BHD",
|
8
|
-
"BND", "BOB", "BRL", "BSD", "BTN", "BWP", "BYR", "BZD", "CAD", "CHF", "CLP", "CNY", "COP", "CRC",
|
9
|
-
"CZK", "DKK", "DOP", "DZD", "EGP", "ETB", "EUR", "FJD", "GBP", "GEL", "GHS", "GMD", "GTQ", "GYD",
|
10
|
-
"HKD", "HNL", "HRK", "HUF", "IDR", "ILS", "INR", "ISK", "JEP", "JMD", "JOD", "JPY", "KES", "KGS",
|
11
|
-
"KHR", "KRW", "KWD", "KYD", "KZT", "LBP", "LKR", "LTL", "LVL", "MAD", "MDL", "MGA", "MKD", "MMK",
|
12
|
-
"MNT", "MOP", "MUR", "MVR", "MXN", "MYR", "MZN", "NAD", "NGN", "NIO", "NOK", "NPR", "NZD", "OMR",
|
13
|
-
"PEN", "PGK", "PHP", "PKR", "PLN", "PYG", "QAR", "RON", "RSD", "RUB", "RWF", "SAR", "SCR", "SEK",
|
14
|
-
"SGD", "STD", "SYP", "THB", "TND", "TRY", "TTD", "TWD", "TZS", "UAH", "UGX", "USD", "UYU", "VEF",
|
15
|
-
"VND", "VUV", "WST", "XAF", "XCD", "XOF", "XPF", "ZAR", "ZMW"
|
16
|
-
]
|
17
|
-
|
18
|
-
NON_ISO_TO_ISO = {
|
19
|
-
"ARN" => "ARS",
|
20
|
-
"AZM" => "AZN",
|
21
|
-
"CHP" => "CLP",
|
22
|
-
"DHS" => "AED",
|
23
|
-
"ECD" => "XCD",
|
24
|
-
"GHC" => "GHS",
|
25
|
-
"JAD" => "JMD",
|
26
|
-
"JYE" => "JPY",
|
27
|
-
"KUD" => "KWD",
|
28
|
-
"MZM" => "MZN",
|
29
|
-
"NTD" => "TWD",
|
30
|
-
"NMP" => "MXN",
|
31
|
-
"RDD" => "DOP",
|
32
|
-
"RMB" => "CNY",
|
33
|
-
"SFR" => "CHF",
|
34
|
-
"SID" => "SGD",
|
35
|
-
"UKL" => "GBP",
|
36
|
-
"WON" => "KRW"
|
37
|
-
}
|
38
|
-
|
39
|
-
def self.standardize(code)
|
40
|
-
code = code.upcase unless code.nil?
|
41
|
-
|
42
|
-
return code if is_iso?(code)
|
43
|
-
NON_ISO_TO_ISO[code] || raise(InvalidCurrencyCodeError, "#{code} is not an ISO currency, nor can it be converted to one.")
|
44
|
-
end
|
45
|
-
|
46
|
-
def self.is_iso?(code)
|
47
|
-
ISO_CURRENCIES.include? code
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
require 'securerandom'
|
2
|
-
|
3
|
-
module ActiveMerchant #:nodoc:
|
4
|
-
module Utils #:nodoc:
|
5
|
-
def generate_unique_id
|
6
|
-
SecureRandom.hex(16)
|
7
|
-
end
|
8
|
-
|
9
|
-
module_function :generate_unique_id
|
10
|
-
|
11
|
-
def deprecated(message)
|
12
|
-
warning = Kernel.caller[1] + message
|
13
|
-
if respond_to?(:logger) && logger.present?
|
14
|
-
logger.warn(warning)
|
15
|
-
else
|
16
|
-
warn(warning)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
data/test/unit/utils_test.rb
DELETED
data.tar.gz.sig
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
�:2�Jߔ*o��ϰ��F>��c-�kw���Mz�=� �)y��l�e��8����z k.�Y���XGb^#�`�5��#z\�������,ܤU����s�
|