zuora-ruby 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,10 @@
1
+ require_relative 'models/utils'
2
+
3
+ require_relative 'models/account'
4
+ require_relative 'models/card_holder'
5
+ require_relative 'models/contact'
6
+ require_relative 'models/payment_method'
7
+ require_relative 'models/rate_plan'
8
+ require_relative 'models/rate_plan_charge'
9
+ require_relative 'models/subscription'
10
+ require_relative 'models/tier'
@@ -0,0 +1,53 @@
1
+ # encoding: utf-8
2
+
3
+ module Zuora
4
+ module Models
5
+ class Account
6
+ include ActiveModel::Model
7
+ # See http://api.rubyonrails.org/classes/ActiveModel/Dirty.html
8
+
9
+ ATTRIBUTES = :account_number,
10
+ :auto_pay,
11
+ :bill_to_contact,
12
+ :bill_cycle_day,
13
+ :crm_id,
14
+ :currency,
15
+ :credit_card,
16
+ :name,
17
+ :hpm_credit_card_payment_method_id,
18
+ :notes,
19
+ :invoice_template_id,
20
+ :communication_profile_id,
21
+ :payment_gateway,
22
+ :payment_term,
23
+ :sold_to_contact,
24
+ :subscription
25
+
26
+ attr_accessor(*ATTRIBUTES)
27
+
28
+ def attributes
29
+ ATTRIBUTES
30
+ end
31
+
32
+ Zuora::Models::Utils.validate_children self,
33
+ 'contact',
34
+ :bill_to_contact,
35
+ :sold_to_contact
36
+
37
+ validates :auto_pay,
38
+ :bill_to_contact,
39
+ :credit_card,
40
+ :currency,
41
+ :name,
42
+ :payment_term,
43
+ :sold_to_contact,
44
+ presence: true
45
+
46
+ validates :currency,
47
+ length: { is: 3 }
48
+
49
+ validates :payment_term,
50
+ inclusion: { in: Zuora::PAYMENT_TERMS }
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,60 @@
1
+ # encoding: utf-8
2
+
3
+ module Zuora
4
+ module Models
5
+ class CardHolder
6
+ include ActiveModel::Model
7
+
8
+ ATTRIBUTES = :card_holder_name,
9
+ :address_line_1,
10
+ :address_line_2,
11
+ :city,
12
+ :state,
13
+ :zip_code,
14
+ :country,
15
+ :phone,
16
+ :email
17
+
18
+ attr_accessor(*ATTRIBUTES)
19
+
20
+ def attributes
21
+ ATTRIBUTES
22
+ end
23
+
24
+ validates :card_holder_name,
25
+ :address_line_1,
26
+ :city,
27
+ :state,
28
+ :zip_code,
29
+ :country,
30
+ presence: true
31
+
32
+ validates :card_holder_name,
33
+ length: { maximum: 50 }
34
+
35
+ validates :address_line_1,
36
+ length: { maximum: 255 }
37
+
38
+ validates :address_line_2,
39
+ length: { maximum: 255 },
40
+ allow_nil: true
41
+
42
+ validates :city,
43
+ length: { maximum: 40 }
44
+
45
+ validates :state,
46
+ inclusion: { in: Zuora::STATE_ABBREVIATIONS }
47
+
48
+ validates :zip_code,
49
+ length: { maximum: 20 }
50
+
51
+ validates :phone,
52
+ length: { maximum: 20 },
53
+ allow_nil: true
54
+
55
+ validates :email,
56
+ length: { maximum: 80 },
57
+ allow_nil: true
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,44 @@
1
+ # encoding: utf-8
2
+
3
+ module Zuora
4
+ module Models
5
+ class Contact
6
+ include ActiveModel::Model
7
+
8
+ ATTRIBUTES = :address_1,
9
+ :address_2,
10
+ :city,
11
+ :country,
12
+ :county,
13
+ :fax,
14
+ :first_name,
15
+ :home_phone,
16
+ :last_name,
17
+ :mobile_phone,
18
+ :nickname,
19
+ :other_phone,
20
+ :other_phone_type,
21
+ :personal_email,
22
+ :zip_code,
23
+ :state,
24
+ :tax_region,
25
+ :work_email,
26
+ :work_phone
27
+
28
+ attr_accessor(*ATTRIBUTES)
29
+
30
+ def attributes
31
+ ATTRIBUTES
32
+ end
33
+
34
+ validates :first_name,
35
+ :last_name,
36
+ :country,
37
+ presence: true
38
+
39
+ validates :first_name,
40
+ :last_name,
41
+ length: { maximum: 100 }
42
+ end
43
+ end
44
+ end
@@ -0,0 +1 @@
1
+ require_relative 'payment_methods/credit_card'
@@ -0,0 +1,37 @@
1
+ module Zuora
2
+ module Models
3
+ module PaymentMethods
4
+ class CreditCard
5
+ include ActiveModel::Model
6
+
7
+ ATTRIBUTES = :card_type,
8
+ :card_number,
9
+ :expiration_month,
10
+ :expiration_year,
11
+ :security_code
12
+
13
+ attr_accessor(*ATTRIBUTES)
14
+
15
+ def attributes
16
+ ATTRIBUTES
17
+ end
18
+
19
+ validates :card_type,
20
+ :card_number,
21
+ :expiration_month,
22
+ :expiration_year,
23
+ :security_code,
24
+ presence: true
25
+
26
+ validates :card_type,
27
+ inclusion: { in: Zuora::CREDIT_CARD_TYPES }
28
+
29
+ validates :expiration_month,
30
+ inclusion: { in: Zuora::MONTHS }
31
+
32
+ validates :expiration_year,
33
+ length: { is: 4 }
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+
3
+ module Zuora
4
+ module Models
5
+ class RatePlan
6
+ include ActiveModel::Model
7
+
8
+ ATTRIBUTES = :product_rate_plan_id,
9
+ :charge_overrides
10
+
11
+ attr_accessor(*ATTRIBUTES)
12
+
13
+ def attributes
14
+ ATTRIBUTES
15
+ end
16
+
17
+ validates :product_rate_plan_id,
18
+ presence: true
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,57 @@
1
+ # encoding: utf-8
2
+
3
+ module Zuora
4
+ module Models
5
+ class RatePlanCharge
6
+ include ActiveModel::Model
7
+
8
+ ATTRIBUTES = :product_rate_plan_charge_id,
9
+ :number,
10
+ :description,
11
+ :price,
12
+ :tiers,
13
+ :included_units,
14
+ :overage_price,
15
+ :list_price_base,
16
+ :quantity,
17
+ :discounted_amount,
18
+ :discount_percentage,
19
+ :apply_discount_to,
20
+ :discount_level,
21
+ :trigger_event,
22
+ :trigger_date,
23
+ :end_date_condition,
24
+ :up_to_periods_type,
25
+ :up_to_periods,
26
+ :specific_end_date,
27
+ :billing_period,
28
+ :specific_billing_period,
29
+ :billing_period_alignment,
30
+ :billing_timing,
31
+ :rating_group,
32
+ :bill_cycle_type,
33
+ :bill_cycle_day,
34
+ :number_of_periods,
35
+ :overage_unused_units_credit_option,
36
+ :unused_units_credit_rates,
37
+ :price_change_option,
38
+ :price_increase_percentage,
39
+ :weekly_bill_cycle_day
40
+
41
+ attr_accessor(*ATTRIBUTES)
42
+
43
+ def attributes
44
+ ATTRIBUTES
45
+ end
46
+
47
+ validates :product_rate_plan_charge_id,
48
+ presence: true
49
+
50
+ validates :number,
51
+ length: { maximum: 50 }
52
+
53
+ validates :description,
54
+ length: { maximum: 500 }
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,50 @@
1
+ # encoding: utf-8
2
+
3
+ module Zuora
4
+ module Models
5
+ class Subscription
6
+ include ActiveModel::Model
7
+
8
+ ATTRIBUTES = :account_key,
9
+ :invoice_owner_account_key,
10
+ :term_type,
11
+ :contract_effective_date,
12
+ :service_activation_date,
13
+ :customer_acceptance_date,
14
+ :term_start_date,
15
+ :initial_term,
16
+ :initial_term_period_type,
17
+ :auto_renew,
18
+ :renewal_term,
19
+ :renewal_term_period_type,
20
+ :renewal_setting,
21
+ :notes,
22
+ :invoice_collect,
23
+ :invoice,
24
+ :collect,
25
+ :invoice_separately,
26
+ :apply_credit_balance,
27
+ :invoice_target_date,
28
+ :subscribe_to_rate_plans
29
+
30
+ attr_accessor(*ATTRIBUTES)
31
+
32
+ def attributes
33
+ ATTRIBUTES
34
+ end
35
+
36
+ validates :account_key,
37
+ :term_type,
38
+ :contract_effective_date,
39
+ :subscribe_to_rate_plans,
40
+ presence: true
41
+
42
+ validates :term_type,
43
+ inclusion: { in: Zuora::SUBSCRIPTION_TERM_TYPES }
44
+
45
+ validates :initial_term,
46
+ presence: true,
47
+ if: proc { |sub| sub.term_type == 'EVERGREEN' }
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,27 @@
1
+ module Zuora
2
+ module Models
3
+ class RatePlanChargeTier
4
+ include ActiveModel::Model
5
+
6
+ ATTRIBUTES = :tier,
7
+ :starting_unit,
8
+ :ending_unit,
9
+ :price,
10
+ :price_format
11
+
12
+ attr_accessor(*ATTRIBUTES)
13
+
14
+ def attributes
15
+ ATTRIBUTES
16
+ end
17
+
18
+ validates :tier,
19
+ :price,
20
+ presence: true
21
+
22
+ validates :price_format,
23
+ inclusion: { in: %w(FlatFee PerUnit) },
24
+ allow_nil: true
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,23 @@
1
+ module Zuora
2
+ module Models
3
+ module Utils
4
+ # Calls `validate_each` on for each provided attribute.
5
+ # Attaches error generated via message fragment.
6
+ # e.g. 'invalid widget'
7
+ #
8
+ # @param [Object] sender;
9
+ # @param [String] message
10
+ # @param [Array<Symbol>] fields
11
+ # @return [Nil]
12
+ def self.validate_children(sender, message, *fields)
13
+ sender.validates_each fields do |record, attr, value|
14
+ if !value.respond_to?(:valid?) || !value.respond_to?(:errors)
15
+ record.errors.add attr, "invalid #{message}"
16
+ elsif value.invalid?
17
+ record.errors.add attr, value.errors.join(',')
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,17 @@
1
+ module Zuora
2
+ module Resources
3
+ InvalidModel = Class.new(StandardError)
4
+
5
+ def self.with_valid(model, &block)
6
+ if model.valid?
7
+ block.call model
8
+ else
9
+ fail InvalidModel, model
10
+ end
11
+ end
12
+ end
13
+ end
14
+
15
+ require_relative 'resources/accounts'
16
+ require_relative 'resources/payment_methods'
17
+ require_relative 'resources/subscriptions'
@@ -0,0 +1,19 @@
1
+ module Zuora
2
+ module Resources
3
+ module Accounts
4
+ RESOURCE_URI = '/rest/v1/accounts'
5
+
6
+ def self.create!(client, model, serializer = Zuora::Serializers::Noop)
7
+ Zuora::Resources.with_valid model do |mod|
8
+ client.post RESOURCE_URI, serializer.serialize(mod)
9
+ end
10
+ end
11
+
12
+ def self.update!(client, model, serializer = Zuora::Serializers::Noop)
13
+ Zuora::Resources.with_valid model do |mod|
14
+ client.post RESOURCE_URI, serializer.serialize(mod)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1 @@
1
+ require_relative 'payment_methods/credit_card'
@@ -0,0 +1,26 @@
1
+ # encoding: utf-8
2
+ module Zuora
3
+ module Resources
4
+ module PaymentMethods
5
+ module CreditCards
6
+ RESOURCE_URI = '/rest/v1/credit_card/payment_account'
7
+
8
+ # Validates a model, and throws if invalid.
9
+ # Otherwise, makes an HTTP request, creating a credit card
10
+ # payment account.
11
+
12
+ # https://api.zuora.com/rest/v1/payment-methods/credit-cards
13
+
14
+ # @param [Zuora::Client] client
15
+ # @param [Zuora::Model::PaymentMethod] model: the credit card
16
+ # @param [Class] serializer: any object supporting .serialze(data)
17
+ # @return [Faraday::Response]
18
+ def self.create!(client, model, serializer = Zuora::Serializers::Noop)
19
+ Zuora::Resources.with_valid model do |mod|
20
+ client.post RESOURCE_URI, serializer.serialize(mod)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end