killbill 1.0.8 → 1.0.9

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.8
1
+ 1.0.9
@@ -39,6 +39,7 @@ begin
39
39
 
40
40
  # jbundler needs to be loaded first!
41
41
  require 'killbill/jplugin'
42
+ require 'killbill/jpayment'
42
43
  rescue LoadError => e
43
44
  warn 'You need JRuby to run Killbill plugins'
44
45
  end
@@ -1,3 +1,5 @@
1
+ require 'java'
2
+
1
3
  require 'singleton'
2
4
 
3
5
  require 'killbill/creator'
@@ -7,19 +9,28 @@ require 'killbill/jresponse/jrefund_response'
7
9
  require 'killbill/jresponse/jpayment_method_response'
8
10
  require 'killbill/jresponse/jpayment_method_response_internal'
9
11
 
12
+ include Java
13
+
14
+ class String
15
+ def snake_case
16
+ return downcase if match(/\A[A-Z]+\z/)
17
+ gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').
18
+ gsub(/([a-z])([A-Z])/, '\1_\2').
19
+ downcase
20
+ end
21
+ end
10
22
 
11
23
  module Killbill
12
24
  module Plugin
13
25
 
14
26
  java_package 'com.ning.billing.payment.plugin.api'
15
- class JPayment
27
+ class JPayment < JPlugin
16
28
 
17
- include Java::com.ning.billing.payment.plugin.api.PaymentPluginApi
18
-
19
- attr_reader :real_payment
29
+ # java_implements com.ning.billing.payment.plugin.api.PaymentPluginApi
30
+ include com.ning.billing.payment.plugin.api.PaymentPluginApi
20
31
 
21
32
  def initialize(real_class_name, services = {})
22
- @real_payment = Creator.new(real_class_name).create(services)
33
+ super(real_class_name, services)
23
34
  end
24
35
 
25
36
  # TODO STEPH decide what to do the getName()
@@ -27,8 +38,8 @@ module Killbill
27
38
  def get_name
28
39
  end
29
40
 
30
- java_signature 'Java::com.ning.billing.payment.plugin.api.PaymentInfoPlugin processPayment(java.util.UUID, java.util.UUID, java.lang.BigDecimal, Java::com.ning.billing.util.callcontext.CallContext)'
31
- def charge(*args)
41
+ java_signature 'com.ning.billing.payment.plugin.api.PaymentInfoPlugin processPayment(java.util.UUID, java.util.UUID, java.lang.BigDecimal, com.ning.billing.util.callcontext.CallContext)'
42
+ def process_payment(*args)
32
43
  do_call_handle_exception(__method__, *args) do |res|
33
44
  return JPaymentResponse.new(res)
34
45
  end
@@ -42,7 +53,7 @@ module Killbill
42
53
  end
43
54
 
44
55
  java_signature 'Java::com.ning.billing.payment.plugin.api.RefundInfoPlugin processRefund(java.util.UUID, java.lang.BigDecimal, Java::com.ning.billing.util.callcontext.CallContext)'
45
- def refund(*args)
56
+ def process_refund(*args)
46
57
  do_call_handle_exception(__method__, *args) do |res|
47
58
  return JRefundResponse.new(res)
48
59
  end
@@ -99,7 +110,7 @@ module Killbill
99
110
  def do_call_handle_exception(method_name, *args)
100
111
  begin
101
112
  rargs = convert_args(method_name, args)
102
- res = @real_payment.send(method_name, *rargs)
113
+ res = @delegate_plugin.send(method_name.to_s.snake_case.to_sym, *rargs)
103
114
  yield(res)
104
115
  rescue Exception => e
105
116
  wrap_and_throw_exception(method_name, e)
@@ -123,6 +134,9 @@ module Killbill
123
134
  JConverter.from_payment_method_plugin(a)
124
135
  elsif ((a.java_kind_of? Java::boolean) || (a.java_kind_of? java.lang.Boolean))
125
136
  JConverter.from_boolean(a)
137
+ # Require because it looks like if non boxed value are passed they already arrive as Ruby type
138
+ elsif ((a.java_kind_of? TrueClass) || (a.java_kind_of? FalseClass))
139
+ a
126
140
  elsif a.java_kind_of? java.util.List
127
141
  result = Array.new
128
142
  if a.size > 0
@@ -137,7 +151,9 @@ module Killbill
137
151
  end
138
152
  result
139
153
  else
140
- raise Java::com.ning.billing.payment.plugin.api.PaymentPluginApiException.new("#{api} failure", "Unexpected parameter type #{a.class}")
154
+ # Since we don't pass the Context at this point, we can't raise any exceptions for unexpected types.
155
+ #raise Java::com.ning.billing.payment.plugin.api.PaymentPluginApiException.new("#{api} failure", "Unexpected parameter type #{a.class}")
156
+ nil
141
157
  end
142
158
  end
143
159
  end
@@ -34,6 +34,16 @@ module Killbill
34
34
  end
35
35
  end
36
36
 
37
+ def to_refund_plugin_status(status)
38
+ if status == PaymentStatus::SUCCESS
39
+ Java::com.ning.billing.payment.plugin.api.RefundInfoPlugin::RefundPluginStatus::PROCESSED
40
+ elsif status == PaymentStatus::ERROR
41
+ Java::com.ning.billing.payment.plugin.api.RefundInfoPlugin::RefundPluginStatus::ERROR
42
+ else
43
+ Java::com.ning.billing.payment.plugin.api.RefundInfoPlugin::RefundPluginStatus::UNDEFINED
44
+ end
45
+ end
46
+
37
47
  def to_big_decimal(amount_in_cents)
38
48
  amount_in_cents.nil? ? java.math.BigDecimal::ZERO : java.math.BigDecimal.new('%.2f' % (amount_in_cents.to_i/100.0))
39
49
  end
@@ -74,6 +84,16 @@ module Killbill
74
84
  end
75
85
  end
76
86
 
87
+ def from_refund_plugin_status(status)
88
+ if status == Java::com.ning.billing.payment.plugin.api.RefundInfoPlugin::RefundPluginStatus::PROCESSED
89
+ PaymentStatus::SUCCESS
90
+ elsif status == Java::com.ning.billing.payment.plugin.api.RefundInfoPlugin::RefundPluginStatus::ERROR
91
+ PaymentStatus::ERROR
92
+ else
93
+ PaymentStatus::UNDEFINED
94
+ end
95
+ end
96
+
77
97
  def from_big_decimal(big_decimal)
78
98
  big_decimal.nil? ? 0 : big_decimal.multiply(java.math.BigDecimal.valueOf(100)).to_s.to_i
79
99
  end
@@ -20,7 +20,7 @@ module Killbill
20
20
  @amount = JConverter.to_big_decimal(refund_response.amount_in_cents)
21
21
  @created_date = JConverter.to_joda_date_time(refund_response.created_date)
22
22
  @effective_date = JConverter.to_joda_date_time(refund_response.effective_date)
23
- @status = JConverter.to_payment_plugin_status(refund_response.status)
23
+ @status = JConverter.to_refund_plugin_status(refund_response.status)
24
24
  @gateway_error = JConverter.to_string(refund_response.gateway_error)
25
25
  @gateway_error_code = JConverter.to_string(refund_response.gateway_error_code)
26
26
  end
@@ -16,7 +16,7 @@ module Killbill
16
16
  raise OperationUnsupportedByGatewayError
17
17
  end
18
18
 
19
- def charge(kb_payment_id, kb_payment_method_id, amount_in_cents, options = {})
19
+ def process_payment(kb_payment_id, kb_payment_method_id, amount_in_cents, options = {})
20
20
  raise OperationUnsupportedByGatewayError
21
21
  end
22
22
 
@@ -24,7 +24,7 @@ module Killbill
24
24
  raise OperationUnsupportedByGatewayError
25
25
  end
26
26
 
27
- def refund(kb_payment_id, amount_in_cents, options = {})
27
+ def process_refund(kb_payment_id, amount_in_cents, options = {})
28
28
  raise OperationUnsupportedByGatewayError
29
29
  end
30
30
 
@@ -44,7 +44,7 @@ module Killbill
44
44
  raise OperationUnsupportedByGatewayError
45
45
  end
46
46
 
47
- def get_payment_methods(kb_account_id, options = {})
47
+ def get_payment_methods(kb_account_id, refresh_from_gateway, options = {})
48
48
  raise OperationUnsupportedByGatewayError
49
49
  end
50
50
 
@@ -59,7 +59,9 @@ module Killbill
59
59
  end
60
60
 
61
61
  def logger=(logger)
62
- @logger = Killbill::Plugin::Logger.new(logger)
62
+ # logger is an OSGI LogService in the Killbill environment. For testing purposes,
63
+ # allow delegation to a standard logger
64
+ @logger = logger.respond_to?(:info) ? logger : Killbill::Plugin::Logger.new(logger)
63
65
  end
64
66
 
65
67
  def logger
@@ -29,6 +29,17 @@ describe Killbill::Plugin::PluginBase do
29
29
  lambda { plugin.blablabla }.should raise_error NoMethodError
30
30
  end
31
31
 
32
+ it 'should be able to default to the ruby logger for tests' do
33
+ logger = Logger.new(STDOUT)
34
+ logger.level = Logger::DEBUG
35
+
36
+ plugin = Killbill::Plugin::PluginBase.new
37
+ plugin.logger = logger
38
+ plugin.start_plugin
39
+
40
+ plugin.logger.level.should == logger.level
41
+ end
42
+
32
43
  it 'should be able to add custom code in the startup/shutdown sequence' do
33
44
  plugin = LifecycleNotificationPlugin.new
34
45
 
@@ -14,11 +14,11 @@ describe Killbill::Plugin::JPayment do
14
14
  end
15
15
 
16
16
  before(:each) do
17
- @jpayment.real_payment.send(:clear_exception_on_next_calls)
17
+ @jpayment.delegate_plugin.send(:clear_exception_on_next_calls)
18
18
  end
19
19
 
20
20
  it "should_test_charge_ok" do
21
- output = @jpayment.charge(@kb_payment_id, @kb_payment_method_id, @amount)
21
+ output = @jpayment.process_payment(@kb_payment_id, @kb_payment_method_id, @amount)
22
22
  output.get_amount.should be_an_instance_of java.math.BigDecimal
23
23
  output.get_amount.to_s.should == "50.00";
24
24
  output.get_status.should be_an_instance_of Java::com.ning.billing.payment.plugin.api.PaymentInfoPlugin::PaymentPluginStatus
@@ -26,8 +26,8 @@ describe Killbill::Plugin::JPayment do
26
26
  end
27
27
 
28
28
  it "should_test_charge_exception" do
29
- @jpayment.real_payment.send(:raise_exception_on_next_calls)
30
- lambda { @jpayment.charge(@kb_payment_id, @kb_payment_method_id, @amount) }.should raise_error Java::com.ning.billing.payment.plugin.api.PaymentPluginApiException
29
+ @jpayment.delegate_plugin.send(:raise_exception_on_next_calls)
30
+ lambda { @jpayment.process_payment(@kb_payment_id, @kb_payment_method_id, @amount) }.should raise_error Java::com.ning.billing.payment.plugin.api.PaymentPluginApiException
31
31
  end
32
32
 
33
33
  it "should_test_get_payment_info_ok" do
@@ -39,21 +39,21 @@ describe Killbill::Plugin::JPayment do
39
39
  end
40
40
 
41
41
  it "should_test_get_payment_info_exception" do
42
- @jpayment.real_payment.send(:raise_exception_on_next_calls)
42
+ @jpayment.delegate_plugin.send(:raise_exception_on_next_calls)
43
43
  lambda { @jpayment.get_payment_info(@kb_payment_method_id) }.should raise_error Java::com.ning.billing.payment.plugin.api.PaymentPluginApiException
44
44
  end
45
45
 
46
46
  it "should_test_refund_ok" do
47
- output = @jpayment.refund(@kb_payment_method_id, @amount)
47
+ output = @jpayment.process_refund(@kb_payment_method_id, @amount)
48
48
  output.get_amount.should be_an_instance_of java.math.BigDecimal
49
49
  output.get_amount.to_s.should == "50.00";
50
- output.get_status.should be_an_instance_of Java::com.ning.billing.payment.plugin.api.PaymentInfoPlugin::PaymentPluginStatus
50
+ output.get_status.should be_an_instance_of Java::com.ning.billing.payment.plugin.api.RefundInfoPlugin::RefundPluginStatus
51
51
  output.get_status.to_s.should == "PROCESSED"
52
52
  end
53
53
 
54
54
  it "should_test_refund_exception" do
55
- @jpayment.real_payment.send(:raise_exception_on_next_calls)
56
- lambda { @jpayment.refund(@kb_payment_method_id, @amount) }.should raise_error Java::com.ning.billing.payment.plugin.api.PaymentPluginApiException
55
+ @jpayment.delegate_plugin.send(:raise_exception_on_next_calls)
56
+ lambda { @jpayment.process_refund(@kb_payment_method_id, @amount) }.should raise_error Java::com.ning.billing.payment.plugin.api.PaymentPluginApiException
57
57
  end
58
58
 
59
59
  it "should_test_add_payment_method_ok" do
@@ -61,7 +61,7 @@ describe Killbill::Plugin::JPayment do
61
61
  end
62
62
 
63
63
  it "should_test_add_payment_method_exception" do
64
- @jpayment.real_payment.send(:raise_exception_on_next_calls)
64
+ @jpayment.delegate_plugin.send(:raise_exception_on_next_calls)
65
65
  lambda { @jpayment.add_payment_method(@kb_account_id, @kb_payment_method_id, @payment_method_plugin, true) }.should raise_error Java::com.ning.billing.payment.plugin.api.PaymentPluginApiException
66
66
  end
67
67
 
@@ -71,7 +71,7 @@ describe Killbill::Plugin::JPayment do
71
71
  end
72
72
 
73
73
  it "should_test_delete_payment_method_exception" do
74
- @jpayment.real_payment.send(:raise_exception_on_next_calls)
74
+ @jpayment.delegate_plugin.send(:raise_exception_on_next_calls)
75
75
  lambda { @jpayment.delete_payment_method(@kb_payment_method_id) }.should raise_error Java::com.ning.billing.payment.plugin.api.PaymentPluginApiException
76
76
  end
77
77
 
@@ -82,7 +82,7 @@ describe Killbill::Plugin::JPayment do
82
82
  end
83
83
 
84
84
  it "should_test_get_payment_method_detail_exception" do
85
- @jpayment.real_payment.send(:raise_exception_on_next_calls)
85
+ @jpayment.delegate_plugin.send(:raise_exception_on_next_calls)
86
86
  lambda { @jpayment.get_payment_method_detail(@kb_account_id, @kb_payment_method_id) }.should raise_error Java::com.ning.billing.payment.plugin.api.PaymentPluginApiException
87
87
  end
88
88
 
@@ -91,7 +91,7 @@ describe Killbill::Plugin::JPayment do
91
91
  end
92
92
 
93
93
  it "should_test_set_default_payment_method_exception" do
94
- @jpayment.real_payment.send(:raise_exception_on_next_calls)
94
+ @jpayment.delegate_plugin.send(:raise_exception_on_next_calls)
95
95
  lambda { @jpayment.set_default_payment_method(@kb_payment_method_id) }.should raise_error Java::com.ning.billing.payment.plugin.api.PaymentPluginApiException
96
96
  end
97
97
 
@@ -104,9 +104,8 @@ describe Killbill::Plugin::JPayment do
104
104
  current_payment_method = output.get(0)
105
105
  current_payment_method.get_account_id.to_s.should == @kb_account_id.to_s
106
106
  end
107
-
108
107
  it "should_get_payment_methods_exception" do
109
- @jpayment.real_payment.send(:raise_exception_on_next_calls)
108
+ @jpayment.delegate_plugin.send(:raise_exception_on_next_calls)
110
109
  lambda { @jpayment.get_payment_methods(@kb_account_id, true) }.should raise_error Java::com.ning.billing.payment.plugin.api.PaymentPluginApiException
111
110
  end
112
111
 
@@ -115,7 +114,7 @@ describe Killbill::Plugin::JPayment do
115
114
  end
116
115
 
117
116
  it "should_test_reset_payment_methods_exception" do
118
- @jpayment.real_payment.send(:raise_exception_on_next_calls)
117
+ @jpayment.delegate_plugin.send(:raise_exception_on_next_calls)
119
118
  lambda { @jpayment.reset_payment_methods(java.util.ArrayList.new) }.should raise_error Java::com.ning.billing.payment.plugin.api.PaymentPluginApiException
120
119
  end
121
120
  end
@@ -29,7 +29,7 @@ describe Killbill::Plugin::JRefundResponse do
29
29
  output.get_effective_date.should be_an_instance_of org.joda.time.DateTime
30
30
  #output.get_effective_date.to_s.should == effective_date.to_s;
31
31
 
32
- output.get_status.should be_an_instance_of Java::com.ning.billing.payment.plugin.api.PaymentInfoPlugin::PaymentPluginStatus
32
+ output.get_status.should be_an_instance_of Java::com.ning.billing.payment.plugin.api.RefundInfoPlugin::RefundPluginStatus
33
33
  output.get_status.to_s.should == "PROCESSED"
34
34
 
35
35
  output.get_gateway_error.should be_an_instance_of java.lang.String
@@ -20,15 +20,15 @@ describe Killbill::Plugin::Payment do
20
20
  end
21
21
 
22
22
  it "should raise exceptions for unsupported operations" do
23
- lambda { @plugin.charge(@external_account_key, @killbill_payment_id, @amount_in_cents) }.should raise_error Killbill::Plugin::Payment::OperationUnsupportedByGatewayError
24
- lambda { @plugin.refund(@external_account_key, @killbill_payment_id, @amount_in_cents) }.should raise_error Killbill::Plugin::Payment::OperationUnsupportedByGatewayError
23
+ lambda { @plugin.process_payment(@external_account_key, @killbill_payment_id, @amount_in_cents) }.should raise_error Killbill::Plugin::Payment::OperationUnsupportedByGatewayError
24
+ lambda { @plugin.process_refund(@external_account_key, @killbill_payment_id, @amount_in_cents) }.should raise_error Killbill::Plugin::Payment::OperationUnsupportedByGatewayError
25
25
  lambda { @plugin.get_payment_info(@killbill_payment_id) }.should raise_error Killbill::Plugin::Payment::OperationUnsupportedByGatewayError
26
26
  lambda { @plugin.add_payment_method(@external_account_key, @payment_method, @payment_method_props, true ) }.should raise_error Killbill::Plugin::Payment::OperationUnsupportedByGatewayError
27
27
  lambda { @plugin.delete_payment_method(@external_account_key, @external_payment_method_id) }.should raise_error Killbill::Plugin::Payment::OperationUnsupportedByGatewayError
28
28
  lambda { @plugin.set_default_payment_method(@external_account_key, @payment_method) }.should raise_error Killbill::Plugin::Payment::OperationUnsupportedByGatewayError
29
29
 
30
30
  lambda { @plugin.get_payment_method_detail(@external_account_key, @payment_method) }.should raise_error Killbill::Plugin::Payment::OperationUnsupportedByGatewayError
31
- lambda { @plugin.get_payment_methods(@external_account_key) }.should raise_error Killbill::Plugin::Payment::OperationUnsupportedByGatewayError
31
+ lambda { @plugin.get_payment_methods(@external_account_key, true) }.should raise_error Killbill::Plugin::Payment::OperationUnsupportedByGatewayError
32
32
  lambda { @plugin.reset_payment_methods(@payment_methods) }.should raise_error Killbill::Plugin::Payment::OperationUnsupportedByGatewayError
33
33
  end
34
34
  end
@@ -11,7 +11,7 @@ module Killbill
11
11
  def get_name
12
12
  end
13
13
 
14
- def charge(kb_payment_id, kb_payment_method_id, amount_in_cents, options = {})
14
+ def process_payment(kb_payment_id, kb_payment_method_id, amount_in_cents, options = {})
15
15
  if @raise_exception
16
16
  raise StandardError.new("Test exception")
17
17
  else
@@ -27,7 +27,7 @@ module Killbill
27
27
  end
28
28
  end
29
29
 
30
- def refund(kb_payment_id, amount_in_cents, options = {})
30
+ def process_refund(kb_payment_id, amount_in_cents, options = {})
31
31
  if @raise_exception
32
32
  raise StandardError.new("Test exception")
33
33
  else
@@ -1,6 +1,8 @@
1
1
  require 'java'
2
2
 
3
3
  require 'bundler'
4
+ require 'logger'
5
+
4
6
  require 'killbill'
5
7
  # JRuby specific, not required by default
6
8
  require 'killbill/http_servlet'
metadata CHANGED
@@ -1,27 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: killbill
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.8
5
4
  prerelease:
5
+ version: 1.0.9
6
6
  platform: ruby
7
7
  authors:
8
8
  - Killbill core team
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-21 00:00:00.000000000 Z
12
+ date: 2013-03-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: jbundler
16
16
  version_requirements: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - ~>
18
+ - - "~>"
19
19
  - !ruby/object:Gem::Version
20
20
  version: 0.4.1
21
21
  none: false
22
22
  requirement: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.4.1
27
27
  none: false
@@ -31,13 +31,13 @@ dependencies:
31
31
  name: rack
32
32
  version_requirements: !ruby/object:Gem::Requirement
33
33
  requirements:
34
- - - ! '>='
34
+ - - ">="
35
35
  - !ruby/object:Gem::Version
36
36
  version: 1.5.2
37
37
  none: false
38
38
  requirement: !ruby/object:Gem::Requirement
39
39
  requirements:
40
- - - ! '>='
40
+ - - ">="
41
41
  - !ruby/object:Gem::Version
42
42
  version: 1.5.2
43
43
  none: false
@@ -47,13 +47,13 @@ dependencies:
47
47
  name: rake
48
48
  version_requirements: !ruby/object:Gem::Requirement
49
49
  requirements:
50
- - - ! '>='
50
+ - - ">="
51
51
  - !ruby/object:Gem::Version
52
52
  version: 0.8.7
53
53
  none: false
54
54
  requirement: !ruby/object:Gem::Requirement
55
55
  requirements:
56
- - - ! '>='
56
+ - - ">="
57
57
  - !ruby/object:Gem::Version
58
58
  version: 0.8.7
59
59
  none: false
@@ -63,13 +63,13 @@ dependencies:
63
63
  name: rspec
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: 2.12.0
69
69
  none: false
70
70
  requirement: !ruby/object:Gem::Requirement
71
71
  requirements:
72
- - - ~>
72
+ - - "~>"
73
73
  - !ruby/object:Gem::Version
74
74
  version: 2.12.0
75
75
  none: false
@@ -79,13 +79,13 @@ dependencies:
79
79
  name: sinatra
80
80
  version_requirements: !ruby/object:Gem::Requirement
81
81
  requirements:
82
- - - ~>
82
+ - - "~>"
83
83
  - !ruby/object:Gem::Version
84
84
  version: 1.3.4
85
85
  none: false
86
86
  requirement: !ruby/object:Gem::Requirement
87
87
  requirements:
88
- - - ~>
88
+ - - "~>"
89
89
  - !ruby/object:Gem::Version
90
90
  version: 1.3.4
91
91
  none: false
@@ -97,8 +97,8 @@ executables: []
97
97
  extensions: []
98
98
  extra_rdoc_files: []
99
99
  files:
100
- - .gitignore
101
- - .travis.yml
100
+ - ".gitignore"
101
+ - ".travis.yml"
102
102
  - Gemfile
103
103
  - Jarfile
104
104
  - README.md
@@ -144,25 +144,25 @@ licenses:
144
144
  - Apache License (2.0)
145
145
  post_install_message:
146
146
  rdoc_options:
147
- - --exclude
148
- - .
147
+ - "--exclude"
148
+ - "."
149
149
  require_paths:
150
150
  - lib
151
151
  required_ruby_version: !ruby/object:Gem::Requirement
152
152
  requirements:
153
- - - ! '>='
153
+ - - ">="
154
154
  - !ruby/object:Gem::Version
155
155
  version: 1.9.3
156
156
  none: false
157
157
  required_rubygems_version: !ruby/object:Gem::Requirement
158
158
  requirements:
159
- - - ! '>='
159
+ - - ">="
160
160
  - !ruby/object:Gem::Version
161
161
  segments:
162
162
  - 0
163
+ hash: 2
163
164
  version: !binary |-
164
165
  MA==
165
- hash: 2
166
166
  none: false
167
167
  requirements:
168
168
  - jar 'com.ning.billing:killbill-api'