transbank-sdk 1.1.0 → 1.2.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.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE/reporte-de-error.md +40 -0
  3. data/.gitignore +3 -1
  4. data/.travis.yml +2 -0
  5. data/CHANGELOG.md +4 -0
  6. data/Makefile +1 -1
  7. data/lib/transbank/sdk.rb +5 -5
  8. data/lib/transbank/sdk/oneclick/errors/oneclick_error.rb +16 -0
  9. data/lib/transbank/sdk/oneclick/inscription/errors/mall_inscription_delete_error.rb +16 -0
  10. data/lib/transbank/sdk/oneclick/inscription/errors/mall_inscription_finish_error.rb +16 -0
  11. data/lib/transbank/sdk/oneclick/inscription/errors/mall_inscription_start_error.rb +16 -0
  12. data/lib/transbank/sdk/oneclick/inscription/errors/oneclick_mall_inscription_errors.rb +3 -0
  13. data/lib/transbank/sdk/oneclick/inscription/inscription.rb +3 -0
  14. data/lib/transbank/sdk/oneclick/inscription/responses/mall_inscription_delete_response.rb +18 -0
  15. data/lib/transbank/sdk/oneclick/inscription/responses/mall_inscription_finish_response.rb +15 -0
  16. data/lib/transbank/sdk/oneclick/inscription/responses/mall_inscription_start_response.rb +14 -0
  17. data/lib/transbank/sdk/oneclick/inscription/responses/oneclick_mall_inscription_responses.rb +3 -0
  18. data/lib/transbank/sdk/oneclick/mall/base.rb +51 -0
  19. data/lib/transbank/sdk/oneclick/mall/errors/mall_transaction_authorize_error.rb +16 -0
  20. data/lib/transbank/sdk/oneclick/mall/errors/mall_transaction_refund_error.rb +16 -0
  21. data/lib/transbank/sdk/oneclick/mall/errors/mall_transaction_status_error.rb +16 -0
  22. data/lib/transbank/sdk/oneclick/mall/errors/oneclick_mall_errors.rb +3 -0
  23. data/lib/transbank/sdk/oneclick/mall/mall_inscription.rb +73 -0
  24. data/lib/transbank/sdk/oneclick/mall/mall_transaction.rb +97 -0
  25. data/lib/transbank/sdk/oneclick/mall/oneclick_mall.rb +5 -0
  26. data/lib/transbank/sdk/oneclick/mall/responses/mall_transaction_authorize_response.rb +16 -0
  27. data/lib/transbank/sdk/oneclick/mall/responses/mall_transaction_refund_response.rb +16 -0
  28. data/lib/transbank/sdk/oneclick/mall/responses/mall_transaction_status_response.rb +15 -0
  29. data/lib/transbank/sdk/oneclick/mall/responses/oneclick_mall_responses.rb +3 -0
  30. data/lib/transbank/sdk/oneclick/oneclick.rb +3 -0
  31. data/lib/transbank/sdk/onepay/models/item.rb +1 -1
  32. data/lib/transbank/sdk/onepay/models/refund.rb +4 -5
  33. data/lib/transbank/sdk/onepay/models/shopping_cart.rb +1 -1
  34. data/lib/transbank/sdk/onepay/models/transaction.rb +11 -9
  35. data/lib/transbank/sdk/onepay/requests/request.rb +1 -1
  36. data/lib/transbank/sdk/onepay/responses/response.rb +1 -1
  37. data/lib/transbank/sdk/transaccion_completa/base.rb +49 -0
  38. data/lib/transbank/sdk/transaccion_completa/errors/transaccion_completa_error.rb +16 -0
  39. data/lib/transbank/sdk/transaccion_completa/errors/transaccion_completa_errors.rb +6 -0
  40. data/lib/transbank/sdk/transaccion_completa/errors/transaction_commit_error.rb +14 -0
  41. data/lib/transbank/sdk/transaccion_completa/errors/transaction_create_error.rb +14 -0
  42. data/lib/transbank/sdk/transaccion_completa/errors/transaction_installments_error.rb +14 -0
  43. data/lib/transbank/sdk/transaccion_completa/errors/transaction_refund_error.rb +14 -0
  44. data/lib/transbank/sdk/transaccion_completa/errors/transaction_status_error.rb +14 -0
  45. data/lib/transbank/sdk/transaccion_completa/options.rb +7 -0
  46. data/lib/transbank/sdk/transaccion_completa/responses/transaccion_completa_responses.rb +5 -0
  47. data/lib/transbank/sdk/transaccion_completa/responses/transaction_commit_response.rb +16 -0
  48. data/lib/transbank/sdk/transaccion_completa/responses/transaction_create_response.rb +10 -0
  49. data/lib/transbank/sdk/transaccion_completa/responses/transaction_installments_response.rb +13 -0
  50. data/lib/transbank/sdk/transaccion_completa/responses/transaction_refund_response.rb +14 -0
  51. data/lib/transbank/sdk/transaccion_completa/responses/transaction_status_response.rb +16 -0
  52. data/lib/transbank/sdk/transaccion_completa/transaccion_completa.rb +5 -0
  53. data/lib/transbank/sdk/transaccion_completa/transaction.rb +117 -0
  54. data/lib/transbank/sdk/transbank_error.rb +6 -0
  55. data/lib/transbank/sdk/utils/json_utils.rb +75 -0
  56. data/lib/transbank/sdk/utils/net_helper.rb +82 -0
  57. data/lib/transbank/sdk/{onepay/utils → utils}/request_builder.rb +0 -0
  58. data/lib/transbank/sdk/{onepay/utils → utils}/signature_utils.rb +0 -0
  59. data/lib/transbank/sdk/utils/utils.rb +9 -0
  60. data/lib/transbank/sdk/version.rb +1 -1
  61. data/lib/transbank/sdk/webpay/errors/integration_type_error.rb +8 -0
  62. data/lib/transbank/sdk/webpay/errors/webpay_error.rb +14 -0
  63. data/transbank-sdk.gemspec +1 -1
  64. metadata +56 -10
  65. data/lib/transbank/sdk/onepay/utils/json_utils.rb +0 -77
  66. data/lib/transbank/sdk/onepay/utils/net_helper.rb +0 -38
  67. data/lib/transbank/sdk/onepay/utils/utils.rb +0 -9
@@ -0,0 +1,6 @@
1
+ module Transbank
2
+ module Errors
3
+ class TransbankError < StandardError
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,75 @@
1
+ module Transbank
2
+ module Utils
3
+ module JSONUtils
4
+ def self.included(mod)
5
+ # Implement #to_h if the class that includes this module doesn't have it
6
+ # implemented. Used in several model classes to make them easier to
7
+ # transform to hashes so they can be transformed to JSON afterwards
8
+ unless mod.respond_to? :to_h
9
+ mod.send(:define_method, :to_h) do
10
+ JSON.parse(self.jsonify)
11
+ end
12
+ end
13
+ end
14
+ # Get all instance variables of an instance of a class,
15
+ # then for all of these variables,
16
+ # if the instance of the class' respond_to? returns true,
17
+ # #send the variable name (so, you'll get the value of the instance variable's
18
+ # getter), then save that to a Hash where [key] is the instance variable's name
19
+ # and [value] is its value
20
+ #
21
+ # Finally, generate a JSON string from this hash
22
+ # @return [String] a JSON string created from the Hash resulting from the
23
+ # above operation
24
+ def jsonify
25
+ instance_vars = instance_variables.map! { |var| var.to_s.gsub!(/^@/, '') }
26
+ instance_as_hash =
27
+ instance_vars.reduce({}) do |resulting_hash, instance_variable|
28
+ if respond_to? instance_variable
29
+ value = send(instance_variable)
30
+ # Safe navigation operator is Ruby 2.3+
31
+ value = value.to_h if value && value.respond_to?(:to_h) unless value.is_a? Array
32
+ value = value.to_a if value && value.respond_to?(:to_a) unless value.is_a? Hash
33
+ if value.is_a? Array
34
+ value = value.map {|x| x.respond_to?(:jsonify) ? JSON.parse(x.jsonify) : x }
35
+ end
36
+
37
+ value = value.jsonify if value.respond_to? :jsonify
38
+ resulting_hash[instance_variable] = value
39
+ end
40
+ resulting_hash
41
+ end
42
+ # Some values can't be null and must be removed if they are
43
+ instance_as_hash.reject! do |key, value|
44
+ %w[commerce_logo_url width_height].include?(key) && value.nil?
45
+ end
46
+ JSON.generate instance_as_hash
47
+ end
48
+
49
+ # Receive a Hash and return a new hash same as the one we received,
50
+ # but all keys that were strings or camelCase'd are snake_case'd and
51
+ # turned into symbols.
52
+ # Example: {'camelCaseKey': "somevalue"}
53
+ # Would return: {camel_case_key: "somevalue"}
54
+ def transform_hash_keys(hash)
55
+ hash.reduce({}) do |new_hsh, (key, val)|
56
+ new_key = underscore(key).to_sym
57
+ new_hsh[new_key] = val
58
+ new_hsh
59
+ end
60
+ end
61
+
62
+ # FROM https://stackoverflow.com/a/1509957
63
+ # Transforms camelCaseWords to snake_case_words
64
+ def underscore(camel_cased_word)
65
+ camel_cased_word.to_s.gsub(/::/, '/')
66
+ .gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
67
+ .gsub(/([a-z\d])([A-Z])/,'\1_\2')
68
+ .tr("-", "_")
69
+ .downcase
70
+ end
71
+ end
72
+ end
73
+ end
74
+
75
+
@@ -0,0 +1,82 @@
1
+ module Transbank
2
+ module Utils
3
+ module NetHelper
4
+ def http_get(uri_string:, headers:nil)
5
+ uri = URI.parse(uri_string)
6
+ http = Net::HTTP.new(uri.host, uri.port)
7
+ http.use_ssl = uri.scheme == 'https'
8
+ request_headers = {'Content-Type' => 'application/json'}.merge(headers || {})
9
+ request = Net::HTTP::Get.new(uri.path, request_headers)
10
+ http.request(request)
11
+ end
12
+ # POST a request to Transbank's servers, and return the parsed response
13
+ # @param uri_string [String] an URI to post to
14
+ # @param body [Hash] the body of your POST request
15
+ # @return [Hash] the JSON.parse'd response body
16
+ def http_post(uri_string:, body: nil, headers: nil, camel_case_keys: true)
17
+ uri = URI.parse(uri_string)
18
+ http = Net::HTTP.new(uri.host, uri.port)
19
+ http.use_ssl = uri.scheme == 'https'
20
+
21
+ request_headers = {'Content-Type' => 'application/json'}.merge(headers || {})
22
+ request = Net::HTTP::Post.new(uri.path, request_headers)
23
+ sendable_body = camel_case_keys ? keys_to_camel_case(body) : body
24
+ request.body = sendable_body.to_json
25
+ http.request(request)
26
+ end
27
+
28
+ def http_put(uri_string:, body: nil, headers: nil)
29
+ uri = URI.parse(uri_string)
30
+ http = Net::HTTP.new(uri.host, uri.port)
31
+ http.use_ssl = uri.scheme == 'https'
32
+
33
+ request_headers = {'Content-Type' => 'application/json'}.merge(headers || {})
34
+ request = Net::HTTP::Put.new(uri.path, request_headers)
35
+ request.body = JSON.generate(body)
36
+ http.request(request)
37
+ end
38
+
39
+ def http_delete(uri_string:, body: nil, headers: nil)
40
+ uri = URI.parse(uri_string)
41
+ http = Net::HTTP.new(uri.host, uri.port)
42
+ http.use_ssl = uri.scheme == 'https'
43
+
44
+ request_headers = {'Content-Type' => 'application/json'}.merge(headers || {})
45
+ request = Net::HTTP::Delete.new(uri.path, request_headers)
46
+ request.body = JSON.generate(body)
47
+ http.request(request)
48
+ end
49
+
50
+ # Required for sending data to Transbank on Onepay.
51
+ def keys_to_camel_case(hash)
52
+ hash.reduce({}) do |new_hash, (key, val)|
53
+ if val.is_a? Array
54
+ val = val.map {|value| value.is_a?(Hash) ? keys_to_camel_case(value) : value }
55
+ end
56
+ new_key = snake_to_camel_case(key.to_s)
57
+ new_hash[new_key] = val
58
+ new_hash
59
+ end
60
+ end
61
+
62
+ def snake_to_camel_case(str)
63
+ str.split('_').reduce { |string, current_word| string + current_word.capitalize }
64
+ end
65
+
66
+ def webpay_headers(commerce_code:, api_key:)
67
+ {
68
+ "Tbk-Api-Key-Id" => commerce_code,
69
+ "Tbk-Api-Key-Secret" => api_key
70
+ }
71
+ end
72
+
73
+ def patpass_comercio_headers(commerce_code:, api_key:)
74
+ {
75
+ "commercecode" => commerce_code,
76
+ "Authorization" => api_key
77
+ }
78
+ end
79
+
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,9 @@
1
+ require 'transbank/sdk/utils/json_utils'
2
+ require 'transbank/sdk/utils/net_helper'
3
+ require 'transbank/sdk/utils/signature_utils'
4
+ require 'transbank/sdk/utils/request_builder'
5
+
6
+ module Transbank
7
+ module Onepay
8
+ end
9
+ end
@@ -1,5 +1,5 @@
1
1
  module Transbank
2
2
  module Sdk
3
- VERSION = "1.1.0"
3
+ VERSION = "1.2.0"
4
4
  end
5
5
  end
@@ -0,0 +1,8 @@
1
+ module Transbank
2
+ module Webpay
3
+ module Errors
4
+ class IntegrationTypeError < ::Transbank::Errors::TransbankError
5
+ end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,14 @@
1
+ module Transbank
2
+ module Webpay
3
+ module Errors
4
+ class WebpayError < ::Transbank::Errors::TransbankError
5
+ attr_accessor :message, :code
6
+ def initialize(message, code = nil)
7
+ self.message = message
8
+ self.code = code
9
+ super(message)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
22
  spec.require_paths = ["lib"]
23
23
 
24
- spec.add_development_dependency "bundler", "~> 1.16"
24
+ spec.add_development_dependency "bundler", "~> 2.1.0"
25
25
  spec.add_development_dependency "rake", "~> 10.0"
26
26
  spec.add_development_dependency "minitest", "~> 5.0"
27
27
  spec.add_development_dependency "rubocop", "~> 0.59.2"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: transbank-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Transbank Developers
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-04-09 00:00:00.000000000 Z
11
+ date: 2019-12-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.16'
19
+ version: 2.1.0
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.16'
26
+ version: 2.1.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -145,7 +145,9 @@ extra_rdoc_files: []
145
145
  files:
146
146
  - ".built"
147
147
  - ".bundled"
148
+ - ".github/ISSUE_TEMPLATE/reporte-de-error.md"
148
149
  - ".gitignore"
150
+ - ".rakeTasks"
149
151
  - ".travis.yml"
150
152
  - CHANGELOG.md
151
153
  - Dockerfile
@@ -158,6 +160,29 @@ files:
158
160
  - bin/setup
159
161
  - docker-compose.yml
160
162
  - lib/transbank/sdk.rb
163
+ - lib/transbank/sdk/oneclick/errors/oneclick_error.rb
164
+ - lib/transbank/sdk/oneclick/inscription/errors/mall_inscription_delete_error.rb
165
+ - lib/transbank/sdk/oneclick/inscription/errors/mall_inscription_finish_error.rb
166
+ - lib/transbank/sdk/oneclick/inscription/errors/mall_inscription_start_error.rb
167
+ - lib/transbank/sdk/oneclick/inscription/errors/oneclick_mall_inscription_errors.rb
168
+ - lib/transbank/sdk/oneclick/inscription/inscription.rb
169
+ - lib/transbank/sdk/oneclick/inscription/responses/mall_inscription_delete_response.rb
170
+ - lib/transbank/sdk/oneclick/inscription/responses/mall_inscription_finish_response.rb
171
+ - lib/transbank/sdk/oneclick/inscription/responses/mall_inscription_start_response.rb
172
+ - lib/transbank/sdk/oneclick/inscription/responses/oneclick_mall_inscription_responses.rb
173
+ - lib/transbank/sdk/oneclick/mall/base.rb
174
+ - lib/transbank/sdk/oneclick/mall/errors/mall_transaction_authorize_error.rb
175
+ - lib/transbank/sdk/oneclick/mall/errors/mall_transaction_refund_error.rb
176
+ - lib/transbank/sdk/oneclick/mall/errors/mall_transaction_status_error.rb
177
+ - lib/transbank/sdk/oneclick/mall/errors/oneclick_mall_errors.rb
178
+ - lib/transbank/sdk/oneclick/mall/mall_inscription.rb
179
+ - lib/transbank/sdk/oneclick/mall/mall_transaction.rb
180
+ - lib/transbank/sdk/oneclick/mall/oneclick_mall.rb
181
+ - lib/transbank/sdk/oneclick/mall/responses/mall_transaction_authorize_response.rb
182
+ - lib/transbank/sdk/oneclick/mall/responses/mall_transaction_refund_response.rb
183
+ - lib/transbank/sdk/oneclick/mall/responses/mall_transaction_status_response.rb
184
+ - lib/transbank/sdk/oneclick/mall/responses/oneclick_mall_responses.rb
185
+ - lib/transbank/sdk/oneclick/oneclick.rb
161
186
  - lib/transbank/sdk/onepay/base.rb
162
187
  - lib/transbank/sdk/onepay/errors/errors.rb
163
188
  - lib/transbank/sdk/onepay/errors/integration_type_error.rb
@@ -186,12 +211,32 @@ files:
186
211
  - lib/transbank/sdk/onepay/responses/responses.rb
187
212
  - lib/transbank/sdk/onepay/responses/transaction_commit_response.rb
188
213
  - lib/transbank/sdk/onepay/responses/transaction_create_response.rb
189
- - lib/transbank/sdk/onepay/utils/json_utils.rb
190
- - lib/transbank/sdk/onepay/utils/net_helper.rb
191
- - lib/transbank/sdk/onepay/utils/request_builder.rb
192
- - lib/transbank/sdk/onepay/utils/signature_utils.rb
193
- - lib/transbank/sdk/onepay/utils/utils.rb
214
+ - lib/transbank/sdk/transaccion_completa/base.rb
215
+ - lib/transbank/sdk/transaccion_completa/errors/transaccion_completa_error.rb
216
+ - lib/transbank/sdk/transaccion_completa/errors/transaccion_completa_errors.rb
217
+ - lib/transbank/sdk/transaccion_completa/errors/transaction_commit_error.rb
218
+ - lib/transbank/sdk/transaccion_completa/errors/transaction_create_error.rb
219
+ - lib/transbank/sdk/transaccion_completa/errors/transaction_installments_error.rb
220
+ - lib/transbank/sdk/transaccion_completa/errors/transaction_refund_error.rb
221
+ - lib/transbank/sdk/transaccion_completa/errors/transaction_status_error.rb
222
+ - lib/transbank/sdk/transaccion_completa/options.rb
223
+ - lib/transbank/sdk/transaccion_completa/responses/transaccion_completa_responses.rb
224
+ - lib/transbank/sdk/transaccion_completa/responses/transaction_commit_response.rb
225
+ - lib/transbank/sdk/transaccion_completa/responses/transaction_create_response.rb
226
+ - lib/transbank/sdk/transaccion_completa/responses/transaction_installments_response.rb
227
+ - lib/transbank/sdk/transaccion_completa/responses/transaction_refund_response.rb
228
+ - lib/transbank/sdk/transaccion_completa/responses/transaction_status_response.rb
229
+ - lib/transbank/sdk/transaccion_completa/transaccion_completa.rb
230
+ - lib/transbank/sdk/transaccion_completa/transaction.rb
231
+ - lib/transbank/sdk/transbank_error.rb
232
+ - lib/transbank/sdk/utils/json_utils.rb
233
+ - lib/transbank/sdk/utils/net_helper.rb
234
+ - lib/transbank/sdk/utils/request_builder.rb
235
+ - lib/transbank/sdk/utils/signature_utils.rb
236
+ - lib/transbank/sdk/utils/utils.rb
194
237
  - lib/transbank/sdk/version.rb
238
+ - lib/transbank/sdk/webpay/errors/integration_type_error.rb
239
+ - lib/transbank/sdk/webpay/errors/webpay_error.rb
195
240
  - sdk_test.sh
196
241
  - transbank-sdk.gemspec
197
242
  homepage: https://www.transbankdevelopers.cl/
@@ -212,7 +257,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
212
257
  - !ruby/object:Gem::Version
213
258
  version: '0'
214
259
  requirements: []
215
- rubygems_version: 3.0.3
260
+ rubyforge_project:
261
+ rubygems_version: 2.7.7
216
262
  signing_key:
217
263
  specification_version: 4
218
264
  summary: Transbank SDK for Ruby
@@ -1,77 +0,0 @@
1
- module Transbank
2
- module Onepay
3
- module Utils
4
- module JSONUtils
5
- def self.included(mod)
6
- # Implement #to_h if the class that includes this module doesn't have it
7
- # implemented. Used in several model classes to make them easier to
8
- # transform to hashes so they can be transformed to JSON afterwards
9
- unless mod.respond_to? :to_h
10
- mod.send(:define_method, :to_h) do
11
- JSON.parse(self.jsonify)
12
- end
13
- end
14
- end
15
- # Get all instance variables of an instance of a class,
16
- # then for all of these variables,
17
- # if the instance of the class' respond_to? returns true,
18
- # #send the variable name (so, you'll get the value of the instance variable's
19
- # getter), then save that to a Hash where [key] is the instance variable's name
20
- # and [value] is its value
21
- #
22
- # Finally, generate a JSON string from this hash
23
- # @return [String] a JSON string created from the Hash resulting from the
24
- # above operation
25
- def jsonify
26
- instance_vars = instance_variables.map! { |var| var.to_s.gsub!(/^@/, '') }
27
- instance_as_hash =
28
- instance_vars.reduce({}) do |resulting_hash, instance_variable|
29
- if respond_to? instance_variable
30
- value = send(instance_variable)
31
- # Safe navigation operator is Ruby 2.3+
32
- value = value.to_h if value && value.respond_to?(:to_h) unless value.is_a? Array
33
- value = value.to_a if value && value.respond_to?(:to_a) unless value.is_a? Hash
34
- if value.is_a? Array
35
- value = value.map {|x| x.respond_to?(:jsonify) ? JSON.parse(x.jsonify) : x }
36
- end
37
-
38
- value = value.jsonify if value.respond_to? :jsonify
39
- resulting_hash[instance_variable] = value
40
- end
41
- resulting_hash
42
- end
43
- # Some values can't be null and must be removed if they are
44
- instance_as_hash.reject! do |key, value|
45
- %w[commerce_logo_url width_height].include?(key) && value.nil?
46
- end
47
- JSON.generate instance_as_hash
48
- end
49
-
50
- # Receive a Hash and return a new hash same as the one we received,
51
- # but all keys that were strings or camelCase'd are snake_case'd and
52
- # turned into symbols.
53
- # Example: {'camelCaseKey': "somevalue"}
54
- # Would return: {camel_case_key: "somevalue"}
55
- def transform_hash_keys(hash)
56
- hash.reduce({}) do |new_hsh, (key, val)|
57
- new_key = underscore(key).to_sym
58
- new_hsh[new_key] = val
59
- new_hsh
60
- end
61
- end
62
-
63
- # FROM https://stackoverflow.com/a/1509957
64
- # Transforms camelCaseWords to snake_case_words
65
- def underscore(camel_cased_word)
66
- camel_cased_word.to_s.gsub(/::/, '/')
67
- .gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
68
- .gsub(/([a-z\d])([A-Z])/,'\1_\2')
69
- .tr("-", "_")
70
- .downcase
71
- end
72
- end
73
- end
74
- end
75
- end
76
-
77
-
@@ -1,38 +0,0 @@
1
- module Transbank
2
- module Onepay
3
- module Utils
4
- module NetHelper
5
- # POST a request to Transbank's servers, and return the parsed response
6
- # @param uri_string [String] an URI to post to
7
- # @param body [Hash] the body of your POST request
8
- # @return [Hash] the JSON.parse'd response body
9
- def http_post(uri_string, body)
10
- uri = URI.parse(uri_string)
11
- http = Net::HTTP.new(uri.host, uri.port)
12
- http.use_ssl = uri.scheme == 'https'
13
- request = Net::HTTP::Post.new(uri.path, 'Content-Type'=> 'application/json')
14
- camel_cased_body = keys_to_camel_case(body)
15
- request.body = JSON.generate(camel_cased_body)
16
- result = http.request(request)
17
- JSON.parse(result.body)
18
- end
19
-
20
- # Required for sending data to Transbank.
21
- def keys_to_camel_case(hash)
22
- hash.reduce({}) do |new_hash, (key, val)|
23
- if val.is_a? Array
24
- val = val.map {|value| value.is_a?(Hash) ? keys_to_camel_case(value) : value }
25
- end
26
- new_key = snake_to_camel_case(key.to_s)
27
- new_hash[new_key] = val
28
- new_hash
29
- end
30
- end
31
-
32
- def snake_to_camel_case(str)
33
- str.split('_').reduce { |string, current_word| string + current_word.capitalize }
34
- end
35
- end
36
- end
37
- end
38
- end