killbill-client 0.4.2 → 0.4.3

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.
@@ -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