veritrans 2.1.2 → 2.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +10 -1
- data/.idea/.gitignore +8 -0
- data/.rubocop.yml +35 -0
- data/.travis.yml +10 -5
- data/CHANGELOG.md +45 -0
- data/Gemfile +6 -7
- data/Gemfile.lock +134 -146
- data/Maintaining.MD +8 -0
- data/README.md +266 -226
- data/api_reference.md +534 -143
- data/example/coreapi/core_api_credit_card_example.rb +66 -0
- data/example/coreapi/readme.md +4 -0
- data/example/sinatra/Gemfile +7 -0
- data/example/sinatra/README.md +6 -0
- data/example/sinatra/index.erb +202 -0
- data/example/sinatra/response.erb +1 -0
- data/example/sinatra/snap.erb +33 -0
- data/example/sinatra/snap_redirect.erb +10 -0
- data/example/sinatra/webapp.rb +113 -0
- data/example/snap/readme.md +4 -0
- data/example/snap/snap_example.rb +39 -0
- data/lib/test/all.rb +1 -0
- data/lib/test/api_test.rb +319 -0
- data/lib/test/config_test.rb +26 -0
- data/lib/test/gopay_tokenization_test.rb +80 -0
- data/lib/test/snap_test.rb +79 -0
- data/lib/test/subscription_test.rb +116 -0
- data/lib/test/transaction_test.rb +160 -0
- data/lib/veritrans/api.rb +146 -22
- data/lib/veritrans/client.rb +48 -12
- data/lib/veritrans/config.rb +31 -6
- data/lib/veritrans/events.rb +46 -35
- data/lib/veritrans/midtrans_error.rb +15 -0
- data/lib/veritrans/result.rb +66 -5
- data/lib/veritrans/version.rb +1 -1
- data/lib/veritrans.rb +121 -12
- data/veritrans.gemspec +2 -9
- metadata +30 -146
- data/.rspec +0 -2
- data/Procfile +0 -1
- data/Rakefile +0 -16
- data/bin/midtrans +0 -3
- data/bin/veritrans +0 -68
- data/example/README.md +0 -8
- data/example/config.ru +0 -6
- data/example/index.erb +0 -213
- data/example/localization.erb +0 -248
- data/example/points.erb +0 -187
- data/example/recurring.erb +0 -201
- data/example/response.erb +0 -37
- data/example/sinatra.rb +0 -188
- data/example/style.css +0 -126
- data/example/veritrans.yml +0 -11
- data/example/widget.erb +0 -51
- data/lib/generators/templates/assets/credit_card_form.js +0 -51
- data/lib/generators/templates/payments_controller.rb +0 -85
- data/lib/generators/templates/veritrans.rb +0 -46
- data/lib/generators/templates/veritrans.yml +0 -18
- data/lib/generators/templates/views/_credit_card_form.erb +0 -42
- data/lib/generators/templates/views/_veritrans_include.erb +0 -10
- data/lib/generators/templates/views/payments/create.erb +0 -15
- data/lib/generators/templates/views/payments/new.erb +0 -6
- data/lib/generators/veritrans/install_generator.rb +0 -32
- data/lib/generators/veritrans/payment_form_generator.rb +0 -45
- data/lib/veritrans/cli.rb +0 -155
- data/lib/veritrans/core_extensions.rb +0 -32
- data/spec/cli_spec.rb +0 -83
- data/spec/configs/real_key.yml +0 -4
- data/spec/configs/veritrans.yml +0 -7
- data/spec/configs/veritrans_flat.yml +0 -2
- data/spec/configs/veritrans_with_erb.yml +0 -2
- data/spec/fixtures/approve_failed.yml +0 -48
- data/spec/fixtures/cancel_failed.yml +0 -48
- data/spec/fixtures/cancel_success.yml +0 -106
- data/spec/fixtures/capture_failed.yml +0 -48
- data/spec/fixtures/charge.yml +0 -50
- data/spec/fixtures/charge_direct.yml +0 -56
- data/spec/fixtures/charge_vtweb.yml +0 -50
- data/spec/fixtures/cli_test_1111-not-exists.yml +0 -45
- data/spec/fixtures/cli_test_not_exists.yml +0 -45
- data/spec/fixtures/cli_test_real_txn.yml +0 -55
- data/spec/fixtures/cli_test_unauthorized.yml +0 -47
- data/spec/fixtures/events_test_real_txn.yml +0 -55
- data/spec/fixtures/expire_failed.yml +0 -50
- data/spec/fixtures/expire_success.yml +0 -56
- data/spec/fixtures/midtrans_status.yml +0 -117
- data/spec/fixtures/status_fail.yml +0 -46
- data/spec/fixtures/status_success.yml +0 -109
- data/spec/midtrans_rename_spec.rb +0 -27
- data/spec/rails_plugin_spec.rb +0 -281
- data/spec/spec_helper.rb +0 -61
- data/spec/veritrans_client_spec.rb +0 -184
- data/spec/veritrans_config_spec.rb +0 -70
- data/spec/veritrans_events_spec.rb +0 -72
- data/spec/veritrans_logger_spec.rb +0 -46
- data/spec/veritrans_snap_spec.rb +0 -39
- data/testing_webhooks.md +0 -78
data/lib/veritrans/events.rb
CHANGED
@@ -1,41 +1,45 @@
|
|
1
|
-
# Rack based event notification callback processor
|
2
|
-
#
|
3
|
-
# Usage:
|
4
|
-
#
|
5
|
-
# Rails.application.routes.draw do
|
6
|
-
# ...
|
7
|
-
# mount Veritrans::Events.new => '/vt_events'
|
8
|
-
# end
|
9
|
-
#
|
10
|
-
# Veritrans.events.subscribe('payment.success') do |payment|
|
11
|
-
# payment.mark_paid!(payment.masked_card)
|
12
|
-
# end
|
13
|
-
#
|
14
|
-
|
15
|
-
# All possible events:
|
16
|
-
#
|
17
|
-
# * payment.success == ['authorize', 'capture', 'settlement']
|
18
|
-
# * payment.failed == ['deny', 'cancel', 'expire']
|
19
|
-
# * payment.challenge # when payment.fraud_status == 'challenge'
|
20
|
-
#
|
21
|
-
# * payment.authorize
|
22
|
-
# * payment.capture
|
23
|
-
# * payment.settlement
|
24
|
-
# * payment.deny
|
25
|
-
# * payment.cancel
|
26
|
-
# * payment.expire
|
27
|
-
#
|
28
|
-
# * error
|
29
|
-
|
30
|
-
# For sinatra you can use Rack::URLMap
|
31
|
-
#
|
32
|
-
# run Rack::URLMap.new("/" => MyApp.new, "/payment_events" => Veritrans::Events.new)
|
33
|
-
#
|
34
|
-
|
35
1
|
class Veritrans
|
2
|
+
#
|
3
|
+
# Rack based event notification callback processor
|
4
|
+
#
|
5
|
+
# Usage:
|
6
|
+
#
|
7
|
+
# Rails.application.routes.draw do
|
8
|
+
# # ...
|
9
|
+
# mount Veritrans::Events.new => '/vt_events'
|
10
|
+
# end
|
11
|
+
#
|
12
|
+
# Veritrans::Events.subscribe('payment.success') do |payment|
|
13
|
+
# payment.mark_paid!(payment.masked_card)
|
14
|
+
# end
|
15
|
+
#
|
16
|
+
#
|
17
|
+
# All possible events:
|
18
|
+
#
|
19
|
+
# * payment.success == ['authorize', 'capture', 'settlement']
|
20
|
+
# * payment.failed == ['deny', 'cancel', 'expire']
|
21
|
+
# * payment.challenge # when payment.fraud_status == 'challenge'
|
22
|
+
#
|
23
|
+
# * payment.authorize
|
24
|
+
# * payment.capture
|
25
|
+
# * payment.settlement
|
26
|
+
# * payment.deny
|
27
|
+
# * payment.cancel
|
28
|
+
# * payment.expire
|
29
|
+
#
|
30
|
+
# * error
|
31
|
+
#
|
32
|
+
# For sinatra you can use Rack::URLMap
|
33
|
+
#
|
34
|
+
# run Rack::URLMap.new("/" => MyApp.new, "/payment_events" => Veritrans::Events.new)
|
35
|
+
#
|
36
36
|
class Events
|
37
37
|
|
38
38
|
# This is rack application
|
39
|
+
# Can be used as:
|
40
|
+
#
|
41
|
+
# use Veritrans::Events.new
|
42
|
+
#
|
39
43
|
def call(env)
|
40
44
|
Veritrans.logger.info "Receive notification callback"
|
41
45
|
|
@@ -92,7 +96,7 @@ class Veritrans
|
|
92
96
|
return send_text("Server error:\n#{error.message}", 500)
|
93
97
|
end
|
94
98
|
|
95
|
-
def send_text(body, status = 200)
|
99
|
+
def send_text(body, status = 200) # :nodoc:
|
96
100
|
[status, {"Content-Type" => "text/html"}, [body]]
|
97
101
|
end
|
98
102
|
|
@@ -101,6 +105,12 @@ class Veritrans
|
|
101
105
|
class << self
|
102
106
|
attr_accessor :listeners
|
103
107
|
|
108
|
+
# Subscribe for events. The event object will be an instance of Midtrans::Result
|
109
|
+
#
|
110
|
+
# Midtrans::Events.subscribe('payment.success') do |payment_status|
|
111
|
+
# Order.find_by(order_id: payment_status.order_id).mark_paid!
|
112
|
+
# end
|
113
|
+
#
|
104
114
|
def subscribe(*event_types, &handler)
|
105
115
|
@listeners ||= []
|
106
116
|
event_types.each do |event_type|
|
@@ -108,6 +118,7 @@ class Veritrans
|
|
108
118
|
end
|
109
119
|
end
|
110
120
|
|
121
|
+
# Used internally to dispatch event
|
111
122
|
def dispatch(new_event, event_data)
|
112
123
|
@listeners.each do |pair|
|
113
124
|
event_type, handler = *pair
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class MidtransError < StandardError
|
2
|
+
attr_reader :status
|
3
|
+
alias_method :http_status_code, :status
|
4
|
+
attr_reader :data
|
5
|
+
alias_method :api_response, :data
|
6
|
+
attr_reader :response
|
7
|
+
alias_method :raw_http_client_data, :response
|
8
|
+
|
9
|
+
def initialize(message, http_status_code = nil, api_response = nil, raw_http_client_data = nil)
|
10
|
+
super(message)
|
11
|
+
@status = http_status_code
|
12
|
+
@data = api_response
|
13
|
+
@response = raw_http_client_data
|
14
|
+
end
|
15
|
+
end
|
data/lib/veritrans/result.rb
CHANGED
@@ -1,10 +1,46 @@
|
|
1
1
|
class Veritrans
|
2
|
+
# Midtrans response object, a wrapper for raw response object plus helper methods
|
3
|
+
#
|
4
|
+
# Usual response body for Midtrans.charge or Midtrans.status will look like this:
|
5
|
+
#
|
6
|
+
# {
|
7
|
+
# "status_code": "200",
|
8
|
+
# "status_message": "Success, Mandiri Clickpay transaction is successful",
|
9
|
+
# "transaction_id": "d788e503-3fab-4296-9c10-83b107324cb9",
|
10
|
+
# "order_id": "2016-11-14 11:54:03 +0800",
|
11
|
+
# "gross_amount": "10000.00",
|
12
|
+
# "payment_type": "mandiri_clickpay",
|
13
|
+
# "transaction_time": "2016-11-14 10:54:02",
|
14
|
+
# "transaction_status": "settlement",
|
15
|
+
# "fraud_status": "accept",
|
16
|
+
# "approval_code": "1479095646260",
|
17
|
+
# "masked_card": "411111-1111"
|
18
|
+
# }
|
19
|
+
#
|
20
|
+
# Result object can be used like this:
|
21
|
+
#
|
22
|
+
# result.success? # => true
|
23
|
+
# result.status_code # => 200
|
24
|
+
# result.transaction_status # => "settlement"
|
25
|
+
# result.fraud_status # => "accept"
|
26
|
+
# result.approval_code # => "1479095646260"
|
27
|
+
# result.masked_card # => "411111-1111"
|
28
|
+
#
|
29
|
+
# result.data # => {:status_code => "200", :status_message => "Success, Mandiri ..."} # add data as hash
|
30
|
+
# result.time # => 1.3501
|
31
|
+
#
|
2
32
|
class Result
|
33
|
+
# Response body parsed as hash
|
3
34
|
attr_reader :data
|
35
|
+
# HTTP status code, should always be 200
|
4
36
|
attr_reader :status
|
37
|
+
# Excon::Response object
|
5
38
|
attr_reader :response
|
39
|
+
# Request options, a hash with :path, :method, :headers, :body
|
6
40
|
attr_reader :request_options
|
41
|
+
# HTTP request time, a Float
|
7
42
|
attr_reader :time
|
43
|
+
# Request full URL, e.g. "https://api.sandbox.midtrans.com/v2/charge"
|
8
44
|
attr_reader :url
|
9
45
|
|
10
46
|
def initialize(response, url, request_options, time)
|
@@ -33,28 +69,33 @@ class Veritrans
|
|
33
69
|
@request_options = request_options
|
34
70
|
end
|
35
71
|
|
72
|
+
# Return whenever transaction is successful, based on <tt>status_code</tt>
|
36
73
|
def success?
|
37
74
|
@data[:status_code] == '200' || @data[:status_code] == '201' || @data[:status_code] == '407'
|
38
75
|
end
|
39
76
|
|
40
|
-
#
|
77
|
+
# Return if VT-Link page was created
|
41
78
|
def created?
|
42
79
|
@data[:status_code] == '201'
|
43
80
|
end
|
44
81
|
|
45
|
-
#
|
82
|
+
# Return <tt>"status_code"</tt> field of response
|
83
|
+
# Docs https://api-docs.midtrans.com/#status-code
|
46
84
|
def status_code
|
47
85
|
@data[:status_code].to_i
|
48
86
|
end
|
49
87
|
|
88
|
+
# Return <tt>"status_message"</tt> field of response
|
50
89
|
def status_message
|
51
90
|
@data[:status_message]
|
52
91
|
end
|
53
92
|
|
93
|
+
# Return <tt>"redirect_url"</tt> field of response
|
54
94
|
def redirect_url
|
55
95
|
@data[:redirect_url]
|
56
96
|
end
|
57
97
|
|
98
|
+
# Return <tt>"transaction_id"</tt> field of response
|
58
99
|
def transaction_id
|
59
100
|
@data[:transaction_id]
|
60
101
|
end
|
@@ -67,6 +108,7 @@ class Veritrans
|
|
67
108
|
end
|
68
109
|
end
|
69
110
|
|
111
|
+
# Raw response body as String
|
70
112
|
def body
|
71
113
|
response.body
|
72
114
|
end
|
@@ -86,17 +128,36 @@ class Veritrans
|
|
86
128
|
end
|
87
129
|
end
|
88
130
|
|
131
|
+
# SNAP response object
|
89
132
|
class SnapResult < Result
|
133
|
+
|
134
|
+
# HTTP response status code
|
90
135
|
def status_code
|
91
136
|
@response.status.to_i
|
92
137
|
end
|
93
138
|
|
139
|
+
# DEPRECATED, please use #token instead
|
94
140
|
def token_id
|
95
|
-
|
141
|
+
if defined?(ActiveSupport::Deprecation)
|
142
|
+
ActiveSupport::Deprecation.warn("`token_id` on SnapResult is deprecated. Please use `token` instead.")
|
143
|
+
else
|
144
|
+
warn "DEPRECATION WARNING: `token_id` on SnapResult is deprecated. Please use `token` instead."
|
145
|
+
end
|
146
|
+
@data[:token]
|
147
|
+
end
|
148
|
+
|
149
|
+
# Acccessor for <tt>token</tt> value
|
150
|
+
def token
|
151
|
+
@data[:token]
|
152
|
+
end
|
153
|
+
|
154
|
+
# Acccessor for <tt>redirect_url</tt> value
|
155
|
+
def redirect_url
|
156
|
+
@data[:redirect_url]
|
96
157
|
end
|
97
158
|
|
98
159
|
def success?
|
99
|
-
status_code ==
|
160
|
+
status_code == 201
|
100
161
|
end
|
101
162
|
end
|
102
|
-
end
|
163
|
+
end
|
data/lib/veritrans/version.rb
CHANGED
data/lib/veritrans.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
require 'veritrans/version'
|
2
|
-
require 'veritrans/core_extensions'
|
3
2
|
require 'veritrans/config'
|
4
3
|
require 'veritrans/client'
|
5
4
|
require 'veritrans/api'
|
6
5
|
require 'veritrans/result'
|
6
|
+
require 'veritrans/midtrans_error'
|
7
7
|
|
8
8
|
if defined?(::Rails)
|
9
9
|
require 'veritrans/events'
|
@@ -13,18 +13,29 @@ class Veritrans
|
|
13
13
|
include Veritrans::Client
|
14
14
|
include Veritrans::Api
|
15
15
|
|
16
|
+
autoload :Events, 'veritrans/events'
|
17
|
+
|
16
18
|
class << self
|
17
19
|
extend Forwardable
|
18
20
|
|
19
21
|
def_delegators :instance, :logger, :logger=, :config, :setup, :file_logger, :file_logger=
|
20
|
-
def_delegators :instance, :request_with_logging, :basic_auth_header, :get, :post, :delete, :make_request
|
21
|
-
def_delegators :instance, :charge, :cancel, :approve, :status, :capture, :expire
|
22
|
-
def_delegators :instance, :create_vtlink, :delete_vtlink, :inquiry_points, :create_widget_token, :create_snap_token
|
22
|
+
def_delegators :instance, :request_with_logging, :basic_auth_header, :get, :post, :delete, :make_request, :patch
|
23
|
+
def_delegators :instance, :charge, :cancel, :approve, :status, :capture, :expire, :refund, :deny
|
24
|
+
def_delegators :instance, :create_vtlink, :delete_vtlink, :inquiry_points, :create_widget_token, :create_snap_redirect_url, :create_snap_token, :create_snap_token_string, :create_snap_redirect_url_str, :test_token, :create_card_token
|
25
|
+
def_delegators :instance, :link_payment_account, :get_payment_account, :unlink_payment_account, :create_subscription, :get_subscription, :disable_subscription, :enable_subscription, :update_subscription
|
26
|
+
def_delegators :instance, :checksum, :events
|
23
27
|
|
28
|
+
# Shortcut for Veritrans::Events
|
24
29
|
def events
|
30
|
+
if defined?(ActiveSupport::Deprecation)
|
31
|
+
ActiveSupport::Deprecation.warn("`Veritrans.events` is deprecated. Please use `Veritrans::Events`.")
|
32
|
+
else
|
33
|
+
warn "`Veritrans.events` is deprecated. Please use `Veritrans::Events`."
|
34
|
+
end
|
25
35
|
Veritrans::Events if defined?(Veritrans::Events)
|
26
36
|
end
|
27
37
|
|
38
|
+
# More safe json parser
|
28
39
|
def decode_notification_json(input)
|
29
40
|
return Veritrans::Client._json_decode(input)
|
30
41
|
end
|
@@ -35,6 +46,23 @@ class Veritrans
|
|
35
46
|
|
36
47
|
end
|
37
48
|
|
49
|
+
def events
|
50
|
+
self.class.events
|
51
|
+
end
|
52
|
+
|
53
|
+
# If you want to use multiple instances of Midtrans in your code (e.g. process payments in different accounts),
|
54
|
+
# then you can create instance of Midtrans client
|
55
|
+
#
|
56
|
+
# mt_client = Midtrans.new(
|
57
|
+
# server_key: "My-Different-Key",
|
58
|
+
# client_key: "...",
|
59
|
+
# api_host: "https://api.sandbox.midtrans.com", # default
|
60
|
+
# http_options: { }, # optional
|
61
|
+
# logger: Logger.new(STDOUT), # optional
|
62
|
+
# file_logger: Logger.new(STDOUT), # optional
|
63
|
+
# )
|
64
|
+
# mt_client.status("my-different-order-id")
|
65
|
+
#
|
38
66
|
def initialize(options = nil)
|
39
67
|
if options && options[:logger]
|
40
68
|
self.logger = options.delete(:logger)
|
@@ -51,6 +79,22 @@ class Veritrans
|
|
51
79
|
end
|
52
80
|
end
|
53
81
|
|
82
|
+
# Midtrans configuration. Can be used as DSL and as object
|
83
|
+
#
|
84
|
+
# Use with block:
|
85
|
+
#
|
86
|
+
# Midtrans.setup do
|
87
|
+
# config.load_yml "./midtrans.yml", Rails.env # load values from config
|
88
|
+
# # also can set one by one:
|
89
|
+
# config.server_key = "..."
|
90
|
+
# config.client_key = "..."
|
91
|
+
# config.api_host = "https://api.sandbox.midtrans.com" # (default)
|
92
|
+
# end
|
93
|
+
#
|
94
|
+
# Use as object:
|
95
|
+
#
|
96
|
+
# Midtrans.config.server_key
|
97
|
+
#
|
54
98
|
def config(&block)
|
55
99
|
if block
|
56
100
|
instance_eval(&block)
|
@@ -58,12 +102,59 @@ class Veritrans
|
|
58
102
|
@config ||= Veritrans::Config.new
|
59
103
|
end
|
60
104
|
end
|
61
|
-
|
62
105
|
alias_method :setup, :config
|
63
106
|
|
64
|
-
#
|
65
|
-
#
|
66
|
-
#
|
107
|
+
# Calculate signature_key sha512 checksum for validating HTTP notifications
|
108
|
+
#
|
109
|
+
# Arguments:
|
110
|
+
# [params] A hash, should contain <tt>:order_id, :status_code, :gross_amount</tt>.
|
111
|
+
# Additional key <tt>:server_key</tt> is required if Midtrans.config.server_key is not set
|
112
|
+
#
|
113
|
+
# Example
|
114
|
+
#
|
115
|
+
# Midtrans.checksum(order_id: "aa11", status_code: "200", gross_amount: 1000, server_key: "my-key")
|
116
|
+
# # => "5e00499b23a8932e833238b2f65dd4dd3d10451708c7ec4d93da69e8e7a2bac4f7f97f9f35a986a7d100d7fc58034e12..."
|
117
|
+
#
|
118
|
+
# Raises:
|
119
|
+
# - <tt>ArgumentError</tt> when missing or invalid parameters
|
120
|
+
#
|
121
|
+
def checksum(params)
|
122
|
+
require 'digest' unless defined?(Digest)
|
123
|
+
|
124
|
+
params_sym = {}
|
125
|
+
params.each do |key, value|
|
126
|
+
params_sym[key.to_sym] = value
|
127
|
+
end
|
128
|
+
|
129
|
+
if (config.server_key.nil? || config.server_key == "") && params_sym[:server_key].nil?
|
130
|
+
raise ArgumentError, "Server key is required. Please set Veritrans.config.server_key or :server_key key"
|
131
|
+
end
|
132
|
+
|
133
|
+
required = [:order_id, :status_code, :gross_amount]
|
134
|
+
missing = required - params_sym.keys.select {|k| !!params_sym[k] }
|
135
|
+
if missing.size > 0
|
136
|
+
raise ArgumentError, "Missing required parameters: #{missing.map(&:inspect).join(", ")}"
|
137
|
+
end
|
138
|
+
|
139
|
+
if params_sym[:gross_amount].is_a?(Numeric)
|
140
|
+
params_sym[:gross_amount] = "%0.2f" % params_sym[:gross_amount]
|
141
|
+
elsif params_sym[:gross_amount].is_a?(String) && params_sym[:gross_amount] !~ /\d+\.\d\d$/
|
142
|
+
raise ArgumentError, %{gross_amount has invalid format, should be a number or string with cents e.g "52.00" (given: #{params_sym[:gross_amount].inspect})}
|
143
|
+
end
|
144
|
+
|
145
|
+
seed = "#{params_sym[:order_id]}#{params_sym[:status_code]}" +
|
146
|
+
"#{params_sym[:gross_amount]}#{params_sym[:server_key] || config.server_key}"
|
147
|
+
|
148
|
+
logger.debug("checksum source: #{seed}")
|
149
|
+
|
150
|
+
Digest::SHA2.new(512).hexdigest(seed)
|
151
|
+
end
|
152
|
+
|
153
|
+
# General Midtrans logger.
|
154
|
+
# For rails apps it will try to use <tt>Rails.logger</tt>, for non-rails apps -- it print to stdout
|
155
|
+
#
|
156
|
+
# Midtrans.logger.info "Processing payment"
|
157
|
+
#
|
67
158
|
def logger
|
68
159
|
return @logger if @logger
|
69
160
|
if defined?(Rails)
|
@@ -78,6 +169,10 @@ class Veritrans
|
|
78
169
|
end
|
79
170
|
end
|
80
171
|
|
172
|
+
# Set custom logger
|
173
|
+
#
|
174
|
+
# Midtrans.logger = Logger.new("./log/midtrans.log")
|
175
|
+
#
|
81
176
|
def logger=(value)
|
82
177
|
@logger = value
|
83
178
|
end
|
@@ -86,10 +181,19 @@ class Veritrans
|
|
86
181
|
# For rails apps it will write log to RAILS_ROOT/log/veritrans.log
|
87
182
|
def file_logger
|
88
183
|
if !@file_logger
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
184
|
+
require 'logger'
|
185
|
+
begin
|
186
|
+
if defined?(Rails) && Rails.root
|
187
|
+
require 'fileutils'
|
188
|
+
FileUtils.mkdir_p(Rails.root.join("log"))
|
189
|
+
@file_logger = Logger.new(Rails.root.join("log/veritrans.log").to_s)
|
190
|
+
else
|
191
|
+
@file_logger = Logger.new("/dev/null")
|
192
|
+
end
|
193
|
+
rescue => error
|
194
|
+
STDERR.puts "Failed to create Midtrans.file_logger, will use /dev/null"
|
195
|
+
STDERR.puts "#{error.class}: #{error.message}"
|
196
|
+
STDERR.puts error.backtrace
|
93
197
|
@file_logger = Logger.new("/dev/null")
|
94
198
|
end
|
95
199
|
end
|
@@ -97,10 +201,15 @@ class Veritrans
|
|
97
201
|
@file_logger
|
98
202
|
end
|
99
203
|
|
204
|
+
# Set custom file_logger
|
205
|
+
#
|
206
|
+
# Midtrans.file_logger = Logger.new("./log/midtrans.log")
|
207
|
+
#
|
100
208
|
def file_logger=(value)
|
101
209
|
@file_logger = value
|
102
210
|
end
|
103
211
|
|
104
212
|
end
|
105
213
|
|
214
|
+
# Alias constant for new name of company
|
106
215
|
Midtrans = Veritrans
|
data/veritrans.gemspec
CHANGED
@@ -6,7 +6,7 @@ Gem::Specification.new do |s|
|
|
6
6
|
s.version = Veritrans::VERSION
|
7
7
|
s.author = ["Veritrans Dev Team"]
|
8
8
|
s.description= "Veritrans ruby client"
|
9
|
-
s.email = ["
|
9
|
+
s.email = ["pavel.evstigneev@midtrans.com"]
|
10
10
|
s.homepage = "https://github.com/veritrans/veritrans-ruby"
|
11
11
|
s.summary = %q{Veritrans ruby library}
|
12
12
|
s.license = 'MIT'
|
@@ -14,15 +14,8 @@ Gem::Specification.new do |s|
|
|
14
14
|
s.files = `git ls-files`.split("\n")
|
15
15
|
s.test_files = []
|
16
16
|
|
17
|
-
s.require_paths = ["lib"]
|
18
|
-
s.executables = ["veritrans", "midtrans"]
|
17
|
+
s.require_paths = ["lib"]
|
19
18
|
|
20
19
|
s.add_runtime_dependency "excon", "~> 0.20"
|
21
|
-
|
22
|
-
s.add_development_dependency "rspec", '~> 3.4'
|
23
|
-
s.add_development_dependency "rails", ">= 4.0", "< 6"
|
24
|
-
s.add_development_dependency 'webmock', '>= 1.20'
|
25
|
-
s.add_development_dependency 'vcr', '~> 3.0'
|
26
|
-
s.add_development_dependency "poltergeist", '~> 1.8'
|
27
20
|
end
|
28
21
|
|