killbill 1.0.15 → 1.0.16

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. data/Jarfile +4 -2
  2. data/VERSION +1 -1
  3. data/lib/killbill.rb +69 -13
  4. data/lib/killbill/creator.rb +16 -2
  5. data/lib/killbill/enum.rb +72 -0
  6. data/lib/killbill/gen/account.rb +43 -0
  7. data/lib/killbill/gen/account_data.rb +39 -0
  8. data/lib/killbill/gen/account_email.rb +25 -0
  9. data/lib/killbill/gen/audit_log.rb +28 -0
  10. data/lib/killbill/gen/blocking_state.rb +32 -0
  11. data/lib/killbill/gen/call_context.rb +29 -0
  12. data/lib/killbill/gen/call_origin.rb +34 -0
  13. data/lib/killbill/gen/currency.rb +34 -0
  14. data/lib/killbill/gen/custom_field.rb +27 -0
  15. data/lib/killbill/gen/date_time_zone.rb +35 -0
  16. data/lib/killbill/gen/ext_bus_event.rb +25 -0
  17. data/lib/killbill/gen/ext_bus_event_type.rb +34 -0
  18. data/lib/killbill/gen/invoice.rb +39 -0
  19. data/lib/killbill/gen/invoice_item.rb +37 -0
  20. data/lib/killbill/gen/invoice_payment.rb +31 -0
  21. data/lib/killbill/gen/invoice_payment_type.rb +34 -0
  22. data/lib/killbill/gen/object_type.rb +34 -0
  23. data/lib/killbill/gen/payment.rb +36 -0
  24. data/lib/killbill/gen/payment_attempt.rb +27 -0
  25. data/lib/killbill/gen/payment_info_plugin.rb +28 -0
  26. data/lib/killbill/gen/payment_method_info_plugin.rb +24 -0
  27. data/lib/killbill/gen/payment_method_kv_info.rb +21 -0
  28. data/lib/killbill/gen/payment_method_plugin.rb +36 -0
  29. data/lib/killbill/gen/payment_plugin_status.rb +34 -0
  30. data/lib/killbill/gen/refund.rb +29 -0
  31. data/lib/killbill/gen/refund_info_plugin.rb +27 -0
  32. data/lib/killbill/gen/refund_plugin_status.rb +34 -0
  33. data/lib/killbill/gen/require_gen.rb +38 -0
  34. data/lib/killbill/gen/subscription.rb +44 -0
  35. data/lib/killbill/gen/subscription_bundle.rb +27 -0
  36. data/lib/killbill/gen/subscription_source_type.rb +34 -0
  37. data/lib/killbill/gen/subscription_state.rb +34 -0
  38. data/lib/killbill/gen/tag.rb +26 -0
  39. data/lib/killbill/gen/tag_definition.rb +27 -0
  40. data/lib/killbill/gen/tenant_context.rb +21 -0
  41. data/lib/killbill/gen/user_type.rb +34 -0
  42. data/lib/killbill/gen/uuid.rb +22 -0
  43. data/lib/killbill/http_servlet.rb +10 -3
  44. data/lib/killbill/jconverter.rb +540 -0
  45. data/lib/killbill/jkillbill_api.rb +137 -0
  46. data/lib/killbill/jnotification.rb +0 -1
  47. data/lib/killbill/jpayment.rb +7 -19
  48. data/lib/killbill/jplugin.rb +27 -16
  49. data/lib/killbill/killbill_api.rb +28 -0
  50. data/lib/killbill/killbill_logger.rb +31 -8
  51. data/lib/killbill/notification.rb +0 -1
  52. data/lib/killbill/payment.rb +0 -5
  53. data/lib/killbill/plugin.rb +4 -46
  54. data/spec/killbill/base_plugin_spec.rb +2 -1
  55. data/spec/killbill/{jresponse/jconverter_spec.rb → jconverter_spec.rb} +46 -90
  56. data/spec/killbill/jnotification_spec.rb +2 -1
  57. data/spec/killbill/jpayment_spec.rb +17 -16
  58. data/spec/killbill/killbill_integration_spec.rb +1 -1
  59. data/spec/killbill/killbillapi_spec.rb +49 -0
  60. data/spec/killbill/payment_test.rb +5 -5
  61. data/spec/killbill/rack_handler_spec.rb +1 -2
  62. data/spec/spec_helper.rb +3 -0
  63. data/tools/java2ruby.rb +440 -0
  64. metadata +48 -26
  65. data/lib/killbill/jresponse/jconverter.rb +0 -126
  66. data/lib/killbill/jresponse/jevent.rb +0 -58
  67. data/lib/killbill/jresponse/jpayment_method_response.rb +0 -148
  68. data/lib/killbill/jresponse/jpayment_method_response_internal.rb +0 -54
  69. data/lib/killbill/jresponse/jpayment_response.rb +0 -74
  70. data/lib/killbill/jresponse/jrefund_response.rb +0 -68
  71. data/lib/killbill/response/event.rb +0 -18
  72. data/lib/killbill/response/payment_method_response.rb +0 -50
  73. data/lib/killbill/response/payment_method_response_internal.rb +0 -20
  74. data/lib/killbill/response/payment_response.rb +0 -26
  75. data/lib/killbill/response/payment_status.rb +0 -10
  76. data/lib/killbill/response/refund_response.rb +0 -25
  77. data/spec/killbill/jresponse/jevent_spec.rb +0 -18
  78. data/spec/killbill/jresponse/jpayment_method_response_internal_spec.rb +0 -34
  79. data/spec/killbill/jresponse/jpayment_method_response_spec.rb +0 -53
  80. data/spec/killbill/jresponse/jpayment_response_spec.rb +0 -41
  81. data/spec/killbill/jresponse/jrefund_response_spec.rb +0 -41
@@ -15,6 +15,7 @@ class LifecycleNotificationPlugin < Killbill::Plugin::PluginBase
15
15
  end
16
16
 
17
17
  describe Killbill::Plugin::PluginBase do
18
+ =begin
18
19
  it 'should be able to register Killbill API instances' do
19
20
  plugin = Killbill::Plugin::PluginBase.new(:account_user_api => MockAccountUserApi.new)
20
21
 
@@ -28,7 +29,7 @@ describe Killbill::Plugin::PluginBase do
28
29
  # Default method missing behavior
29
30
  lambda { plugin.blablabla }.should raise_error NoMethodError
30
31
  end
31
-
32
+ =end
32
33
  it 'should be able to default to the ruby logger for tests' do
33
34
  logger = Logger.new(STDOUT)
34
35
  logger.level = Logger::DEBUG
@@ -1,17 +1,6 @@
1
1
  require 'spec_helper'
2
2
  require 'date'
3
-
4
- require 'killbill/response/payment_method_response'
5
- require 'killbill/response/payment_method_response_internal'
6
- require 'killbill/response/payment_status'
7
- require 'killbill/response/payment_response'
8
- require 'killbill/response/refund_response'
9
- require 'killbill/response/event'
10
-
11
- require 'killbill/jresponse/jconverter'
12
- require 'killbill/jresponse/jpayment_method_response'
13
- require 'killbill/jresponse/jpayment_method_response_internal'
14
- require 'killbill/jresponse/jevent'
3
+ require 'killbill/jconverter'
15
4
 
16
5
  describe Killbill::Plugin::JConverter do
17
6
 
@@ -38,25 +27,32 @@ describe Killbill::Plugin::JConverter do
38
27
  output.should == input
39
28
  end
40
29
 
30
+ it "should_test_to_string_converter_from_non_string" do
31
+ input = 12
32
+ output = Killbill::Plugin::JConverter.to_string(input)
33
+ output.should be_an_instance_of java.lang.String
34
+ output.should == input.to_s
35
+ end
36
+
41
37
  it "should_test_payment_plugin_status_success_converter" do
42
- input = Killbill::Plugin::PaymentStatus::SUCCESS
38
+ input = Killbill::Plugin::Model::PaymentPluginStatus.new(:PROCESSED)
43
39
  output = Killbill::Plugin::JConverter.to_payment_plugin_status(input)
44
- output.should be_an_instance_of Java::com.ning.billing.payment.plugin.api.PaymentInfoPlugin::PaymentPluginStatus
45
- output.should == Java::com.ning.billing.payment.plugin.api.PaymentInfoPlugin::PaymentPluginStatus::PROCESSED
40
+ output.should be_an_instance_of Java::com.ning.billing.payment.plugin.api.PaymentPluginStatus
41
+ output.should == Java::com.ning.billing.payment.plugin.api.PaymentPluginStatus::PROCESSED
46
42
  end
47
43
 
48
44
  it "should_test_payment_plugin_status_failed_converter" do
49
- input = Killbill::Plugin::PaymentStatus::ERROR
45
+ input = Killbill::Plugin::Model::PaymentPluginStatus.new(:ERROR)
50
46
  output = Killbill::Plugin::JConverter.to_payment_plugin_status(input)
51
- output.should be_an_instance_of Java::com.ning.billing.payment.plugin.api.PaymentInfoPlugin::PaymentPluginStatus
52
- output.should == Java::com.ning.billing.payment.plugin.api.PaymentInfoPlugin::PaymentPluginStatus::ERROR
47
+ output.should be_an_instance_of Java::com.ning.billing.payment.plugin.api.PaymentPluginStatus
48
+ output.should == Java::com.ning.billing.payment.plugin.api.PaymentPluginStatus::ERROR
53
49
  end
54
50
 
55
51
  it "should_test_payment_plugin_status_undefined_converter" do
56
- input = Killbill::Plugin::PaymentStatus::UNDEFINED
52
+ input = Killbill::Plugin::Model::PaymentPluginStatus.new(:UNDEFINED)
57
53
  output = Killbill::Plugin::JConverter.to_payment_plugin_status(input)
58
- output.should be_an_instance_of Java::com.ning.billing.payment.plugin.api.PaymentInfoPlugin::PaymentPluginStatus
59
- output.should == Java::com.ning.billing.payment.plugin.api.PaymentInfoPlugin::PaymentPluginStatus::UNDEFINED
54
+ output.should be_an_instance_of Java::com.ning.billing.payment.plugin.api.PaymentPluginStatus
55
+ output.should == Java::com.ning.billing.payment.plugin.api.PaymentPluginStatus::UNDEFINED
60
56
  end
61
57
 
62
58
  it "should_test_big_decimal_converter" do
@@ -68,7 +64,7 @@ describe Killbill::Plugin::JConverter do
68
64
  12376 => '12.376',
69
65
  -532 => '-5.32'
70
66
  }.each do |input,output|
71
- output = Killbill::Plugin::JConverter.to_big_decimal(input)
67
+ output = Killbill::Plugin::JConverter.to_big_decimal_with_cents_conversion(input)
72
68
  output.should be_an_instance_of java.math.BigDecimal
73
69
  output.to_s.should == output.to_s
74
70
  end
@@ -91,7 +87,7 @@ describe Killbill::Plugin::JConverter do
91
87
  it "should_test_uuid_from_converter" do
92
88
  input = java.util.UUID.random_uuid
93
89
  output = Killbill::Plugin::JConverter.from_uuid(input)
94
- output.should be_an_instance_of String
90
+ output.should be_an_instance_of Killbill::Plugin::Model::UUID
95
91
  output.to_s.should == input.to_s
96
92
  end
97
93
 
@@ -117,7 +113,6 @@ describe Killbill::Plugin::JConverter do
117
113
  output.to_s == "false"
118
114
  end
119
115
 
120
-
121
116
  it "should_test_boolean_from_true_converter" do
122
117
  input = java.lang.Boolean.new("true")
123
118
  output = Killbill::Plugin::JConverter.from_boolean(input)
@@ -144,94 +139,55 @@ describe Killbill::Plugin::JConverter do
144
139
  end
145
140
 
146
141
  it "should_test_payment_status_from_converter" do
147
- input = Java::com.ning.billing.payment.plugin.api.PaymentInfoPlugin::PaymentPluginStatus::PROCESSED
142
+ input = Java::com.ning.billing.payment.plugin.api.PaymentPluginStatus::PROCESSED
148
143
  output = Killbill::Plugin::JConverter.from_payment_plugin_status(input)
149
- output.should == Killbill::Plugin::PaymentStatus::SUCCESS
144
+ output.should == Killbill::Plugin::Model::PaymentPluginStatus.new(:PROCESSED)
150
145
  end
151
146
 
152
147
  it "should_test_big_decimal_from_converter" do
153
148
  input = java.math.BigDecimal::TEN
154
- output = Killbill::Plugin::JConverter.from_big_decimal(input)
149
+ output = Killbill::Plugin::JConverter.from_big_decimal_with_cents_conversion(input)
155
150
  output.should be_an_instance_of Fixnum
156
151
  output.to_s.should == "1000"
157
152
  end
158
153
 
159
- it "should_test_payment_method_plugin_from_converter" do
160
- prop = Killbill::Plugin::PaymentMethodProperty.new("key", "value", true)
161
- payment_method_response = Killbill::Plugin::PaymentMethodResponse.new("external_payment_method_id", true, [prop])
162
- input = Killbill::Plugin::JPaymentMethodResponse.new(payment_method_response)
163
- output = Killbill::Plugin::JConverter.from_payment_method_plugin(input)
164
-
165
- output.should be_an_instance_of Killbill::Plugin::PaymentMethodResponse
166
-
167
- output.external_payment_method_id.should be_an_instance_of String
168
- output.external_payment_method_id.should == payment_method_response.external_payment_method_id
169
-
170
- output.is_default.should be_an_instance_of TrueClass
171
- output.is_default.should == payment_method_response.is_default
172
-
173
- output.properties.should be_an_instance_of Array
174
- output.properties.size.should == 1
175
-
176
- output_prop = output.properties[0]
177
- output_prop.should be_an_instance_of Killbill::Plugin::PaymentMethodProperty
178
-
179
- output_prop.key.should be_an_instance_of String
180
- output_prop.key.should == prop.key
181
-
182
- output_prop.value.should be_an_instance_of String
183
- output_prop.value.should == prop.value
184
-
185
- output_prop.is_updatable.should be_an_instance_of TrueClass
186
- output_prop.is_updatable.should == prop.is_updatable
187
- end
188
-
189
- it "should_test_payment_method_info_plugin__from_converter" do
190
-
191
- payment_method_info = Killbill::Plugin::PaymentMethodResponseInternal.new("bf5c926e-3d9c-470e-b34b-0719d7b58323", "ca5c926e-3d9c-470e-b34b-0719d7b58312", false, "external_payment_method_id")
192
- input = Killbill::Plugin::JPaymentMethodResponseInternal.new(payment_method_info)
193
- output = Killbill::Plugin::JConverter.from_payment_method_info_plugin(input)
194
-
195
- output.should be_an_instance_of Killbill::Plugin::PaymentMethodResponseInternal
196
-
197
- output.kb_account_id.should be_an_instance_of String
198
- output.kb_account_id.should == payment_method_info.kb_account_id
199
-
200
- output.kb_payment_method_id.should be_an_instance_of String
201
- output.kb_payment_method_id.should == payment_method_info.kb_payment_method_id
202
-
203
- output.is_default.should be_an_instance_of FalseClass
204
- output.is_default.should == payment_method_info.is_default
205
-
206
- output.external_payment_method_id.should be_an_instance_of String
207
- output.external_payment_method_id.should == payment_method_info.external_payment_method_id
208
- end
209
-
210
154
  it "should_test_ext_bus_event__from_converter" do
211
155
 
212
156
  object_type = Java::com.ning.billing.ObjectType::INVOICE
213
157
  event_type = Java::com.ning.billing.beatrix.bus.api.ExtBusEventType::INVOICE_CREATION
214
158
  uuid = java.util.UUID.random_uuid
215
159
 
216
- input = Killbill::Plugin::JEvent.new(event_type, object_type, uuid, uuid, uuid)
160
+ input = Killbill::Plugin::Model::ExtBusEvent.new(event_type, object_type, uuid, uuid, uuid)
217
161
  output = Killbill::Plugin::JConverter.from_ext_bus_event(input)
218
162
 
219
- output.should be_an_instance_of Killbill::Plugin::Event
163
+ output.should be_an_instance_of Killbill::Plugin::Model::ExtBusEvent
164
+
165
+ output.event_type.should == Killbill::Plugin::Model::ExtBusEventType.new(:INVOICE_CREATION)
166
+
167
+ output.object_type.should == Killbill::Plugin::Model::ObjectType.new(:INVOICE)
220
168
 
221
- output.event_type.should be_an_instance_of String
222
- output.event_type.should == 'INVOICE_CREATION'
169
+ output.object_id.should be_an_instance_of Killbill::Plugin::Model::UUID
170
+ output.object_id.to_s.should == Killbill::Plugin::JConverter.from_uuid(uuid).to_s
223
171
 
224
- output.object_type.should be_an_instance_of String
225
- output.object_type.should == 'INVOICE'
172
+ output.account_id.should be_an_instance_of Killbill::Plugin::Model::UUID
173
+ output.account_id.to_s.should == Killbill::Plugin::JConverter.from_uuid(uuid).to_s
174
+
175
+ output.tenant_id.should be_an_instance_of Killbill::Plugin::Model::UUID
176
+ output.tenant_id.to_s.should == Killbill::Plugin::JConverter.from_uuid(uuid).to_s
177
+
178
+ end
179
+ it "should_test_enum_object_type_from_converter" do
226
180
 
227
- output.object_id.should be_an_instance_of String
228
- output.object_id.should == Killbill::Plugin::JConverter.from_uuid(uuid)
181
+ java_object_type = Java::com.ning.billing.ObjectType::ACCOUNT
229
182
 
230
- output.account_id.should be_an_instance_of String
231
- output.account_id.should == Killbill::Plugin::JConverter.from_uuid(uuid)
183
+ ruby_object_type = Killbill::Plugin::JConverter.from_object_type(java_object_type)
184
+ ruby_object_type.should be_an_instance_of Killbill::Plugin::Model::ObjectType
185
+ ruby_object_type.enum.to_s.should == java_object_type.to_s
232
186
 
233
- output.tenant_id.should be_an_instance_of String
234
- output.tenant_id.should == Killbill::Plugin::JConverter.from_uuid(uuid)
187
+ java_object_type_back = Killbill::Plugin::JConverter.to_object_type(ruby_object_type)
188
+ java_object_type_back.should be_an_instance_of Java::com.ning.billing.ObjectType
189
+ java_object_type_back.to_s.should == java_object_type.to_s
190
+ java_object_type_back.to_s.should == "ACCOUNT"
235
191
 
236
192
  end
237
193
  end
@@ -5,7 +5,8 @@ require 'killbill/jnotification'
5
5
  describe Killbill::Plugin::JNotification do
6
6
 
7
7
  before(:all) do
8
- @jnotification = Killbill::Plugin::JNotification.new("Killbill::Plugin::NotificationTest")
8
+ logger = ::Logger.new(STDOUT)
9
+ @jnotification = Killbill::Plugin::JNotification.new("Killbill::Plugin::NotificationTest", { "logger" => logger })
9
10
  end
10
11
 
11
12
 
@@ -5,7 +5,8 @@ require 'killbill/jpayment'
5
5
  describe Killbill::Plugin::JPayment do
6
6
 
7
7
  before(:all) do
8
- @jpayment = Killbill::Plugin::JPayment.new("Killbill::Plugin::PaymentTest")
8
+ logger = ::Logger.new(STDOUT)
9
+ @jpayment = Killbill::Plugin::JPayment.new("Killbill::Plugin::PaymentTest", { "logger" => logger })
9
10
  @kb_account_id = java.util.UUID.fromString("aa5c926e-3d9d-4435-b44b-719d7b583256")
10
11
  @kb_payment_id = java.util.UUID.fromString("bf5c926e-3d9c-470e-b34b-719d7b58323a")
11
12
  @kb_payment_method_id = java.util.UUID.fromString("bf5c926e-3d9c-470e-b34b-719d7b58323a")
@@ -20,10 +21,10 @@ describe Killbill::Plugin::JPayment do
20
21
 
21
22
  it "should_test_charge_ok" do
22
23
  output = @jpayment.process_payment(@kb_account_id, @kb_payment_id, @kb_payment_method_id, @amount, @currency)
23
- output.get_amount.should be_an_instance_of java.math.BigDecimal
24
- output.get_amount.to_s.should == "50.00";
25
- output.get_status.should be_an_instance_of Java::com.ning.billing.payment.plugin.api.PaymentInfoPlugin::PaymentPluginStatus
26
- output.get_status.to_s.should == "PROCESSED"
24
+ output.amount.should be_an_instance_of java.math.BigDecimal
25
+ output.amount.to_s.should == "50.00";
26
+ output.status.should be_an_instance_of Java::com.ning.billing.payment.plugin.api.PaymentPluginStatus
27
+ output.status.to_s.should == "PROCESSED"
27
28
  end
28
29
 
29
30
  it "should_test_charge_exception" do
@@ -33,10 +34,10 @@ describe Killbill::Plugin::JPayment do
33
34
 
34
35
  it "should_test_get_payment_info_ok" do
35
36
  output = @jpayment.get_payment_info(@kb_account_id, @kb_payment_method_id)
36
- output.get_amount.should be_an_instance_of java.math.BigDecimal
37
- output.get_amount.to_s.should == "0.00";
38
- output.get_status.should be_an_instance_of Java::com.ning.billing.payment.plugin.api.PaymentInfoPlugin::PaymentPluginStatus
39
- output.get_status.to_s.should == "PROCESSED"
37
+ output.amount.should be_an_instance_of java.math.BigDecimal
38
+ output.amount.to_s.should == "0.00";
39
+ output.status.should be_an_instance_of Java::com.ning.billing.payment.plugin.api.PaymentPluginStatus
40
+ output.status.to_s.should == "PROCESSED"
40
41
  end
41
42
 
42
43
  it "should_test_get_payment_info_exception" do
@@ -46,10 +47,10 @@ describe Killbill::Plugin::JPayment do
46
47
 
47
48
  it "should_test_refund_ok" do
48
49
  output = @jpayment.process_refund(@kb_account_id, @kb_payment_method_id, @amount, @currency)
49
- output.get_amount.should be_an_instance_of java.math.BigDecimal
50
- output.get_amount.to_s.should == "50.00";
51
- output.get_status.should be_an_instance_of Java::com.ning.billing.payment.plugin.api.RefundInfoPlugin::RefundPluginStatus
52
- output.get_status.to_s.should == "PROCESSED"
50
+ output.amount.should be_an_instance_of java.math.BigDecimal
51
+ output.amount.to_s.should == "50.00";
52
+ output.status.should be_an_instance_of Java::com.ning.billing.payment.plugin.api.RefundPluginStatus
53
+ output.status.to_s.should == "PROCESSED"
53
54
  end
54
55
 
55
56
  it "should_test_refund_exception" do
@@ -77,8 +78,8 @@ describe Killbill::Plugin::JPayment do
77
78
 
78
79
  it "should_test_get_payment_method_detail_ok" do
79
80
  output = @jpayment.get_payment_method_detail(@kb_account_id, @kb_payment_method_id)
80
- output.get_external_payment_method_id.should be_an_instance_of java.lang.String
81
- output.get_external_payment_method_id.should == "foo"
81
+ output.external_payment_method_id.should be_an_instance_of java.lang.String
82
+ output.external_payment_method_id.should == "foo"
82
83
  end
83
84
 
84
85
  it "should_test_get_payment_method_detail_exception" do
@@ -102,7 +103,7 @@ describe Killbill::Plugin::JPayment do
102
103
  output.size.should == 1
103
104
 
104
105
  current_payment_method = output.get(0)
105
- current_payment_method.get_account_id.to_s.should == @kb_account_id.to_s
106
+ current_payment_method.account_id.to_s.should == @kb_account_id.to_s
106
107
  end
107
108
 
108
109
  it "should_get_payment_methods_exception" do
@@ -10,7 +10,7 @@ describe Killbill::Plugin do
10
10
  end
11
11
 
12
12
  it 'should be able to access Killbill mock APIs' do
13
- @account_user_api.createAccount(UUID.randomUUID,
13
+ @account_user_api.createAccountFromParams(UUID.randomUUID,
14
14
  'externalKey',
15
15
  'email',
16
16
  'name',
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ require 'killbill/jkillbill_api'
4
+ require 'killbill/killbill_api'
5
+
6
+ require 'killbill/gen/account_data'
7
+ require 'killbill/gen/currency'
8
+ require 'killbill/gen/date_time_zone'
9
+
10
+
11
+
12
+ describe Killbill::Plugin do
13
+
14
+ before(:each) do
15
+ @account_user_api_mock = MockAccountUserApi.new
16
+ @japi_proxy = Killbill::Plugin::JKillbillApi.new("foo", {:account_user_api => @account_user_api_mock})
17
+ @kb_apis = Killbill::Plugin::KillbillApi.new(@japi_proxy)
18
+ @account = Killbill::Plugin::Model::AccountData.new("external_key", "name", 3, "email", 1, Killbill::Plugin::Model::Currency.new(:USD), nil, Killbill::Plugin::Model::DateTimeZone.new(:UTC), "locale", "address1", nil,
19
+ "company_name", "city", "state_or_province", "postal_code", "country", "phone", true, false)
20
+ end
21
+
22
+ it 'should test create/get_account_by_id' do
23
+
24
+ account_created = @kb_apis.create_account(@account)
25
+ account_created.should be_an_instance_of Killbill::Plugin::Model::Account
26
+
27
+ account_fetched = @kb_apis.get_account_by_id(account_created.id)
28
+ account_fetched.should be_an_instance_of Killbill::Plugin::Model::Account
29
+ account_fetched.id.should be_an_instance_of Killbill::Plugin::Model::UUID
30
+ account_fetched.id.to_s.should == account_created.id.to_s
31
+ account_fetched.external_key.should == "external_key"
32
+ account_fetched.name.should == "name"
33
+ account_fetched.first_name_length.should == 3
34
+ account_fetched.email.should == "email"
35
+ account_fetched.bill_cycle_day_local.should == 1
36
+ account_fetched.currency.should == Killbill::Plugin::Model::Currency.new(:USD)
37
+ account_fetched.locale.should == "locale"
38
+ account_fetched.address1.should == "address1"
39
+ account_fetched.address2.should == nil
40
+ account_fetched.time_zone.should == Killbill::Plugin::Model::DateTimeZone.new(:UTC)
41
+ account_fetched.company_name.should == "company_name"
42
+ account_fetched.city.should == "city"
43
+ account_fetched.state_or_province.should == "state_or_province"
44
+ account_fetched.postal_code.should == "postal_code"
45
+ account_fetched.country.should == "country"
46
+ account_fetched.phone.should == "phone"
47
+ end
48
+
49
+ end
@@ -12,7 +12,7 @@ module Killbill
12
12
  if @raise_exception
13
13
  raise StandardError.new("Test exception")
14
14
  else
15
- PaymentResponse.new(amount_in_cents, DateTime.now, DateTime.now, PaymentStatus::SUCCESS, "gateway_error", "gateway_error_code")
15
+ Killbill::Plugin::Model::PaymentInfoPlugin.new(amount_in_cents, DateTime.now, DateTime.now, Killbill::Plugin::Model::PaymentPluginStatus.new(:PROCESSED), "gateway_error", "gateway_error_code", nil, nil)
16
16
  end
17
17
  end
18
18
 
@@ -20,7 +20,7 @@ module Killbill
20
20
  if @raise_exception
21
21
  raise StandardError.new("Test exception")
22
22
  else
23
- PaymentResponse.new(0, DateTime.now, DateTime.now, PaymentStatus::SUCCESS, "gateway_error", "gateway_error_code")
23
+ Killbill::Plugin::Model::PaymentInfoPlugin.new(0, DateTime.now, DateTime.now, Killbill::Plugin::Model::PaymentPluginStatus.new(:PROCESSED), "gateway_error", "gateway_error_code", nil, nil)
24
24
  end
25
25
  end
26
26
 
@@ -28,7 +28,7 @@ module Killbill
28
28
  if @raise_exception
29
29
  raise StandardError.new("Test exception")
30
30
  else
31
- RefundResponse.new(amount_in_cents, DateTime.now, DateTime.now, PaymentStatus::SUCCESS, "gateway_error", "gateway_error_code")
31
+ Killbill::Plugin::Model::RefundInfoPlugin.new(5000, DateTime.now, DateTime.now, Killbill::Plugin::Model::RefundPluginStatus.new(:PROCESSED), "gateway_error", "gateway_error_code", nil)
32
32
  end
33
33
  end
34
34
 
@@ -48,7 +48,7 @@ module Killbill
48
48
  if @raise_exception
49
49
  raise StandardError.new("Test exception")
50
50
  else
51
- PaymentMethodResponse.new("foo", true, [])
51
+ Killbill::Plugin::Model::PaymentMethodPlugin.new("foo", true, [], nil, "type", "cc_name", "cc_type", "cc_expiration_month", "cc_expiration_year", "cc_last4", "address1", "address2", "city", "state", "zip", "country")
52
52
  end
53
53
  end
54
54
 
@@ -62,7 +62,7 @@ module Killbill
62
62
  if @raise_exception
63
63
  raise StandardError.new("Test exception")
64
64
  else
65
- [PaymentMethodResponseInternal.new(kb_account_id, kb_account_id, true, "external_payment_method_id")]
65
+ [Killbill::Plugin::Model::PaymentMethodInfoPlugin.new(kb_account_id, kb_account_id, true, "external_payment_method_id")]
66
66
  end
67
67
  end
68
68
 
@@ -1,12 +1,11 @@
1
1
  require 'spec_helper'
2
- require 'logger'
3
2
 
4
3
  describe Killbill::Plugin::RackHandler do
5
4
  it 'should be able to register Sinatra apps' do
6
5
  rack = Killbill::Plugin::RackHandler.instance
7
6
  rack.configured?.should be_false
8
7
 
9
- rack.configure(Logger.new(STDOUT), File.expand_path('../config_test.ru', __FILE__))
8
+ rack.configure(Killbill::Plugin::KillbillLogger.new(::Logger.new(STDOUT)), File.expand_path('../config_test.ru', __FILE__))
10
9
  rack.configured?.should be_true
11
10
 
12
11
  status, headers, body = rack.rack_service('/ping')
data/spec/spec_helper.rb CHANGED
@@ -1,9 +1,12 @@
1
+
2
+
1
3
  require 'java'
2
4
 
3
5
  require 'bundler'
4
6
  require 'logger'
5
7
 
6
8
  require 'killbill'
9
+ require 'killbill/killbill_logger'
7
10
  # JRuby specific, not required by default
8
11
  require 'killbill/http_servlet'
9
12
 
@@ -0,0 +1,440 @@
1
+ require 'rubygems'
2
+ require 'optparse'
3
+
4
+
5
+ # Relative path from Killbill repo
6
+ API_DIR_SRC="api/src/main/java"
7
+
8
+ # Interfaces to consider
9
+ INTERFACES = ["Account",
10
+ "AccountData",
11
+ "AccountEmail",
12
+ "BlockingState",
13
+ "ExtBusEvent",
14
+ "ExtBusEventType",
15
+ "ObjectType",
16
+ "Subscription",
17
+ "SubscriptionState",
18
+ "SubscriptionSourceType",
19
+ "SubscriptionBundle",
20
+ "Invoice",
21
+ "InvoiceItem",
22
+ "InvoicePayment",
23
+ "InvoicePaymentType",
24
+ "Payment",
25
+ "PaymentAttempt",
26
+ "Refund",
27
+ "AuditLog",
28
+ "CallContext",
29
+ "CallOrigin",
30
+ "UserType",
31
+ "TenantContext",
32
+ "CustomField",
33
+ "Tag",
34
+ "TagDefinition",
35
+ "Currency",
36
+ "PaymentInfoPlugin",
37
+ "PaymentPluginStatus",
38
+ "RefundInfoPlugin",
39
+ "RefundPluginStatus",
40
+ "PaymentMethodKVInfo",
41
+ "PaymentMethodPlugin",
42
+ "PaymentMethodInfoPlugin"]
43
+
44
+
45
+ class String
46
+ def snake_case
47
+ return downcase if match(/\A[A-Z]+\z/)
48
+ gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').
49
+ gsub(/([a-z])([A-Z])/, '\1_\2').
50
+ downcase
51
+ end
52
+ end
53
+
54
+ class Pojo
55
+
56
+ attr_accessor :name, :package, :fields
57
+
58
+ def initialize(dummy=nil)
59
+ @name = nil
60
+ @package = nil
61
+ @fields = []
62
+ end
63
+ end
64
+
65
+ =begin
66
+ class ObjectType
67
+
68
+ @@admissible_values = [:ACCOUNT, :ACCOUNT_EMAIL]
69
+ attr_reader :enum
70
+
71
+ def initialize(value)
72
+ @enum = value
73
+ end
74
+
75
+ def self.is_admissible_value(value)
76
+ @@admissible_values.include?(value)
77
+ end
78
+
79
+ def self.admissible_values
80
+ @@admissible_values
81
+ end
82
+ =end
83
+
84
+ class PojoEnum < Pojo
85
+
86
+ def initialize
87
+ super
88
+ end
89
+
90
+ def generate(out)
91
+ out.write("\n")
92
+ out.write("\#\n")
93
+ out.write("\# Ruby classes automatically generated from java classes-- don't edit\n")
94
+ out.write("\#\n")
95
+ out.write("module Killbill\n")
96
+ out.write(" module Plugin\n")
97
+ out.write(" module Model\n")
98
+ out.write("\n")
99
+ out.write(" class #{name}\n")
100
+ out.write("\n")
101
+ out.write(" @@admissible_values = #{@fields.collect {|e| e.to_sym }}\n")
102
+ out.write(" attr_reader :enum\n")
103
+ out.write("\n")
104
+ out.write(" def initialize(value)\n")
105
+ out.write(" raise ArgumentError.new(\"Enum #{name} does not have such value : \#{value}\") if ! #{name}.is_admissible_value?(value)\n")
106
+ out.write(" @enum = value\n")
107
+ out.write(" end\n")
108
+ out.write("\n")
109
+ out.write(" def ==(other)\n")
110
+ out.write(" return false if other.nil?\n")
111
+ out.write(" self.enum == other.enum\n")
112
+ out.write(" end\n")
113
+ out.write("\n")
114
+ out.write(" def self.is_admissible_value?(value)\n")
115
+ out.write(" @@admissible_values.include?(value)\n")
116
+ out.write(" end\n")
117
+ out.write("\n")
118
+ out.write(" def self.admissible_values \n")
119
+ out.write(" @@admissible_values\n")
120
+ out.write(" end\n")
121
+ out.write(" end\n")
122
+ out.write(" end\n")
123
+ out.write(" end\n")
124
+ out.write("end\n")
125
+ out.flush
126
+ end
127
+
128
+ def export(output_dir, parents_pojo)
129
+ @fields.uniq!
130
+ File.open("#{output_dir}/#{name.snake_case}.rb", "w+") do |f|
131
+ generate(f)
132
+ end
133
+ end
134
+
135
+
136
+
137
+ end
138
+
139
+ class PojoIfceOrClass < Pojo
140
+
141
+ attr_accessor :interface, :parents
142
+
143
+ def initialize(is_interface)
144
+ super
145
+ @interface = is_interface
146
+ @parents = []
147
+ end
148
+
149
+ def generate(out)
150
+ out.write("\n")
151
+ out.write("\#\n")
152
+ out.write("\# Ruby classes automatically generated from java classes-- don't edit\n")
153
+ out.write("\#\n")
154
+ out.write("module Killbill\n")
155
+ out.write(" module Plugin\n")
156
+ out.write(" module Model\n")
157
+ out.write("\n")
158
+ out.write(" class #{name}\n")
159
+ out.write("\n")
160
+ if @interface
161
+ out.write(" include #{@package}.#{@name}\n")
162
+ out.write("\n")
163
+ end
164
+ out.write(" attr_reader #{fields.collect { |i| ":#{i}"}.join(", ")}\n")
165
+ out.write("\n")
166
+ out.write(" def initialize(#{@fields.join(", ")})\n")
167
+ fields.each do |f|
168
+ out.write(" @#{f} = #{f}\n")
169
+ end
170
+ out.write(" end\n")
171
+ out.write(" end\n")
172
+ out.write(" end\n")
173
+ out.write(" end\n")
174
+ out.write("end\n")
175
+ out.flush
176
+ end
177
+
178
+ def export(output_dir, parents_pojo)
179
+ parents.each do |p|
180
+ if ! parents_pojo[p].nil?
181
+ (@fields.unshift(parents_pojo[p].fields)).flatten!
182
+ end
183
+ end
184
+ @fields.uniq!
185
+ File.open("#{output_dir}/#{name.snake_case}.rb", "w+") do |f|
186
+ generate(f)
187
+ end
188
+ end
189
+
190
+ def to_s
191
+ "#{@name} : #{@fields.join(",")}"
192
+ end
193
+
194
+
195
+ end
196
+
197
+
198
+ class Visitor
199
+
200
+ attr_reader :pojo
201
+
202
+ def initialize
203
+ @pojo = nil
204
+ end
205
+
206
+ def create_interface(name, package)
207
+ @pojo = PojoIfceOrClass.new(true)
208
+ @pojo.name = name
209
+ @pojo.package = package
210
+ end
211
+
212
+ def create_class(name, package)
213
+ @pojo = PojoIfceOrClass.new(false)
214
+ @pojo.name = name
215
+ @pojo.package = package
216
+ end
217
+
218
+ def create_enum(name, package)
219
+ @pojo = PojoEnum.new
220
+ @pojo.name = name
221
+ @pojo.package = package
222
+ end
223
+
224
+ def add_parents(parents)
225
+ (@pojo.parents << parents).flatten!
226
+ end
227
+
228
+ def add_getter(getter)
229
+ @pojo.fields << getter.snake_case
230
+ end
231
+
232
+ def add_enum_field(enum_field)
233
+ @pojo.fields << enum_field
234
+ end
235
+ end
236
+
237
+ class Generator
238
+
239
+ attr_reader :output_dir, :finder, :files
240
+
241
+ def initialize(output_dir, interfaces, finder)
242
+ @output_dir = output_dir
243
+ @finder = finder
244
+ @files = finder.search(interfaces)
245
+ end
246
+
247
+ def generate_all
248
+
249
+ pojos = []
250
+ @files.each do |i|
251
+ generate_file(i) do |pojo|
252
+ pojos << pojo
253
+ end
254
+ end
255
+
256
+ parent_pojos = {}
257
+
258
+ parent_ifces = []
259
+ pojos.each do |pojo|
260
+ if pojo.is_a? PojoIfceOrClass
261
+ (parent_ifces << pojo.parents).flatten!
262
+ end
263
+ end
264
+ parent_ifces.uniq!
265
+
266
+ puts "UNIQ PARENTS = #{parent_ifces.to_s}"
267
+
268
+ parent_files = finder.search(parent_ifces)
269
+ puts "PARENT FILES = #{parent_files}"
270
+ parent_files.each do |i|
271
+ puts "Starting processing parent file #{i}"
272
+ generate_file(i) do |pojo|
273
+ parent_pojos[pojo.name] = pojo
274
+ end
275
+ end
276
+
277
+ pojos.each do |pojo|
278
+ puts "Starting processing file #{pojo.name}"
279
+
280
+ pojo.export(@output_dir, parent_pojos)
281
+
282
+ File.open("#{output_dir}/require_gen.rb", "w+") do |f|
283
+ pojos.each do |pojo|
284
+ f.write("require \'killbill/gen/#{pojo.name.snake_case}\'\n")
285
+ end
286
+ end
287
+ puts "Completing processing file #{pojo.name}"
288
+ end
289
+ end
290
+
291
+ private
292
+
293
+
294
+ def generate_file(file)
295
+ visitor = Visitor.new
296
+ File.open(file, "r") do |f|
297
+
298
+ is_enum = false
299
+ is_interface = false
300
+ is_class = false
301
+ package = nil
302
+ while (line = f.gets)
303
+
304
+ # Package
305
+ re = /\s*package\s+((?:\w|\.)+)\s*;/
306
+ if re.match(line)
307
+ package = $1
308
+ end
309
+
310
+ # Interface
311
+ re = /public\s+(interface|class)\s+(\w+)\s+(extends(?:\w|,|\s|<|>)+){0,1}\s*{\s*/
312
+ if re.match(line)
313
+ is_interface = ($1 == "interface")
314
+ is_class = ($1 == "class")
315
+ name = $2
316
+ visitor.create_interface(name, package) if is_interface
317
+ visitor.create_class(name, package) if is_class
318
+ if ! $3.nil?
319
+ re = /\s*extends\s+(.*)/
320
+ extends_ifces = $3
321
+ if re.match(extends_ifces)
322
+ # extract each parent and remove trailing, leading space
323
+ parents = $1.split(",").collect { |e| e.strip}
324
+ # remove generics
325
+ re = /(\w+)(?:<\w+>){0,1}/
326
+ parents.collect! { |e| re.match(e); $1 }
327
+ visitor.add_parents(parents)
328
+ end
329
+ end
330
+ end
331
+
332
+ # Enum
333
+ re = /public\s+enum\s+(\w+)\s+/
334
+ if re.match(line)
335
+ enum_name = $1
336
+ visitor.create_enum(enum_name, package)
337
+ is_enum = true
338
+ is_enum_complete = false
339
+ end
340
+
341
+ # Non static getters for interfaces
342
+ re = /(?:public){0,1}\s+(?:static\s+(?:\w|<|>)+)\s+(?:get|is).*/
343
+ if (is_interface || is_class) && !re.match(line)
344
+ re = /(?:public){0,1}\s+(?:(?:\w|<|>)+)\s+get(\w+)()\s*/
345
+ if re.match(line)
346
+ visitor.add_getter($1)
347
+ end
348
+ re = /(?:public){0,1}\s+(?:(?:\w|<|>)+)\s+(is\w+)()\s*/
349
+ if re.match(line)
350
+ visitor.add_getter($1)
351
+ end
352
+ end
353
+
354
+ # Enum fields
355
+ re = /\s+((?:\w|_)+)(?:\((?:\w|\s|\")+\)){0,1}\s*(,|;){1}/
356
+ if !is_enum_complete && is_enum && re.match(line)
357
+ visitor.add_enum_field($1.strip)
358
+ if $2 == ';'
359
+ is_enum_complete = true
360
+ end
361
+ end
362
+ end
363
+ end
364
+ yield(visitor.pojo)
365
+ end
366
+ end
367
+
368
+
369
+ class Finder
370
+
371
+ attr_reader :interfaces, :src_dir
372
+
373
+ def initialize(src_dir)
374
+ @interfaces = interfaces
375
+ @src_dir = src_dir
376
+ end
377
+
378
+ def search(interfaces)
379
+ res = []
380
+ if !interfaces.nil? && interfaces.size > 0
381
+ Dir.chdir(@src_dir)
382
+ Dir.glob("**/*") do |e|
383
+ if File.file?(e)
384
+ basename = File.basename(e, ".java")
385
+ if interfaces.include? basename
386
+ res << e
387
+ end
388
+ end
389
+ end
390
+ end
391
+ res
392
+ end
393
+ end
394
+
395
+
396
+ class CommandParser
397
+
398
+ attr_reader :options, :args, :interfaces, :src_relative_path
399
+
400
+ def initialize(args, interfaces, src_relative_path)
401
+ @options = {}
402
+ @args = args
403
+ @interfaces = interfaces
404
+ @src_relative_path = src_relative_path
405
+ end
406
+
407
+
408
+ def run
409
+ parse
410
+ puts "Generating ruby classes under: #{@options[:output]}"
411
+ finder = Finder.new("#{@options[:src]}/#{@src_relative_path}")
412
+ gen = Generator.new(@options[:output], @interfaces, finder)
413
+ gen.generate_all
414
+ end
415
+
416
+ private
417
+
418
+ def parse()
419
+ optparse = OptionParser.new do |opts|
420
+ opts.banner = "Usage: java2ruby.rb [options]"
421
+
422
+ opts.separator ""
423
+
424
+ opts.on("-o", "--output OUTPUT",
425
+ "Output directory") do |o|
426
+ @options[:output] = o
427
+ end
428
+
429
+ opts.on("-s", "--src SRC",
430
+ "Killbill source directory") do |s|
431
+ @options[:src] = s
432
+ end
433
+ end
434
+ optparse.parse!(@args)
435
+ end
436
+
437
+ end
438
+
439
+ parser = CommandParser.new(ARGV, INTERFACES, API_DIR_SRC)
440
+ parser.run