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.
- data/killbill_client.gemspec +2 -0
- data/lib/killbill_client.rb +26 -0
- data/lib/killbill_client/models/payment.rb +14 -0
- data/lib/killbill_client/models/refund.rb +7 -9
- data/lib/killbill_client/models/resource.rb +11 -1
- data/lib/killbill_client/version.rb +1 -1
- data/spec/killbill_client/remote/model_spec.rb +35 -1
- metadata +19 -3
data/killbill_client.gemspec
CHANGED
data/lib/killbill_client.rb
CHANGED
@@ -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
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
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
|
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
|
@@ -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.
|
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-
|
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: -
|
165
|
+
hash: -442212084689921420
|
150
166
|
requirements: []
|
151
167
|
rubyforge_project:
|
152
168
|
rubygems_version: 1.8.25
|