active_zuora 1.3.0 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +22 -1
- data/Rakefile +0 -9
- data/VERSION +1 -1
- data/active_zuora.gemspec +43 -13
- data/lib/active_zuora.rb +5 -10
- data/lib/active_zuora/account.rb +27 -0
- data/lib/active_zuora/amendment.rb +7 -0
- data/lib/active_zuora/bill_run.rb +4 -0
- data/lib/active_zuora/contact.rb +7 -0
- data/lib/active_zuora/invoice.rb +46 -0
- data/lib/active_zuora/invoice_item.rb +26 -0
- data/lib/active_zuora/invoice_item_adjustment.rb +4 -0
- data/lib/active_zuora/invoice_payment.rb +11 -0
- data/lib/active_zuora/payment.rb +18 -0
- data/lib/active_zuora/payment_method.rb +10 -0
- data/lib/active_zuora/product.rb +4 -0
- data/lib/active_zuora/product_rate_plan.rb +9 -0
- data/lib/active_zuora/product_rate_plan_charge.rb +11 -0
- data/lib/active_zuora/product_rate_plan_charge_tier.rb +7 -0
- data/lib/active_zuora/product_rate_plan_charge_tier_data.rb +4 -0
- data/lib/active_zuora/rate_plan.rb +16 -0
- data/lib/active_zuora/rate_plan_charge.rb +44 -0
- data/lib/active_zuora/rate_plan_charge_data.rb +4 -0
- data/lib/active_zuora/rate_plan_charge_tier.rb +4 -0
- data/lib/{zuora → active_zuora}/rate_plan_data.rb +0 -0
- data/lib/active_zuora/refund.rb +4 -0
- data/lib/{zuora → active_zuora}/subscribe_options.rb +0 -0
- data/lib/active_zuora/subscribe_request.rb +13 -0
- data/lib/{zuora → active_zuora}/subscribe_with_existing_account_request.rb +0 -0
- data/lib/active_zuora/subscription.rb +17 -0
- data/lib/{zuora → active_zuora}/subscription_data.rb +0 -0
- data/lib/active_zuora/usage.rb +4 -0
- data/lib/active_zuora/zobject.rb +156 -0
- data/lib/zuora/ZUORA.rb +180 -27
- data/lib/zuora/ZUORADriver.rb +17 -0
- data/lib/zuora/ZUORAMappingRegistry.rb +236 -23
- data/lib/zuora_client.rb +28 -24
- data/lib/zuora_interface.rb +21 -5
- metadata +112 -17
- data/lib/zuora/account.rb +0 -4
- data/lib/zuora/contact.rb +0 -4
- data/lib/zuora/rate_plan.rb +0 -4
- data/lib/zuora/subscribe_request.rb +0 -4
- data/lib/zuora/subscription.rb +0 -4
- data/lib/zuora/zobject.rb +0 -52
data/README.rdoc
CHANGED
@@ -1,4 +1,8 @@
|
|
1
|
-
==
|
1
|
+
== Active Zuora Version 2
|
2
|
+
* This fork has been moved from its {original location}[https://github.com/anfleene/active_zuora] to its {current location}[https://github.com/tstmedia/active_zuora_v1]
|
3
|
+
* The Active Zuora Version 2 gem can be found at https://github.com/tstmedia/active_zuora.
|
4
|
+
|
5
|
+
== Active Zoura Version 1
|
2
6
|
|
3
7
|
Client for Zuora API
|
4
8
|
|
@@ -9,7 +13,24 @@ The fork is adding a new interface to the gem along with removing parts deemed u
|
|
9
13
|
The underlying implementation of the zuora4r gem is still in place but that is going to change in the future.
|
10
14
|
|
11
15
|
|
16
|
+
|
12
17
|
== Installing the Gem
|
13
18
|
$ sudo gem sources -a http://gemcutter.org
|
14
19
|
$ sudo gem install active_zuora
|
15
20
|
|
21
|
+
== Future Releases
|
22
|
+
|
23
|
+
In the short term this gem will hold on to most of the existing zuora api code with more active recordy style additions to its interface
|
24
|
+
In the long term the underlying implementation will be refactored and condensed into something smaller and more idiomatic
|
25
|
+
|
26
|
+
=== Important Missing Features
|
27
|
+
|
28
|
+
Completion of active zuora's CRUD actions on instance methods
|
29
|
+
Support for Zuora's queryMore api call
|
30
|
+
|
31
|
+
Remove weird error handling Anti Pattern that rescues and prints all Exceptions
|
32
|
+
|
33
|
+
BUG:
|
34
|
+
Auto quote where calls
|
35
|
+
|
36
|
+
|
data/Rakefile
CHANGED
@@ -45,12 +45,3 @@ task :test => :check_dependencies
|
|
45
45
|
|
46
46
|
task :default => :test
|
47
47
|
|
48
|
-
require 'rake/rdoctask'
|
49
|
-
Rake::RDocTask.new do |rdoc|
|
50
|
-
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
51
|
-
|
52
|
-
rdoc.rdoc_dir = 'rdoc'
|
53
|
-
rdoc.title = "active_zuora #{version}"
|
54
|
-
rdoc.rdoc_files.include('README*')
|
55
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
56
|
-
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.4.0
|
data/active_zuora.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "active_zuora"
|
8
|
-
s.version = "1.
|
8
|
+
s.version = "1.4.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["anfleene"]
|
12
|
-
s.date = "
|
12
|
+
s.date = "2013-02-18"
|
13
13
|
s.description = "A client for Zuora API"
|
14
14
|
s.email = "anfleene@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -22,41 +22,71 @@ Gem::Specification.new do |s|
|
|
22
22
|
"active_zuora.gemspec",
|
23
23
|
"custom_fields.yml",
|
24
24
|
"lib/active_zuora.rb",
|
25
|
+
"lib/active_zuora/account.rb",
|
26
|
+
"lib/active_zuora/amendment.rb",
|
27
|
+
"lib/active_zuora/bill_run.rb",
|
28
|
+
"lib/active_zuora/contact.rb",
|
29
|
+
"lib/active_zuora/invoice.rb",
|
30
|
+
"lib/active_zuora/invoice_item.rb",
|
31
|
+
"lib/active_zuora/invoice_item_adjustment.rb",
|
32
|
+
"lib/active_zuora/invoice_payment.rb",
|
33
|
+
"lib/active_zuora/payment.rb",
|
34
|
+
"lib/active_zuora/payment_method.rb",
|
35
|
+
"lib/active_zuora/product.rb",
|
36
|
+
"lib/active_zuora/product_rate_plan.rb",
|
37
|
+
"lib/active_zuora/product_rate_plan_charge.rb",
|
38
|
+
"lib/active_zuora/product_rate_plan_charge_tier.rb",
|
39
|
+
"lib/active_zuora/product_rate_plan_charge_tier_data.rb",
|
40
|
+
"lib/active_zuora/rate_plan.rb",
|
41
|
+
"lib/active_zuora/rate_plan_charge.rb",
|
42
|
+
"lib/active_zuora/rate_plan_charge_data.rb",
|
43
|
+
"lib/active_zuora/rate_plan_charge_tier.rb",
|
44
|
+
"lib/active_zuora/rate_plan_data.rb",
|
45
|
+
"lib/active_zuora/refund.rb",
|
46
|
+
"lib/active_zuora/subscribe_options.rb",
|
47
|
+
"lib/active_zuora/subscribe_request.rb",
|
48
|
+
"lib/active_zuora/subscribe_with_existing_account_request.rb",
|
49
|
+
"lib/active_zuora/subscription.rb",
|
50
|
+
"lib/active_zuora/subscription_data.rb",
|
51
|
+
"lib/active_zuora/usage.rb",
|
52
|
+
"lib/active_zuora/zobject.rb",
|
25
53
|
"lib/zuora/ZUORA.rb",
|
26
54
|
"lib/zuora/ZUORADriver.rb",
|
27
55
|
"lib/zuora/ZUORAMappingRegistry.rb",
|
28
56
|
"lib/zuora/ZuoraServiceClient.rb",
|
29
|
-
"lib/zuora/account.rb",
|
30
57
|
"lib/zuora/api.rb",
|
31
|
-
"lib/zuora/contact.rb",
|
32
|
-
"lib/zuora/rate_plan.rb",
|
33
|
-
"lib/zuora/rate_plan_data.rb",
|
34
|
-
"lib/zuora/subscribe_options.rb",
|
35
|
-
"lib/zuora/subscribe_request.rb",
|
36
|
-
"lib/zuora/subscribe_with_existing_account_request.rb",
|
37
|
-
"lib/zuora/subscription.rb",
|
38
|
-
"lib/zuora/subscription_data.rb",
|
39
|
-
"lib/zuora/zobject.rb",
|
40
58
|
"lib/zuora_client.rb",
|
41
59
|
"lib/zuora_interface.rb"
|
42
60
|
]
|
43
61
|
s.homepage = "http://github.com/anfleene/active_zuora"
|
44
62
|
s.require_paths = ["lib"]
|
45
63
|
s.requirements = ["none"]
|
46
|
-
s.rubygems_version = "1.8.
|
64
|
+
s.rubygems_version = "1.8.24"
|
47
65
|
s.summary = "Active Zuora"
|
48
66
|
|
49
67
|
if s.respond_to? :specification_version then
|
50
68
|
s.specification_version = 3
|
51
69
|
|
52
70
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
71
|
+
s.add_runtime_dependency(%q<soap4r>, ["~> 1.5"])
|
72
|
+
s.add_runtime_dependency(%q<json_pure>, ["~> 1.4"])
|
73
|
+
s.add_development_dependency(%q<rake>, [">= 0"])
|
74
|
+
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
53
75
|
s.add_runtime_dependency(%q<soap4r>, [">= 1.5.8"])
|
54
76
|
s.add_runtime_dependency(%q<json_pure>, [">= 1.4.6"])
|
55
77
|
else
|
78
|
+
s.add_dependency(%q<soap4r>, ["~> 1.5"])
|
79
|
+
s.add_dependency(%q<json_pure>, ["~> 1.4"])
|
80
|
+
s.add_dependency(%q<rake>, [">= 0"])
|
81
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
56
82
|
s.add_dependency(%q<soap4r>, [">= 1.5.8"])
|
57
83
|
s.add_dependency(%q<json_pure>, [">= 1.4.6"])
|
58
84
|
end
|
59
85
|
else
|
86
|
+
s.add_dependency(%q<soap4r>, ["~> 1.5"])
|
87
|
+
s.add_dependency(%q<json_pure>, ["~> 1.4"])
|
88
|
+
s.add_dependency(%q<rake>, [">= 0"])
|
89
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
60
90
|
s.add_dependency(%q<soap4r>, [">= 1.5.8"])
|
61
91
|
s.add_dependency(%q<json_pure>, [">= 1.4.6"])
|
62
92
|
end
|
data/lib/active_zuora.rb
CHANGED
@@ -1,13 +1,8 @@
|
|
1
1
|
require 'delegate'
|
2
2
|
require 'zuora_client'
|
3
|
-
require '
|
4
|
-
|
5
|
-
require
|
6
|
-
|
7
|
-
|
8
|
-
require 'zuora/subscribe_options'
|
9
|
-
require 'zuora/subscribe_request'
|
10
|
-
require 'zuora/subscribe_with_existing_account_request'
|
11
|
-
require 'zuora/subscription'
|
12
|
-
require 'zuora/subscription_data'
|
3
|
+
require 'active_zuora/zobject.rb'
|
4
|
+
Dir[File.join(File.dirname(__FILE__),"active_zuora","*.rb")].each do |file|
|
5
|
+
require file
|
6
|
+
end
|
7
|
+
|
13
8
|
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Zuora
|
2
|
+
class Account < ZObject
|
3
|
+
def billTo
|
4
|
+
@billTo ||= Contact.find(self.billToId)
|
5
|
+
end
|
6
|
+
|
7
|
+
def soldTo
|
8
|
+
@soldTo ||= Contact.find(self.soldToId)
|
9
|
+
end
|
10
|
+
|
11
|
+
def subscriptions
|
12
|
+
@subscriptions ||= Subscription.where(:accountid => self.id)
|
13
|
+
end
|
14
|
+
|
15
|
+
def invoices
|
16
|
+
@invoices ||= Invoice.where(:accountid => self.id)
|
17
|
+
end
|
18
|
+
|
19
|
+
def payment_methods
|
20
|
+
@payment_methods ||= PaymentMethod.where(:accountid => self.id)
|
21
|
+
end
|
22
|
+
|
23
|
+
def contacts
|
24
|
+
@contacts ||= Contact.where(:accountid => self.id)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Zuora
|
2
|
+
class Invoice < ZObject
|
3
|
+
def self.extra_attributes(attributes=[])
|
4
|
+
super([:body])
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.create(attributes={})
|
8
|
+
self.client.generate([self.new(attributes).to_zobject]).first
|
9
|
+
end
|
10
|
+
|
11
|
+
def save
|
12
|
+
result = self.class.create(self.attributes)
|
13
|
+
if result[:success]
|
14
|
+
@errors = []
|
15
|
+
__setobj__(self.class.find(result[:id]).to_zobject)
|
16
|
+
else
|
17
|
+
@errors = result[:errors]
|
18
|
+
end
|
19
|
+
result[:success]
|
20
|
+
end
|
21
|
+
|
22
|
+
def errors
|
23
|
+
@errors || []
|
24
|
+
end
|
25
|
+
|
26
|
+
def post
|
27
|
+
return false unless self.id
|
28
|
+
result = self.class.update_attributes(:id => self.id, :status => "Posted").first
|
29
|
+
@errors = result[:errors]
|
30
|
+
result[:success]
|
31
|
+
end
|
32
|
+
|
33
|
+
def invoice_items
|
34
|
+
@invoice_items ||= InvoiceItem.where(:invoiceid => self.id)
|
35
|
+
end
|
36
|
+
|
37
|
+
def account
|
38
|
+
@account ||= Account.find(self.accountId)
|
39
|
+
end
|
40
|
+
|
41
|
+
def payments
|
42
|
+
# Payments, sorted by date.
|
43
|
+
@payments ||= InvoicePayment.where(:invoiceId => self.id).map(&:payment).sort { |a, b| a.effectiveDate <=> b.effectiveDate }
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Zuora
|
2
|
+
class InvoiceItem < ZObject
|
3
|
+
|
4
|
+
def invoice
|
5
|
+
@invoice ||= Invoice.find(invoiceId)
|
6
|
+
end
|
7
|
+
|
8
|
+
def rate_plan_charge
|
9
|
+
@rate_plan_charge ||= RatePlanCharge.find(ratePlanChargeId)
|
10
|
+
end
|
11
|
+
|
12
|
+
def adjustments
|
13
|
+
@adjustments ||= InvoiceItemAdjustment.where(:sourceType => 'InvoiceDetail', :sourceId => id)
|
14
|
+
end
|
15
|
+
|
16
|
+
def adjusted_charge_amount
|
17
|
+
@adjusted_charge_amount ||=
|
18
|
+
adjustments.inject(chargeAmount) do |amount, adjustment|
|
19
|
+
# Adjustment types are either Credit or Charge
|
20
|
+
# Credits will have a reducing (subtracting) effect on the invoice item charge.
|
21
|
+
adjustment.type == "Credit" ? amount - adjustment.amount : amount + adjustment.amount
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Zuora
|
2
|
+
class Payment < ZObject
|
3
|
+
|
4
|
+
exclude_query_attributes :appliedInvoiceAmount, :invoiceId
|
5
|
+
|
6
|
+
def account
|
7
|
+
@account ||= Account.find(self.accountId)
|
8
|
+
end
|
9
|
+
|
10
|
+
def payment_method
|
11
|
+
@payment_method ||= PaymentMethod.find(self.paymentMethodId)
|
12
|
+
end
|
13
|
+
|
14
|
+
def invoices
|
15
|
+
@invoices ||= InvoicePayment.where(:paymentId => self.id).map(&:invoice)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Zuora
|
2
|
+
class ProductRatePlanCharge < ZObject
|
3
|
+
def product_rate_plan
|
4
|
+
@product_rate_plan ||= ProductRatePlan.find(self.ProductRatePlanId)
|
5
|
+
end
|
6
|
+
|
7
|
+
def product_rate_plan_charge_tiers
|
8
|
+
@product_rate_plan_charge_tiers ||= ProductRatePlanChargeTier.where(:productRatePlanChargeId => self.id)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Zuora
|
2
|
+
class RatePlan < ZObject
|
3
|
+
def rate_plan_charges
|
4
|
+
@rate_plan_charges ||= RatePlanCharge.where(:ratePlanId => self.id)
|
5
|
+
end
|
6
|
+
|
7
|
+
def subscription
|
8
|
+
@subscription ||= Subscription.find(self.subscriptionId)
|
9
|
+
end
|
10
|
+
|
11
|
+
def product_rate_plan
|
12
|
+
@product_rate_plan ||= ProductRatePlan.find(self.productRatePlanId)
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Zuora
|
2
|
+
class RatePlanCharge < ZObject
|
3
|
+
|
4
|
+
exclude_query_attributes :overagePrice, :includedUnits, :discountAmount, :discountPercentage
|
5
|
+
|
6
|
+
def rate_plan
|
7
|
+
@rate_plan ||= RatePlan.find(self.ratePlanId)
|
8
|
+
end
|
9
|
+
|
10
|
+
def product_rate_plan_charge
|
11
|
+
@product_rate_plan_charge ||= ProductRatePlanCharge.find(self.productRatePlanChargeId)
|
12
|
+
end
|
13
|
+
|
14
|
+
def usages
|
15
|
+
@usages ||= Usage.where(:chargeId => id)
|
16
|
+
end
|
17
|
+
|
18
|
+
def unload_usages
|
19
|
+
@usages = nil
|
20
|
+
self
|
21
|
+
end
|
22
|
+
|
23
|
+
def total_price
|
24
|
+
(quantity || 1) * price
|
25
|
+
end
|
26
|
+
|
27
|
+
def list_price
|
28
|
+
product_rate_plan_charge.product_rate_plan_charge_tiers.first.price
|
29
|
+
end
|
30
|
+
|
31
|
+
def total_list_price
|
32
|
+
(quantity || 1) * list_price
|
33
|
+
end
|
34
|
+
|
35
|
+
def discount?
|
36
|
+
price < list_price
|
37
|
+
end
|
38
|
+
|
39
|
+
def discount_percent
|
40
|
+
list_price.zero? ? nil : (1 - price / list_price) * 100
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|