killbill 5.1.0 → 5.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.
- checksums.yaml +4 -4
- data/Gemfile.lock +2 -5
- data/Jarfile +8 -8
- data/Jarfile.lock +8 -8
- data/NEWS +3 -0
- data/generators/active_merchant/templates/Jarfile.rb +8 -8
- data/lib/killbill/gen/api/account.rb +19 -19
- data/lib/killbill/gen/api/dry_run_arguments.rb +15 -8
- data/lib/killbill/gen/api/immutable_account_data.rb +82 -0
- data/lib/killbill/gen/api/invoice_payment.rb +13 -1
- data/lib/killbill/gen/api/require_gen.rb +1 -0
- data/lib/killbill/gen/plugin-api/invoice_plugin_api.rb +11 -3
- data/lib/killbill/helpers/active_merchant/active_record/models/transaction.rb +9 -20
- data/lib/killbill/helpers/active_merchant/payment_plugin.rb +2 -1
- data/lib/killbill/invoice.rb +1 -1
- data/lib/killbill/version.rb +1 -1
- data/spec/killbill/helpers/payment_plugin_spec.rb +62 -2
- data/spec/killbill/helpers/transaction_spec.rb +23 -1
- data/spec/killbill/invoice_plugin_api_spec.rb +1 -1
- data/spec/killbill/invoice_plugin_spec.rb +1 -1
- data/spec/killbill/invoice_test.rb +1 -1
- metadata +5 -36
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4267aac031e411928647f3f7958a91afb9bef67a
|
|
4
|
+
data.tar.gz: 9027ef5b616bd146e07386d67120b9fea7120c03
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5a8cc8856a04eac9d2161b6ac28d35acf0f3a6bc0e6898e19aec5f87bf9a6d02b80ab02ab5d37471eec6afe35f49f5bc99e3f39f18e2906eddb7450881db713e
|
|
7
|
+
data.tar.gz: 42c3432815d7f6f94fecd91152ae2234dd77a3e5be840c34a3eb5b46c43ba58270e71fa46d0337ecdabe2207be22ab1fb2a76460ec0205f03026df0813dbc610
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
killbill (5.
|
|
4
|
+
killbill (5.2.0)
|
|
5
5
|
rack (>= 1.5.2)
|
|
6
6
|
sinatra (~> 1.3.4)
|
|
7
7
|
typhoeus (~> 0.6.9)
|
|
@@ -50,7 +50,7 @@ GEM
|
|
|
50
50
|
erubis (2.7.0)
|
|
51
51
|
ethon (0.7.4)
|
|
52
52
|
ffi (>= 1.3.0)
|
|
53
|
-
ffi (1.9.
|
|
53
|
+
ffi (1.9.9-java)
|
|
54
54
|
i18n (0.7.0)
|
|
55
55
|
jbundler (0.4.3)
|
|
56
56
|
maven-tools (~> 0.32.1)
|
|
@@ -129,6 +129,3 @@ DEPENDENCIES
|
|
|
129
129
|
rspec (~> 2.12.0)
|
|
130
130
|
thor (~> 0.19.1)
|
|
131
131
|
thread_safe (~> 0.3.4)
|
|
132
|
-
|
|
133
|
-
BUNDLED WITH
|
|
134
|
-
1.10.6
|
data/Jarfile
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
jar 'org.kill-bill.billing:killbill-api', '0.
|
|
2
|
-
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-currency', '0.
|
|
3
|
-
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-invoice', '0.
|
|
4
|
-
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-notification', '0.
|
|
5
|
-
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-payment', '0.
|
|
6
|
-
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-
|
|
7
|
-
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-catalog', '0.
|
|
8
|
-
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-entitlement', '0.
|
|
1
|
+
jar 'org.kill-bill.billing:killbill-api', '0.23'
|
|
2
|
+
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-currency', '0.16'
|
|
3
|
+
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-invoice', '0.16'
|
|
4
|
+
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-notification', '0.16'
|
|
5
|
+
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-payment', '0.16'
|
|
6
|
+
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-control', '0.16'
|
|
7
|
+
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-catalog', '0.16'
|
|
8
|
+
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-entitlement', '0.16'
|
|
9
9
|
jar 'org.kill-bill.billing:killbill-util:tests', '0.14.0'
|
|
10
10
|
jar 'org.mockito:mockito-all', '1.10.19'
|
|
11
11
|
jar 'javax.servlet:javax.servlet-api', '3.1.0'
|
data/Jarfile.lock
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
org.kill-bill.billing:killbill-api:jar:0.
|
|
1
|
+
org.kill-bill.billing:killbill-api:jar:0.23
|
|
2
2
|
com.fasterxml.jackson.core:jackson-annotations:jar:2.4.3
|
|
3
3
|
joda-time:joda-time:jar:2.3
|
|
4
|
-
org.kill-bill.billing.plugin:killbill-plugin-api-currency:jar:0.
|
|
5
|
-
org.kill-bill.billing.plugin:killbill-plugin-api-invoice:jar:0.
|
|
6
|
-
org.kill-bill.billing.plugin:killbill-plugin-api-notification:jar:0.
|
|
7
|
-
org.kill-bill.billing.plugin:killbill-plugin-api-payment:jar:0.
|
|
8
|
-
org.kill-bill.billing.plugin:killbill-plugin-api-
|
|
9
|
-
org.kill-bill.billing.plugin:killbill-plugin-api-catalog:jar:0.
|
|
10
|
-
org.kill-bill.billing.plugin:killbill-plugin-api-entitlement:jar:0.
|
|
4
|
+
org.kill-bill.billing.plugin:killbill-plugin-api-currency:jar:0.15
|
|
5
|
+
org.kill-bill.billing.plugin:killbill-plugin-api-invoice:jar:0.15
|
|
6
|
+
org.kill-bill.billing.plugin:killbill-plugin-api-notification:jar:0.15
|
|
7
|
+
org.kill-bill.billing.plugin:killbill-plugin-api-payment:jar:0.15
|
|
8
|
+
org.kill-bill.billing.plugin:killbill-plugin-api-control:jar:0.15
|
|
9
|
+
org.kill-bill.billing.plugin:killbill-plugin-api-catalog:jar:0.15
|
|
10
|
+
org.kill-bill.billing.plugin:killbill-plugin-api-entitlement:jar:0.15
|
|
11
11
|
org.kill-bill.billing:killbill-util:jar:tests:0.14.0
|
|
12
12
|
com.fasterxml.jackson.core:jackson-databind:jar:2.4.3
|
|
13
13
|
com.fasterxml.jackson.core:jackson-core:jar:2.4.3
|
data/NEWS
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
jar 'org.kill-bill.billing:killbill-api', '0.
|
|
2
|
-
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-currency', '0.
|
|
3
|
-
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-invoice', '0.
|
|
4
|
-
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-notification', '0.
|
|
5
|
-
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-payment', '0.
|
|
6
|
-
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-
|
|
7
|
-
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-catalog', '0.
|
|
8
|
-
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-entitlement', '0.
|
|
1
|
+
jar 'org.kill-bill.billing:killbill-api', '0.23'
|
|
2
|
+
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-currency', '0.16'
|
|
3
|
+
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-invoice', '0.16'
|
|
4
|
+
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-notification', '0.16'
|
|
5
|
+
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-payment', '0.16'
|
|
6
|
+
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-control', '0.16'
|
|
7
|
+
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-catalog', '0.16'
|
|
8
|
+
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-entitlement', '0.16'
|
|
9
9
|
jar 'org.kill-bill.billing:killbill-util:tests', '0.14.0'
|
|
10
10
|
jar 'org.mockito:mockito-all', '1.10.19'
|
|
11
11
|
jar 'javax.servlet:javax.servlet-api', '3.1.0'
|
|
@@ -34,7 +34,7 @@ module Killbill
|
|
|
34
34
|
|
|
35
35
|
include org.killbill.billing.account.api.Account
|
|
36
36
|
|
|
37
|
-
attr_accessor :id, :created_date, :updated_date, :external_key, :
|
|
37
|
+
attr_accessor :id, :created_date, :updated_date, :external_key, :currency, :time_zone, :name, :first_name_length, :email, :bill_cycle_day_local, :payment_method_id, :locale, :address1, :address2, :company_name, :city, :state_or_province, :postal_code, :country, :phone, :is_migrated, :is_notified_for_invoices
|
|
38
38
|
|
|
39
39
|
def initialize()
|
|
40
40
|
end
|
|
@@ -58,6 +58,14 @@ module Killbill
|
|
|
58
58
|
# conversion for external_key [type = java.lang.String]
|
|
59
59
|
@external_key = @external_key.to_s unless @external_key.nil?
|
|
60
60
|
|
|
61
|
+
# conversion for currency [type = org.killbill.billing.catalog.api.Currency]
|
|
62
|
+
@currency = Java::org.killbill.billing.catalog.api.Currency.value_of( @currency.to_s ) unless @currency.nil?
|
|
63
|
+
|
|
64
|
+
# conversion for time_zone [type = org.joda.time.DateTimeZone]
|
|
65
|
+
if !@time_zone.nil?
|
|
66
|
+
@time_zone = Java::org.joda.time.DateTimeZone.forID((@time_zone.respond_to?(:identifier) ? @time_zone.identifier : @time_zone.to_s))
|
|
67
|
+
end
|
|
68
|
+
|
|
61
69
|
# conversion for name [type = java.lang.String]
|
|
62
70
|
@name = @name.to_s unless @name.nil?
|
|
63
71
|
|
|
@@ -70,17 +78,9 @@ module Killbill
|
|
|
70
78
|
# conversion for bill_cycle_day_local [type = java.lang.Integer]
|
|
71
79
|
@bill_cycle_day_local = @bill_cycle_day_local
|
|
72
80
|
|
|
73
|
-
# conversion for currency [type = org.killbill.billing.catalog.api.Currency]
|
|
74
|
-
@currency = Java::org.killbill.billing.catalog.api.Currency.value_of( @currency.to_s ) unless @currency.nil?
|
|
75
|
-
|
|
76
81
|
# conversion for payment_method_id [type = java.util.UUID]
|
|
77
82
|
@payment_method_id = java.util.UUID.fromString(@payment_method_id.to_s) unless @payment_method_id.nil?
|
|
78
83
|
|
|
79
|
-
# conversion for time_zone [type = org.joda.time.DateTimeZone]
|
|
80
|
-
if !@time_zone.nil?
|
|
81
|
-
@time_zone = Java::org.joda.time.DateTimeZone.forID((@time_zone.respond_to?(:identifier) ? @time_zone.identifier : @time_zone.to_s))
|
|
82
|
-
end
|
|
83
|
-
|
|
84
84
|
# conversion for locale [type = java.lang.String]
|
|
85
85
|
@locale = @locale.to_s unless @locale.nil?
|
|
86
86
|
|
|
@@ -140,6 +140,16 @@ module Killbill
|
|
|
140
140
|
# conversion for external_key [type = java.lang.String]
|
|
141
141
|
@external_key = j_obj.external_key
|
|
142
142
|
|
|
143
|
+
# conversion for currency [type = org.killbill.billing.catalog.api.Currency]
|
|
144
|
+
@currency = j_obj.currency
|
|
145
|
+
@currency = @currency.to_s.to_sym unless @currency.nil?
|
|
146
|
+
|
|
147
|
+
# conversion for time_zone [type = org.joda.time.DateTimeZone]
|
|
148
|
+
@time_zone = j_obj.time_zone
|
|
149
|
+
if !@time_zone.nil?
|
|
150
|
+
@time_zone = TZInfo::Timezone.get(@time_zone.get_id)
|
|
151
|
+
end
|
|
152
|
+
|
|
143
153
|
# conversion for name [type = java.lang.String]
|
|
144
154
|
@name = j_obj.name
|
|
145
155
|
|
|
@@ -152,20 +162,10 @@ module Killbill
|
|
|
152
162
|
# conversion for bill_cycle_day_local [type = java.lang.Integer]
|
|
153
163
|
@bill_cycle_day_local = j_obj.bill_cycle_day_local
|
|
154
164
|
|
|
155
|
-
# conversion for currency [type = org.killbill.billing.catalog.api.Currency]
|
|
156
|
-
@currency = j_obj.currency
|
|
157
|
-
@currency = @currency.to_s.to_sym unless @currency.nil?
|
|
158
|
-
|
|
159
165
|
# conversion for payment_method_id [type = java.util.UUID]
|
|
160
166
|
@payment_method_id = j_obj.payment_method_id
|
|
161
167
|
@payment_method_id = @payment_method_id.nil? ? nil : @payment_method_id.to_s
|
|
162
168
|
|
|
163
|
-
# conversion for time_zone [type = org.joda.time.DateTimeZone]
|
|
164
|
-
@time_zone = j_obj.time_zone
|
|
165
|
-
if !@time_zone.nil?
|
|
166
|
-
@time_zone = TZInfo::Timezone.get(@time_zone.get_id)
|
|
167
|
-
end
|
|
168
|
-
|
|
169
169
|
# conversion for locale [type = java.lang.String]
|
|
170
170
|
@locale = j_obj.locale
|
|
171
171
|
|
|
@@ -34,12 +34,15 @@ module Killbill
|
|
|
34
34
|
|
|
35
35
|
include org.killbill.billing.invoice.api.DryRunArguments
|
|
36
36
|
|
|
37
|
-
attr_accessor :plan_phase_specifier, :action, :subscription_id, :effective_date, :bundle_id, :billing_action_policy, :
|
|
37
|
+
attr_accessor :dry_run_type, :plan_phase_specifier, :action, :subscription_id, :effective_date, :bundle_id, :billing_action_policy, :plan_phase_price_overrides
|
|
38
38
|
|
|
39
39
|
def initialize()
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
def to_java()
|
|
43
|
+
# conversion for dry_run_type [type = org.killbill.billing.invoice.api.DryRunType]
|
|
44
|
+
@dry_run_type = Java::org.killbill.billing.invoice.api.DryRunType.value_of( @dry_run_type.to_s ) unless @dry_run_type.nil?
|
|
45
|
+
|
|
43
46
|
# conversion for plan_phase_specifier [type = org.killbill.billing.catalog.api.PlanPhaseSpecifier]
|
|
44
47
|
@plan_phase_specifier = @plan_phase_specifier.to_java unless @plan_phase_specifier.nil?
|
|
45
48
|
|
|
@@ -61,18 +64,22 @@ module Killbill
|
|
|
61
64
|
# conversion for billing_action_policy [type = org.killbill.billing.catalog.api.BillingActionPolicy]
|
|
62
65
|
@billing_action_policy = Java::org.killbill.billing.catalog.api.BillingActionPolicy.value_of( @billing_action_policy.to_s ) unless @billing_action_policy.nil?
|
|
63
66
|
|
|
64
|
-
# conversion for
|
|
67
|
+
# conversion for plan_phase_price_overrides [type = java.util.List]
|
|
65
68
|
tmp = java.util.ArrayList.new
|
|
66
|
-
(@
|
|
69
|
+
(@plan_phase_price_overrides || []).each do |m|
|
|
67
70
|
# conversion for m [type = org.killbill.billing.catalog.api.PlanPhasePriceOverride]
|
|
68
71
|
m = m.to_java unless m.nil?
|
|
69
72
|
tmp.add(m)
|
|
70
73
|
end
|
|
71
|
-
@
|
|
74
|
+
@plan_phase_price_overrides = tmp
|
|
72
75
|
self
|
|
73
76
|
end
|
|
74
77
|
|
|
75
78
|
def to_ruby(j_obj)
|
|
79
|
+
# conversion for dry_run_type [type = org.killbill.billing.invoice.api.DryRunType]
|
|
80
|
+
@dry_run_type = j_obj.dry_run_type
|
|
81
|
+
@dry_run_type = @dry_run_type.to_s.to_sym unless @dry_run_type.nil?
|
|
82
|
+
|
|
76
83
|
# conversion for plan_phase_specifier [type = org.killbill.billing.catalog.api.PlanPhaseSpecifier]
|
|
77
84
|
@plan_phase_specifier = j_obj.plan_phase_specifier
|
|
78
85
|
@plan_phase_specifier = Killbill::Plugin::Model::PlanPhaseSpecifier.new.to_ruby(@plan_phase_specifier) unless @plan_phase_specifier.nil?
|
|
@@ -101,15 +108,15 @@ module Killbill
|
|
|
101
108
|
@billing_action_policy = j_obj.billing_action_policy
|
|
102
109
|
@billing_action_policy = @billing_action_policy.to_s.to_sym unless @billing_action_policy.nil?
|
|
103
110
|
|
|
104
|
-
# conversion for
|
|
105
|
-
@
|
|
111
|
+
# conversion for plan_phase_price_overrides [type = java.util.List]
|
|
112
|
+
@plan_phase_price_overrides = j_obj.plan_phase_price_overrides
|
|
106
113
|
tmp = []
|
|
107
|
-
(@
|
|
114
|
+
(@plan_phase_price_overrides || []).each do |m|
|
|
108
115
|
# conversion for m [type = org.killbill.billing.catalog.api.PlanPhasePriceOverride]
|
|
109
116
|
m = Killbill::Plugin::Model::PlanPhasePriceOverride.new.to_ruby(m) unless m.nil?
|
|
110
117
|
tmp << m
|
|
111
118
|
end
|
|
112
|
-
@
|
|
119
|
+
@plan_phase_price_overrides = tmp
|
|
113
120
|
self
|
|
114
121
|
end
|
|
115
122
|
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
#############################################################################################
|
|
2
|
+
# #
|
|
3
|
+
# Copyright 2010-2013 Ning, Inc. #
|
|
4
|
+
# Copyright 2014 Groupon, Inc. #
|
|
5
|
+
# Copyright 2014 The Billing Project, LLC #
|
|
6
|
+
# #
|
|
7
|
+
# The Billing Project licenses this file to you under the Apache License, version 2.0 #
|
|
8
|
+
# (the "License"); you may not use this file except in compliance with the #
|
|
9
|
+
# License. You may obtain a copy of the License at: #
|
|
10
|
+
# #
|
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0 #
|
|
12
|
+
# #
|
|
13
|
+
# Unless required by applicable law or agreed to in writing, software #
|
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT #
|
|
15
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the #
|
|
16
|
+
# License for the specific language governing permissions and limitations #
|
|
17
|
+
# under the License. #
|
|
18
|
+
# #
|
|
19
|
+
#############################################################################################
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
#
|
|
23
|
+
# DO NOT EDIT!!!
|
|
24
|
+
# File automatically generated by killbill-java-parser (git@github.com:killbill/killbill-java-parser.git)
|
|
25
|
+
#
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
module Killbill
|
|
29
|
+
module Plugin
|
|
30
|
+
module Model
|
|
31
|
+
|
|
32
|
+
java_package 'org.killbill.billing.account.api'
|
|
33
|
+
class ImmutableAccountData
|
|
34
|
+
|
|
35
|
+
include org.killbill.billing.account.api.ImmutableAccountData
|
|
36
|
+
|
|
37
|
+
attr_accessor :id, :external_key, :currency, :time_zone
|
|
38
|
+
|
|
39
|
+
def initialize()
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def to_java()
|
|
43
|
+
# conversion for id [type = java.util.UUID]
|
|
44
|
+
@id = java.util.UUID.fromString(@id.to_s) unless @id.nil?
|
|
45
|
+
|
|
46
|
+
# conversion for external_key [type = java.lang.String]
|
|
47
|
+
@external_key = @external_key.to_s unless @external_key.nil?
|
|
48
|
+
|
|
49
|
+
# conversion for currency [type = org.killbill.billing.catalog.api.Currency]
|
|
50
|
+
@currency = Java::org.killbill.billing.catalog.api.Currency.value_of( @currency.to_s ) unless @currency.nil?
|
|
51
|
+
|
|
52
|
+
# conversion for time_zone [type = org.joda.time.DateTimeZone]
|
|
53
|
+
if !@time_zone.nil?
|
|
54
|
+
@time_zone = Java::org.joda.time.DateTimeZone.forID((@time_zone.respond_to?(:identifier) ? @time_zone.identifier : @time_zone.to_s))
|
|
55
|
+
end
|
|
56
|
+
self
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def to_ruby(j_obj)
|
|
60
|
+
# conversion for id [type = java.util.UUID]
|
|
61
|
+
@id = j_obj.id
|
|
62
|
+
@id = @id.nil? ? nil : @id.to_s
|
|
63
|
+
|
|
64
|
+
# conversion for external_key [type = java.lang.String]
|
|
65
|
+
@external_key = j_obj.external_key
|
|
66
|
+
|
|
67
|
+
# conversion for currency [type = org.killbill.billing.catalog.api.Currency]
|
|
68
|
+
@currency = j_obj.currency
|
|
69
|
+
@currency = @currency.to_s.to_sym unless @currency.nil?
|
|
70
|
+
|
|
71
|
+
# conversion for time_zone [type = org.joda.time.DateTimeZone]
|
|
72
|
+
@time_zone = j_obj.time_zone
|
|
73
|
+
if !@time_zone.nil?
|
|
74
|
+
@time_zone = TZInfo::Timezone.get(@time_zone.get_id)
|
|
75
|
+
end
|
|
76
|
+
self
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -34,7 +34,7 @@ module Killbill
|
|
|
34
34
|
|
|
35
35
|
include org.killbill.billing.invoice.api.InvoicePayment
|
|
36
36
|
|
|
37
|
-
attr_accessor :id, :created_date, :updated_date, :payment_id, :type, :invoice_id, :payment_date, :amount, :currency, :linked_invoice_payment_id, :payment_cookie_id, :processed_currency
|
|
37
|
+
attr_accessor :id, :created_date, :updated_date, :payment_id, :type, :invoice_id, :payment_date, :amount, :currency, :linked_invoice_payment_id, :payment_cookie_id, :processed_currency, :is_success
|
|
38
38
|
|
|
39
39
|
def initialize()
|
|
40
40
|
end
|
|
@@ -88,6 +88,9 @@ module Killbill
|
|
|
88
88
|
|
|
89
89
|
# conversion for processed_currency [type = org.killbill.billing.catalog.api.Currency]
|
|
90
90
|
@processed_currency = Java::org.killbill.billing.catalog.api.Currency.value_of( @processed_currency.to_s ) unless @processed_currency.nil?
|
|
91
|
+
|
|
92
|
+
# conversion for is_success [type = java.lang.Boolean]
|
|
93
|
+
@is_success = @is_success.nil? ? java.lang.Boolean.new(false) : java.lang.Boolean.new(@is_success)
|
|
91
94
|
self
|
|
92
95
|
end
|
|
93
96
|
|
|
@@ -150,6 +153,15 @@ module Killbill
|
|
|
150
153
|
# conversion for processed_currency [type = org.killbill.billing.catalog.api.Currency]
|
|
151
154
|
@processed_currency = j_obj.processed_currency
|
|
152
155
|
@processed_currency = @processed_currency.to_s.to_sym unless @processed_currency.nil?
|
|
156
|
+
|
|
157
|
+
# conversion for is_success [type = java.lang.Boolean]
|
|
158
|
+
@is_success = j_obj.is_success
|
|
159
|
+
if @is_success.nil?
|
|
160
|
+
@is_success = false
|
|
161
|
+
else
|
|
162
|
+
tmp_bool = (@is_success.java_kind_of? java.lang.Boolean) ? @is_success.boolean_value : @is_success
|
|
163
|
+
@is_success = tmp_bool ? true : false
|
|
164
|
+
end
|
|
153
165
|
self
|
|
154
166
|
end
|
|
155
167
|
|
|
@@ -30,6 +30,7 @@ require 'killbill/gen/api/account_api_exception'
|
|
|
30
30
|
require 'killbill/gen/api/account_data'
|
|
31
31
|
require 'killbill/gen/api/account_email'
|
|
32
32
|
require 'killbill/gen/api/account_user_api'
|
|
33
|
+
require 'killbill/gen/api/immutable_account_data'
|
|
33
34
|
require 'killbill/gen/api/mutable_account_data'
|
|
34
35
|
require 'killbill/gen/api/billing_exception_base'
|
|
35
36
|
require 'killbill/gen/api/block'
|
|
@@ -40,12 +40,20 @@ module Killbill
|
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
|
|
43
|
-
java_signature 'Java::java.util.List getAdditionalInvoiceItems(Java::org.killbill.billing.invoice.api.Invoice, Java::java.lang.Iterable, Java::org.killbill.billing.util.callcontext.CallContext)'
|
|
44
|
-
def get_additional_invoice_items(invoice, properties, context)
|
|
43
|
+
java_signature 'Java::java.util.List getAdditionalInvoiceItems(Java::org.killbill.billing.invoice.api.Invoice, Java::boolean, Java::java.lang.Iterable, Java::org.killbill.billing.util.callcontext.CallContext)'
|
|
44
|
+
def get_additional_invoice_items(invoice, dryRun, properties, context)
|
|
45
45
|
|
|
46
46
|
# conversion for invoice [type = org.killbill.billing.invoice.api.Invoice]
|
|
47
47
|
invoice = Killbill::Plugin::Model::Invoice.new.to_ruby(invoice) unless invoice.nil?
|
|
48
48
|
|
|
49
|
+
# conversion for dryRun [type = boolean]
|
|
50
|
+
if dryRun.nil?
|
|
51
|
+
dryRun = false
|
|
52
|
+
else
|
|
53
|
+
tmp_bool = (dryRun.java_kind_of? java.lang.Boolean) ? dryRun.boolean_value : dryRun
|
|
54
|
+
dryRun = tmp_bool ? true : false
|
|
55
|
+
end
|
|
56
|
+
|
|
49
57
|
# conversion for properties [type = java.lang.Iterable]
|
|
50
58
|
tmp = []
|
|
51
59
|
(properties.nil? ? [] : properties.iterator).each do |m|
|
|
@@ -58,7 +66,7 @@ module Killbill
|
|
|
58
66
|
# conversion for context [type = org.killbill.billing.util.callcontext.CallContext]
|
|
59
67
|
context = Killbill::Plugin::Model::CallContext.new.to_ruby(context) unless context.nil?
|
|
60
68
|
begin
|
|
61
|
-
res = @delegate_plugin.get_additional_invoice_items(invoice, properties, context)
|
|
69
|
+
res = @delegate_plugin.get_additional_invoice_items(invoice, dryRun, properties, context)
|
|
62
70
|
# conversion for res [type = java.util.List]
|
|
63
71
|
tmp = java.util.ArrayList.new
|
|
64
72
|
(res || []).each do |m|
|
|
@@ -43,36 +43,25 @@ module Killbill
|
|
|
43
43
|
transaction_from_kb_payment_transaction_id(nil, kb_payment_transaction_id, kb_tenant_id, :single)
|
|
44
44
|
end
|
|
45
45
|
|
|
46
|
-
def find_candidate_transaction_for_refund(kb_payment_id, kb_tenant_id,
|
|
46
|
+
def find_candidate_transaction_for_refund(kb_payment_id, kb_tenant_id, transaction_type = nil)
|
|
47
47
|
if transaction_type.nil?
|
|
48
|
-
|
|
49
|
-
do_find_candidate_transaction_for_refund(:authorize, kb_payment_id, kb_tenant_id, amount_in_cents)
|
|
50
|
-
rescue
|
|
51
|
-
do_find_candidate_transaction_for_refund(:purchase, kb_payment_id, kb_tenant_id, amount_in_cents)
|
|
52
|
-
end
|
|
48
|
+
find_candidate_transaction_for_refund(kb_payment_id, kb_tenant_id, :AUTHORIZE) || find_candidate_transaction_for_refund(kb_payment_id, kb_tenant_id, :PURCHASE)
|
|
53
49
|
else
|
|
54
|
-
do_find_candidate_transaction_for_refund(transaction_type, kb_payment_id, kb_tenant_id
|
|
50
|
+
do_find_candidate_transaction_for_refund(transaction_type, kb_payment_id, kb_tenant_id)
|
|
55
51
|
end
|
|
56
52
|
end
|
|
57
53
|
|
|
58
54
|
private
|
|
59
55
|
|
|
60
|
-
|
|
61
|
-
|
|
56
|
+
# Note: this does not check any amount, as the behavior is gateway specific (some allow to refund more than what was captured):
|
|
57
|
+
# we just want to find the reference transaction to pass the id to the gateway
|
|
58
|
+
def do_find_candidate_transaction_for_refund(transaction_type, kb_payment_id, kb_tenant_id)
|
|
59
|
+
# Assume the last one was successful
|
|
62
60
|
if kb_tenant_id.nil?
|
|
63
|
-
transactions = where("
|
|
61
|
+
transactions = where("transaction_type = #{@@quotes_cache[transaction_type]} AND kb_tenant_id is NULL AND kb_payment_id = #{@@quotes_cache[kb_payment_id]}").order(:created_at => :desc)
|
|
64
62
|
else
|
|
65
|
-
transactions = where("
|
|
63
|
+
transactions = where("transaction_type = #{@@quotes_cache[transaction_type]} AND kb_tenant_id = #{@@quotes_cache[kb_tenant_id]} AND kb_payment_id = #{@@quotes_cache[kb_payment_id]}").order(:created_at => :desc)
|
|
66
64
|
end
|
|
67
|
-
raise "Unable to find transaction for payment #{kb_payment_id} and api_call #{api_call}" if transactions.size == 0
|
|
68
|
-
|
|
69
|
-
# We have candidates, but we now need to make sure we didn't refund more than for the specified amount
|
|
70
|
-
amount_refunded_in_cents = where("api_call = #{@@quotes_cache['refund']} and kb_payment_id = #{@@quotes_cache[kb_payment_id]}").sum('amount_in_cents')
|
|
71
|
-
|
|
72
|
-
amount_left_to_refund_in_cents = -amount_refunded_in_cents
|
|
73
|
-
transactions.map { |transaction| amount_left_to_refund_in_cents += transaction.amount_in_cents }
|
|
74
|
-
raise "Amount #{amount_in_cents} too large to refund for payment #{kb_payment_id}" if amount_left_to_refund_in_cents < amount_in_cents
|
|
75
|
-
|
|
76
65
|
transactions.first
|
|
77
66
|
end
|
|
78
67
|
|
|
@@ -129,7 +129,8 @@ module Killbill
|
|
|
129
129
|
|
|
130
130
|
linked_transaction_proc = Proc.new do |amount_in_cents, options|
|
|
131
131
|
linked_transaction_type = find_value_from_properties(properties, :linked_transaction_type)
|
|
132
|
-
transaction = @transaction_model.find_candidate_transaction_for_refund(kb_payment_id, context.tenant_id,
|
|
132
|
+
transaction = @transaction_model.find_candidate_transaction_for_refund(kb_payment_id, context.tenant_id, linked_transaction_type)
|
|
133
|
+
# This should never happen
|
|
133
134
|
raise "Unable to retrieve transaction to refund for operation=refund, kb_payment_id=#{kb_payment_id}, kb_payment_transaction_id=#{kb_payment_transaction_id}, kb_payment_method_id=#{kb_payment_method_id}" if transaction.nil?
|
|
134
135
|
transaction
|
|
135
136
|
end
|
data/lib/killbill/invoice.rb
CHANGED
data/lib/killbill/version.rb
CHANGED
|
@@ -114,6 +114,33 @@ describe Killbill::Plugin::ActiveMerchant::PaymentPlugin do
|
|
|
114
114
|
plugin.get_payment_methods(@kb_account_id, true, @properties, @call_context).size.should == 0
|
|
115
115
|
end
|
|
116
116
|
|
|
117
|
+
# https://github.com/killbill/killbill-plugin-framework-ruby/issues/51
|
|
118
|
+
it 'supports multiple refunds regardless of the amount against auth' do
|
|
119
|
+
ptip = trigger_auth(@properties)
|
|
120
|
+
verify_auth_status(ptip, :PROCESSED)
|
|
121
|
+
|
|
122
|
+
ptip = trigger_capture(@properties)
|
|
123
|
+
verify_capture_status(ptip, :PROCESSED)
|
|
124
|
+
|
|
125
|
+
ptip = trigger_refund(@properties)
|
|
126
|
+
verify_refund_status(ptip, :PROCESSED)
|
|
127
|
+
|
|
128
|
+
ptip = trigger_refund(@properties)
|
|
129
|
+
verify_refund_status(ptip, :PROCESSED)
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
# https://github.com/killbill/killbill-plugin-framework-ruby/issues/51
|
|
133
|
+
it 'supports multiple refunds regardless of the amount against purchase' do
|
|
134
|
+
ptip = trigger_purchase(@properties)
|
|
135
|
+
verify_purchase_status(ptip, :PROCESSED)
|
|
136
|
+
|
|
137
|
+
ptip = trigger_refund(@properties)
|
|
138
|
+
verify_refund_status(ptip, :PROCESSED)
|
|
139
|
+
|
|
140
|
+
ptip = trigger_refund(@properties)
|
|
141
|
+
verify_refund_status(ptip, :PROCESSED)
|
|
142
|
+
end
|
|
143
|
+
|
|
117
144
|
it 'should support different payment_processor_account_ids' do
|
|
118
145
|
plugin.get_payment_methods(@kb_account_id, true, @properties, @call_context).size.should == 0
|
|
119
146
|
|
|
@@ -485,13 +512,46 @@ describe Killbill::Plugin::ActiveMerchant::PaymentPlugin do
|
|
|
485
512
|
|
|
486
513
|
private
|
|
487
514
|
|
|
515
|
+
def add_payment_method_if_needed(pm_properties = [])
|
|
516
|
+
plugin.get_payment_method_detail(@kb_account_id, @kb_payment_method_id, pm_properties, @call_context) rescue plugin.add_payment_method(@kb_account_id, @kb_payment_method_id, @payment_method_props, true, pm_properties, @call_context)
|
|
517
|
+
end
|
|
518
|
+
|
|
488
519
|
def trigger_purchase(purchase_properties=[], kb_payment_transaction_id=SecureRandom.uuid)
|
|
489
|
-
|
|
520
|
+
add_payment_method_if_needed(purchase_properties)
|
|
490
521
|
plugin.purchase_payment(@kb_account_id, @kb_payment_id, kb_payment_transaction_id, @kb_payment_method_id, @amount_in_cents, @currency, purchase_properties, @call_context)
|
|
491
522
|
end
|
|
492
523
|
|
|
524
|
+
def trigger_auth(auth_properties=[], kb_payment_transaction_id=SecureRandom.uuid)
|
|
525
|
+
add_payment_method_if_needed(auth_properties)
|
|
526
|
+
plugin.authorize_payment(@kb_account_id, @kb_payment_id, kb_payment_transaction_id, @kb_payment_method_id, @amount_in_cents, @currency, auth_properties, @call_context)
|
|
527
|
+
end
|
|
528
|
+
|
|
529
|
+
def trigger_capture(capture_properties=[], kb_payment_transaction_id=SecureRandom.uuid)
|
|
530
|
+
plugin.capture_payment(@kb_account_id, @kb_payment_id, kb_payment_transaction_id, @kb_payment_method_id, @amount_in_cents, @currency, capture_properties, @call_context)
|
|
531
|
+
end
|
|
532
|
+
|
|
533
|
+
def trigger_refund(refund_properties=[], kb_payment_transaction_id=SecureRandom.uuid)
|
|
534
|
+
plugin.refund_payment(@kb_account_id, @kb_payment_id, kb_payment_transaction_id, @kb_payment_method_id, @amount_in_cents, @currency, refund_properties, @call_context)
|
|
535
|
+
end
|
|
536
|
+
|
|
537
|
+
def verify_transaction_status(t_info_plugin, status, transaction_type)
|
|
538
|
+
verify_transaction_info_plugin(t_info_plugin, t_info_plugin.kb_transaction_payment_id, transaction_type, nil, 'default', status)
|
|
539
|
+
end
|
|
540
|
+
|
|
493
541
|
def verify_purchase_status(t_info_plugin, status)
|
|
494
|
-
|
|
542
|
+
verify_transaction_status(t_info_plugin, status, :PURCHASE)
|
|
543
|
+
end
|
|
544
|
+
|
|
545
|
+
def verify_auth_status(t_info_plugin, status)
|
|
546
|
+
verify_transaction_status(t_info_plugin, status, :AUTHORIZE)
|
|
547
|
+
end
|
|
548
|
+
|
|
549
|
+
def verify_capture_status(t_info_plugin, status)
|
|
550
|
+
verify_transaction_status(t_info_plugin, status, :CAPTURE)
|
|
551
|
+
end
|
|
552
|
+
|
|
553
|
+
def verify_refund_status(t_info_plugin, status)
|
|
554
|
+
verify_transaction_status(t_info_plugin, status, :REFUND)
|
|
495
555
|
end
|
|
496
556
|
|
|
497
557
|
def verify_transaction_info_plugin(t_info_plugin, kb_transaction_id, type, transaction_nb, payment_processor_account_id='default', status=:PROCESSED)
|
|
@@ -2,10 +2,32 @@ require 'spec_helper'
|
|
|
2
2
|
|
|
3
3
|
describe Killbill::Plugin::ActiveMerchant::ActiveRecord::Transaction do
|
|
4
4
|
|
|
5
|
-
before :
|
|
5
|
+
before :each do
|
|
6
6
|
::Killbill::Test::TestTransaction.delete_all
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
+
# https://github.com/killbill/killbill-plugin-framework-ruby/issues/51
|
|
10
|
+
it 'always finds a transaction for refund' do
|
|
11
|
+
api_call = 'for debugging only'
|
|
12
|
+
amount_in_cents = 1242
|
|
13
|
+
currency = :USD
|
|
14
|
+
kb_account_id = SecureRandom.uuid
|
|
15
|
+
kb_tenant_id = SecureRandom.uuid
|
|
16
|
+
kb_payment_id = SecureRandom.uuid
|
|
17
|
+
|
|
18
|
+
auth_tx = create_transaction(api_call, kb_payment_id, SecureRandom.uuid, :AUTHORIZE, amount_in_cents, currency, kb_account_id, kb_tenant_id)
|
|
19
|
+
::Killbill::Test::TestTransaction.find_candidate_transaction_for_refund(kb_payment_id, kb_tenant_id).id.should == auth_tx.id
|
|
20
|
+
|
|
21
|
+
create_transaction(api_call, kb_payment_id, SecureRandom.uuid, :CAPTURE, amount_in_cents, currency, kb_account_id, kb_tenant_id)
|
|
22
|
+
::Killbill::Test::TestTransaction.find_candidate_transaction_for_refund(kb_payment_id, kb_tenant_id).id.should == auth_tx.id
|
|
23
|
+
|
|
24
|
+
create_transaction(api_call, kb_payment_id, SecureRandom.uuid, :REFUND, amount_in_cents, currency, kb_account_id, kb_tenant_id)
|
|
25
|
+
::Killbill::Test::TestTransaction.find_candidate_transaction_for_refund(kb_payment_id, kb_tenant_id).id.should == auth_tx.id
|
|
26
|
+
|
|
27
|
+
create_transaction(api_call, kb_payment_id, SecureRandom.uuid, :REFUND, amount_in_cents, currency, kb_account_id, kb_tenant_id)
|
|
28
|
+
::Killbill::Test::TestTransaction.find_candidate_transaction_for_refund(kb_payment_id, kb_tenant_id).id.should == auth_tx.id
|
|
29
|
+
end
|
|
30
|
+
|
|
9
31
|
it 'should store and retrieve transactions correctly' do
|
|
10
32
|
api_call = 'for debugging only'
|
|
11
33
|
amount_in_cents = 1242
|
|
@@ -10,7 +10,7 @@ describe Killbill::Plugin::Api::InvoicePluginApi do
|
|
|
10
10
|
it 'should add items' do
|
|
11
11
|
invoice = create_invoice
|
|
12
12
|
|
|
13
|
-
items = @invoicePluginApi.get_additional_invoice_items(invoice, java.util.ArrayList.new, nil)
|
|
13
|
+
items = @invoicePluginApi.get_additional_invoice_items(invoice, java.lang.Boolean::FALSE, java.util.ArrayList.new, nil)
|
|
14
14
|
items.size.should == 2
|
|
15
15
|
|
|
16
16
|
items.get(0).invoice_id.should == invoice.id
|
|
@@ -7,7 +7,7 @@ describe Killbill::Plugin::Invoice do
|
|
|
7
7
|
|
|
8
8
|
it 'should not raise exceptions by default' do
|
|
9
9
|
plugin = DummyInvoicePlugin.new
|
|
10
|
-
plugin.get_additional_invoice_items(nil, nil, nil).size.should == 0
|
|
10
|
+
plugin.get_additional_invoice_items(nil, false, nil, nil).size.should == 0
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
it 'should be able to build items' do
|
|
@@ -5,7 +5,7 @@ module Killbill
|
|
|
5
5
|
module Plugin
|
|
6
6
|
class InvoiceTest < Invoice
|
|
7
7
|
|
|
8
|
-
def get_additional_invoice_items(invoice, properties, context)
|
|
8
|
+
def get_additional_invoice_items(invoice, dry_run, properties, context)
|
|
9
9
|
additional_items = []
|
|
10
10
|
invoice.invoice_items.each do |original_item|
|
|
11
11
|
additional_items << build_item(original_item, original_item.amount * 7 / 100, 'Tax item', :TAX)
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: killbill
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 5.
|
|
4
|
+
version: 5.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Kill Bill core team
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2015-
|
|
11
|
+
date: 2015-10-23 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: sinatra
|
|
@@ -393,6 +393,7 @@ files:
|
|
|
393
393
|
- lib/killbill/gen/api/enumerator_iterator.rb
|
|
394
394
|
- lib/killbill/gen/api/fixed.rb
|
|
395
395
|
- lib/killbill/gen/api/illegal_plan_change.rb
|
|
396
|
+
- lib/killbill/gen/api/immutable_account_data.rb
|
|
396
397
|
- lib/killbill/gen/api/international_price.rb
|
|
397
398
|
- lib/killbill/gen/api/invalid_config_exception.rb
|
|
398
399
|
- lib/killbill/gen/api/invoice.rb
|
|
@@ -581,40 +582,8 @@ requirements:
|
|
|
581
582
|
- jar 'org.kill-bill.billing:killbill-api'
|
|
582
583
|
- jar 'org.kill-bill.billing:killbill-util:tests'
|
|
583
584
|
rubyforge_project:
|
|
584
|
-
rubygems_version: 2.
|
|
585
|
+
rubygems_version: 2.1.9
|
|
585
586
|
signing_key:
|
|
586
587
|
specification_version: 4
|
|
587
588
|
summary: Framework to write Kill Bill plugins in Ruby.
|
|
588
|
-
test_files:
|
|
589
|
-
- spec/killbill/base_plugin_spec.rb
|
|
590
|
-
- spec/killbill/config_test.ru
|
|
591
|
-
- spec/killbill/gen_conversions_spec.rb
|
|
592
|
-
- spec/killbill/helpers/configuration_spec.rb
|
|
593
|
-
- spec/killbill/helpers/connection_spec.rb
|
|
594
|
-
- spec/killbill/helpers/killbill_spec_helper_spec.rb
|
|
595
|
-
- spec/killbill/helpers/payment_method_spec.rb
|
|
596
|
-
- spec/killbill/helpers/payment_plugin_spec.rb
|
|
597
|
-
- spec/killbill/helpers/private_payment_plugin_spec.rb
|
|
598
|
-
- spec/killbill/helpers/response_spec.rb
|
|
599
|
-
- spec/killbill/helpers/streamy_result_set_spec.rb
|
|
600
|
-
- spec/killbill/helpers/test_payment_method.rb
|
|
601
|
-
- spec/killbill/helpers/test_response.rb
|
|
602
|
-
- spec/killbill/helpers/test_schema.rb
|
|
603
|
-
- spec/killbill/helpers/test_transaction.rb
|
|
604
|
-
- spec/killbill/helpers/transaction_spec.rb
|
|
605
|
-
- spec/killbill/helpers/utils_spec.rb
|
|
606
|
-
- spec/killbill/invoice_plugin_api_spec.rb
|
|
607
|
-
- spec/killbill/invoice_plugin_spec.rb
|
|
608
|
-
- spec/killbill/invoice_test.rb
|
|
609
|
-
- spec/killbill/killbill_integration_spec.rb
|
|
610
|
-
- spec/killbill/killbill_logger_spec.rb
|
|
611
|
-
- spec/killbill/killbillapi_spec.rb
|
|
612
|
-
- spec/killbill/notification_plugin_api_spec.rb
|
|
613
|
-
- spec/killbill/notification_plugin_spec.rb
|
|
614
|
-
- spec/killbill/notification_test.rb
|
|
615
|
-
- spec/killbill/payment_plugin_api_spec.rb
|
|
616
|
-
- spec/killbill/payment_plugin_spec.rb
|
|
617
|
-
- spec/killbill/payment_test.rb
|
|
618
|
-
- spec/killbill/rack_handler_spec.rb
|
|
619
|
-
- spec/killbill/remote/active_merchant_typhoeus_connection_spec.rb
|
|
620
|
-
- spec/spec_helper.rb
|
|
589
|
+
test_files: []
|