killbill-client 0.4.2 → 0.4.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -39,6 +39,8 @@ Gem::Specification.new do |s|
39
39
 
40
40
  s.rdoc_options << '--exclude' << '.'
41
41
 
42
+ s.add_dependency 'json', '~> 1.8.0'
43
+
42
44
  s.add_development_dependency 'rake', '>= 10.0.0'
43
45
  s.add_development_dependency 'rspec', '~> 2.12.0'
44
46
  end
@@ -95,4 +95,30 @@ module KillBillClient
95
95
  require 'killbill_client/version'
96
96
  end
97
97
 
98
+ begin
99
+ require 'securerandom'
100
+ SecureRandom.uuid
101
+ rescue LoadError, NoMethodError
102
+ begin
103
+ # See http://jira.codehaus.org/browse/JRUBY-6176
104
+ module SecureRandom
105
+ def self.uuid
106
+ ary = self.random_bytes(16).unpack("NnnnnN")
107
+ ary[2] = (ary[2] & 0x0fff) | 0x4000
108
+ ary[3] = (ary[3] & 0x3fff) | 0x8000
109
+ "%08x-%04x-%04x-%04x-%04x%08x" % ary
110
+ end unless respond_to?(:uuid)
111
+ end
112
+ rescue TypeError
113
+ class SecureRandom
114
+ def self.uuid
115
+ ary = self.random_bytes(16).unpack("NnnnnN")
116
+ ary[2] = (ary[2] & 0x0fff) | 0x4000
117
+ ary[3] = (ary[3] & 0x3fff) | 0x8000
118
+ "%08x-%04x-%04x-%04x-%04x%08x" % ary
119
+ end unless respond_to?(:uuid)
120
+ end
121
+ end
122
+ end
123
+
98
124
  require 'rails/killbill_client' if defined? Rails::Railtie
@@ -8,6 +8,20 @@ module KillBillClient
8
8
  has_many :audit_logs, KillBillClient::Model::AuditLog
9
9
 
10
10
  create_alias :bundle_keys, :external_bundle_keys
11
+
12
+ def create(external_payment = false, user = nil, reason = nil, comment = nil, options = {})
13
+ # Nothing to return (nil)
14
+ self.class.post "#{Invoice::KILLBILL_API_INVOICES_PREFIX}/payments",
15
+ to_json,
16
+ {
17
+ :externalPayment => external_payment
18
+ },
19
+ {
20
+ :user => user,
21
+ :reason => reason,
22
+ :comment => comment,
23
+ }.merge(options)
24
+ end
11
25
  end
12
26
  end
13
27
  end
@@ -7,7 +7,6 @@ module KillBillClient
7
7
  has_many :adjustments, KillBillClient::Model::InvoiceItem
8
8
 
9
9
  class << self
10
-
11
10
  def find_by_id refund_id, options = {}
12
11
  get "#{KILLBILL_API_REFUNDS_PREFIX}/#{refund_id}",
13
12
  {},
@@ -24,17 +23,16 @@ module KillBillClient
24
23
 
25
24
  def create(user = nil, reason = nil, comment = nil, options = {})
26
25
  created_refund = self.class.post "#{Payment::KILLBILL_API_PAYMENTS_PREFIX}/#{@payment_id}/refunds",
27
- to_json,
28
- {},
29
- {
30
- :user => user,
31
- :reason => reason,
32
- :comment => comment,
33
- }.merge(options)
26
+ to_json,
27
+ {},
28
+ {
29
+ :user => user,
30
+ :reason => reason,
31
+ :comment => comment,
32
+ }.merge(options)
34
33
 
35
34
  created_refund.refresh(options)
36
35
  end
37
-
38
36
  end
39
37
  end
40
38
  end
@@ -177,12 +177,22 @@ module KillBillClient
177
177
  self.class.json_attributes.each do |name|
178
178
  value = self.send(name)
179
179
  unless value.nil?
180
- json_hash[Utils.camelize name, :lower] = value.is_a?(Resource) ? value.to_hash : value
180
+ json_hash[Utils.camelize name, :lower] = _to_hash(value)
181
181
  end
182
182
  end
183
183
  json_hash
184
184
  end
185
185
 
186
+ def _to_hash(value)
187
+ if value.is_a?(Resource)
188
+ value.to_hash
189
+ elsif value.is_a?(Array)
190
+ value.map { |v| _to_hash(v) }
191
+ else
192
+ value
193
+ end
194
+ end
195
+
186
196
  def to_json
187
197
  to_hash.to_json
188
198
  end
@@ -2,7 +2,7 @@ module KillBillClient
2
2
  module Version
3
3
  MAJOR = 0
4
4
  MINOR = 4
5
- PATCH = 2
5
+ PATCH = 3
6
6
  PRE = nil
7
7
 
8
8
  VERSION = [MAJOR, MINOR, PATCH, PRE].compact.join('.').freeze
@@ -88,7 +88,7 @@ describe KillBillClient::Model do
88
88
 
89
89
  timeline.account.external_key.should == external_key
90
90
  timeline.account.account_id.should_not be_nil
91
-
91
+
92
92
  timeline.invoices.should be_a_kind_of Array
93
93
  timeline.invoices.should_not be_empty
94
94
  timeline.payments.should be_a_kind_of Array
@@ -104,6 +104,40 @@ describe KillBillClient::Model do
104
104
 
105
105
  invoice_with_id.invoice_id.should == invoice_with_number.invoice_id
106
106
  invoice_with_id.invoice_number.should == invoice_with_number.invoice_number
107
+
108
+ # Create an external payment
109
+ payment = KillBillClient::Model::Payment.new
110
+ payment.account_id = account.account_id
111
+ payment.create true, 'KillBill Spec test'
112
+
113
+ # Check the account balance
114
+ account = KillBillClient::Model::Account.find_by_id account.account_id, true
115
+ account.account_balance.should == 0
116
+
117
+ # Verify the timeline
118
+ timeline = KillBillClient::Model::AccountTimeline.find_by_account_id account.account_id
119
+ timeline.payments.should_not be_empty
120
+ payment = timeline.payments.first
121
+ payment.refunds.should be_empty
122
+
123
+ # Refund the payment (with item adjustment)
124
+ invoice_item = KillBillClient::Model::Invoice.find_by_id_or_number(invoice_number, true).items.first
125
+ refund = KillBillClient::Model::Refund.new
126
+ refund.payment_id = payment.payment_id
127
+ refund.amount = payment.amount
128
+ refund.adjusted = true
129
+ item = KillBillClient::Model::InvoiceItem.new
130
+ item.invoice_item_id = invoice_item.invoice_item_id
131
+ item.amount = invoice_item.amount
132
+ refund.adjustments = [item]
133
+ refund.create 'KillBill Spec test'
134
+
135
+ # Verify the refund
136
+ timeline = KillBillClient::Model::AccountTimeline.find_by_account_id account.account_id
137
+ timeline.payments.should_not be_empty
138
+ payment = timeline.payments.first
139
+ payment.refunds.should_not be_empty
140
+ payment.refunds.first.amount.should == invoice_item.amount
107
141
  end
108
142
 
109
143
  it 'should manipulate tag definitions' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: killbill-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.4.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,8 +9,24 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-09-19 00:00:00.000000000 Z
12
+ date: 2013-09-23 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: json
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 1.8.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 1.8.0
14
30
  - !ruby/object:Gem::Dependency
15
31
  name: rake
16
32
  requirement: !ruby/object:Gem::Requirement
@@ -146,7 +162,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
146
162
  version: '0'
147
163
  segments:
148
164
  - 0
149
- hash: -553160826528474314
165
+ hash: -442212084689921420
150
166
  requirements: []
151
167
  rubyforge_project:
152
168
  rubygems_version: 1.8.25