recurly 2.18.24 → 3.0.0.beta.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +14 -0
- data/.rspec +2 -0
- data/.travis.yml +5 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +158 -110
- data/Rakefile +6 -0
- data/bin/bundle +105 -0
- data/bin/coderay +29 -0
- data/bin/console +14 -0
- data/bin/htmldiff +29 -0
- data/bin/ldiff +29 -0
- data/bin/pry +29 -0
- data/bin/rake +29 -0
- data/bin/rspec +29 -0
- data/bin/setup +8 -0
- data/bin/yard +29 -0
- data/bin/yardoc +29 -0
- data/bin/yri +29 -0
- data/lib/data/ca-certificates.crt +31 -0
- data/lib/recurly/client/operations.rb +935 -0
- data/lib/recurly/client.rb +198 -0
- data/lib/recurly/errors/api_errors.rb +35 -0
- data/lib/recurly/errors/network_errors.rb +8 -0
- data/lib/recurly/errors.rb +34 -0
- data/lib/recurly/pager.rb +119 -0
- data/lib/recurly/request.rb +30 -0
- data/lib/recurly/requests/account_acquisition_updatable.rb +22 -0
- data/lib/recurly/requests/account_create_only.rb +18 -0
- data/lib/recurly/requests/account_updatable.rb +50 -0
- data/lib/recurly/requests/add_on_create.rb +38 -0
- data/lib/recurly/requests/add_on_update.rb +38 -0
- data/lib/recurly/requests/address.rb +42 -0
- data/lib/recurly/requests/billing_info_create.rb +58 -0
- data/lib/recurly/requests/coupon_create_only.rb +66 -0
- data/lib/recurly/requests/coupon_updatable.rb +30 -0
- data/lib/recurly/requests/create_account.rb +62 -0
- data/lib/recurly/requests/create_coupon.rb +90 -0
- data/lib/recurly/requests/invoice_create.rb +42 -0
- data/lib/recurly/requests/invoice_refund.rb +30 -0
- data/lib/recurly/requests/line_item_create.rb +46 -0
- data/lib/recurly/requests/plan_create.rb +66 -0
- data/lib/recurly/requests/plan_update.rb +70 -0
- data/lib/recurly/requests/shipping_address_create.rb +58 -0
- data/lib/recurly/requests/shipping_address_update.rb +62 -0
- data/lib/recurly/requests/subscription_add_on_create.rb +22 -0
- data/lib/recurly/requests/subscription_change_create.rb +42 -0
- data/lib/recurly/requests/subscription_create.rb +86 -0
- data/lib/recurly/requests/subscription_update.rb +42 -0
- data/lib/recurly/requests/update_coupon.rb +30 -0
- data/lib/recurly/resource.rb +16 -1112
- data/lib/recurly/resources/account.rb +86 -0
- data/lib/recurly/resources/account_acquisition.rb +42 -0
- data/lib/recurly/resources/account_balance.rb +22 -0
- data/lib/recurly/resources/account_note.rb +30 -0
- data/lib/recurly/resources/add_on.rb +62 -0
- data/lib/recurly/resources/address.rb +42 -0
- data/lib/recurly/resources/billing_info.rb +62 -0
- data/lib/recurly/resources/coupon.rb +110 -0
- data/lib/recurly/resources/coupon_discount.rb +22 -0
- data/lib/recurly/resources/coupon_redemption.rb +46 -0
- data/lib/recurly/resources/credit_payment.rb +62 -0
- data/lib/recurly/resources/error.rb +18 -0
- data/lib/recurly/resources/error_may_have_transaction.rb +22 -0
- data/lib/recurly/resources/invoice.rb +138 -0
- data/lib/recurly/resources/invoice_collection.rb +18 -0
- data/lib/recurly/resources/line_item.rb +166 -0
- data/lib/recurly/resources/plan.rb +86 -0
- data/lib/recurly/resources/settings.rb +18 -0
- data/lib/recurly/resources/shipping_address.rb +74 -0
- data/lib/recurly/resources/site.rb +46 -0
- data/lib/recurly/resources/subscription.rb +134 -0
- data/lib/recurly/resources/subscription_add_on.rb +42 -0
- data/lib/recurly/resources/subscription_change.rb +54 -0
- data/lib/recurly/resources/tax_info.rb +18 -0
- data/lib/recurly/resources/transaction.rb +146 -0
- data/lib/recurly/resources/unique_coupon_code.rb +38 -0
- data/lib/recurly/resources/user.rb +38 -0
- data/lib/recurly/schema/json_deserializer.rb +53 -0
- data/lib/recurly/schema/json_parser.rb +71 -0
- data/lib/recurly/schema/request_caster.rb +66 -0
- data/lib/recurly/schema/schema_factory.rb +50 -0
- data/lib/recurly/schema/schema_validator.rb +125 -0
- data/lib/recurly/schema.rb +114 -0
- data/lib/recurly/version.rb +1 -10
- data/lib/recurly.rb +14 -151
- data/recurly.gemspec +32 -0
- data/scripts/build +4 -0
- data/scripts/clean +6 -0
- data/scripts/test +3 -0
- metadata +129 -179
- data/lib/recurly/account.rb +0 -214
- data/lib/recurly/account_acquisition.rb +0 -27
- data/lib/recurly/account_balance.rb +0 -22
- data/lib/recurly/add_on.rb +0 -51
- data/lib/recurly/address.rb +0 -25
- data/lib/recurly/adjustment.rb +0 -84
- data/lib/recurly/api/errors.rb +0 -208
- data/lib/recurly/api/net_http_adapter.rb +0 -111
- data/lib/recurly/api.rb +0 -110
- data/lib/recurly/billing_info.rb +0 -114
- data/lib/recurly/coupon.rb +0 -136
- data/lib/recurly/credit_payment.rb +0 -32
- data/lib/recurly/currency_percentage_tier.rb +0 -17
- data/lib/recurly/custom_field.rb +0 -15
- data/lib/recurly/delivery.rb +0 -19
- data/lib/recurly/dunning_campaign.rb +0 -30
- data/lib/recurly/dunning_cycle.rb +0 -18
- data/lib/recurly/error.rb +0 -13
- data/lib/recurly/gift_card.rb +0 -85
- data/lib/recurly/helper.rb +0 -51
- data/lib/recurly/invoice.rb +0 -305
- data/lib/recurly/invoice_collection.rb +0 -14
- data/lib/recurly/invoice_template.rb +0 -14
- data/lib/recurly/item.rb +0 -36
- data/lib/recurly/js.rb +0 -14
- data/lib/recurly/juris_detail.rb +0 -15
- data/lib/recurly/measured_unit.rb +0 -16
- data/lib/recurly/money.rb +0 -120
- data/lib/recurly/note.rb +0 -14
- data/lib/recurly/percentage_tier.rb +0 -17
- data/lib/recurly/plan.rb +0 -44
- data/lib/recurly/purchase.rb +0 -238
- data/lib/recurly/redemption.rb +0 -46
- data/lib/recurly/resource/association.rb +0 -16
- data/lib/recurly/resource/errors.rb +0 -20
- data/lib/recurly/resource/pager.rb +0 -313
- data/lib/recurly/shipping_address.rb +0 -26
- data/lib/recurly/shipping_fee.rb +0 -17
- data/lib/recurly/shipping_method.rb +0 -13
- data/lib/recurly/sub_add_on_percentage_tier.rb +0 -17
- data/lib/recurly/subscription/add_ons.rb +0 -82
- data/lib/recurly/subscription.rb +0 -367
- data/lib/recurly/subscription_add_on.rb +0 -63
- data/lib/recurly/tax_detail.rb +0 -18
- data/lib/recurly/tax_type.rb +0 -13
- data/lib/recurly/tier.rb +0 -18
- data/lib/recurly/transaction/errors.rb +0 -115
- data/lib/recurly/transaction.rb +0 -131
- data/lib/recurly/usage.rb +0 -28
- data/lib/recurly/verify.rb +0 -12
- data/lib/recurly/webhook/account_notification.rb +0 -13
- data/lib/recurly/webhook/billing_info_update_failed_notification.rb +0 -6
- data/lib/recurly/webhook/billing_info_updated_notification.rb +0 -6
- data/lib/recurly/webhook/canceled_account_notification.rb +0 -6
- data/lib/recurly/webhook/canceled_gift_card_notification.rb +0 -6
- data/lib/recurly/webhook/canceled_subscription_notification.rb +0 -6
- data/lib/recurly/webhook/closed_credit_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/closed_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/credit_payment_notification.rb +0 -12
- data/lib/recurly/webhook/deactivated_item_notification.rb +0 -6
- data/lib/recurly/webhook/deleted_shipping_address_notification.rb +0 -6
- data/lib/recurly/webhook/dunning_notification.rb +0 -14
- data/lib/recurly/webhook/expired_subscription_notification.rb +0 -6
- data/lib/recurly/webhook/failed_charge_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/failed_payment_notification.rb +0 -6
- data/lib/recurly/webhook/fraud_info_updated_notification.rb +0 -6
- data/lib/recurly/webhook/gift_card_notification.rb +0 -8
- data/lib/recurly/webhook/invoice_notification.rb +0 -12
- data/lib/recurly/webhook/item_notification.rb +0 -7
- data/lib/recurly/webhook/low_balance_gift_card_notification.rb +0 -6
- data/lib/recurly/webhook/new_account_notification.rb +0 -6
- data/lib/recurly/webhook/new_charge_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/new_credit_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/new_credit_payment_notification.rb +0 -6
- data/lib/recurly/webhook/new_dunning_event_notification.rb +0 -6
- data/lib/recurly/webhook/new_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/new_item_notification.rb +0 -6
- data/lib/recurly/webhook/new_shipping_address_notification.rb +0 -6
- data/lib/recurly/webhook/new_subscription_notification.rb +0 -6
- data/lib/recurly/webhook/new_usage_notification.rb +0 -8
- data/lib/recurly/webhook/notification.rb +0 -18
- data/lib/recurly/webhook/paid_charge_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/past_due_charge_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/past_due_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/paused_subscription_renewal_notification.rb +0 -6
- data/lib/recurly/webhook/prerenewal_notification.rb +0 -6
- data/lib/recurly/webhook/processing_charge_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/processing_credit_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/processing_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/processing_payment_notification.rb +0 -6
- data/lib/recurly/webhook/purchased_gift_card_notification.rb +0 -7
- data/lib/recurly/webhook/reactivated_account_notification.rb +0 -6
- data/lib/recurly/webhook/reactivated_item_notification.rb +0 -6
- data/lib/recurly/webhook/redeemed_gift_card_notification.rb +0 -7
- data/lib/recurly/webhook/regenerated_gift_card_notification.rb +0 -6
- data/lib/recurly/webhook/renewed_subscription_notification.rb +0 -6
- data/lib/recurly/webhook/reopened_charge_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/reopened_credit_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/scheduled_payment_notification.rb +0 -6
- data/lib/recurly/webhook/scheduled_subscription_pause_notification.rb +0 -6
- data/lib/recurly/webhook/scheduled_subscription_update_notification.rb +0 -6
- data/lib/recurly/webhook/subscription_notification.rb +0 -12
- data/lib/recurly/webhook/subscription_pause_canceled_notification.rb +0 -6
- data/lib/recurly/webhook/subscription_pause_modified_notification.rb +0 -6
- data/lib/recurly/webhook/subscription_paused_notification.rb +0 -6
- data/lib/recurly/webhook/subscription_resumed_notification.rb +0 -6
- data/lib/recurly/webhook/successful_payment_notification.rb +0 -6
- data/lib/recurly/webhook/successful_refund_notification.rb +0 -6
- data/lib/recurly/webhook/transaction_authorized_notification.rb +0 -6
- data/lib/recurly/webhook/transaction_notification.rb +0 -12
- data/lib/recurly/webhook/transaction_status_updated_notification.rb +0 -6
- data/lib/recurly/webhook/updated_account_notification.rb +0 -6
- data/lib/recurly/webhook/updated_balance_gift_card_notification.rb +0 -7
- data/lib/recurly/webhook/updated_gift_card_notification.rb +0 -6
- data/lib/recurly/webhook/updated_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/updated_item_notification.rb +0 -6
- data/lib/recurly/webhook/updated_shipping_address_notification.rb +0 -6
- data/lib/recurly/webhook/updated_subscription_notification.rb +0 -6
- data/lib/recurly/webhook/void_payment_notification.rb +0 -6
- data/lib/recurly/webhook/voided_credit_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/voided_credit_payment_notification.rb +0 -6
- data/lib/recurly/webhook.rb +0 -113
- data/lib/recurly/xml/nokogiri.rb +0 -60
- data/lib/recurly/xml/rexml.rb +0 -52
- data/lib/recurly/xml.rb +0 -122
@@ -0,0 +1,42 @@
|
|
1
|
+
module Recurly
|
2
|
+
module Resources
|
3
|
+
class SubscriptionAddOn < Resource
|
4
|
+
|
5
|
+
# @!attribute add_on
|
6
|
+
# @return [AddOnMini]
|
7
|
+
define_attribute :add_on, :AddOnMini
|
8
|
+
|
9
|
+
# @!attribute created_at
|
10
|
+
# @return [DateTime] Created at
|
11
|
+
define_attribute :created_at, DateTime
|
12
|
+
|
13
|
+
# @!attribute expired_at
|
14
|
+
# @return [DateTime] Expired at
|
15
|
+
define_attribute :expired_at, DateTime
|
16
|
+
|
17
|
+
# @!attribute id
|
18
|
+
# @return [String] Subscription Add-on ID
|
19
|
+
define_attribute :id, String
|
20
|
+
|
21
|
+
# @!attribute object
|
22
|
+
# @return [String] Object type
|
23
|
+
define_attribute :object, String
|
24
|
+
|
25
|
+
# @!attribute quantity
|
26
|
+
# @return [Integer] Add-on quantity
|
27
|
+
define_attribute :quantity, Integer
|
28
|
+
|
29
|
+
# @!attribute subscription_id
|
30
|
+
# @return [String] Subscription ID
|
31
|
+
define_attribute :subscription_id, String
|
32
|
+
|
33
|
+
# @!attribute unit_amount
|
34
|
+
# @return [Float] This is priced in the subscription's currency.
|
35
|
+
define_attribute :unit_amount, Float
|
36
|
+
|
37
|
+
# @!attribute updated_at
|
38
|
+
# @return [DateTime] Updated at
|
39
|
+
define_attribute :updated_at, DateTime
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Recurly
|
2
|
+
module Resources
|
3
|
+
class SubscriptionChange < Resource
|
4
|
+
|
5
|
+
# @!attribute [r] activate_at
|
6
|
+
# @return [DateTime] Activated at
|
7
|
+
define_attribute :activate_at, DateTime, {:read_only => true}
|
8
|
+
|
9
|
+
# @!attribute activated
|
10
|
+
# @return [Boolean] Returns `true` if the subscription change is activated.
|
11
|
+
define_attribute :activated, :Boolean
|
12
|
+
|
13
|
+
# @!attribute add_ons
|
14
|
+
# @return [Array[SubscriptionAddOn]] These add-ons will be used when the subscription renews.
|
15
|
+
define_attribute :add_ons, Array, {:item_type => :SubscriptionAddOn}
|
16
|
+
|
17
|
+
# @!attribute [r] created_at
|
18
|
+
# @return [DateTime] Created at
|
19
|
+
define_attribute :created_at, DateTime, {:read_only => true}
|
20
|
+
|
21
|
+
# @!attribute [r] deleted_at
|
22
|
+
# @return [DateTime] Deleted at
|
23
|
+
define_attribute :deleted_at, DateTime, {:read_only => true}
|
24
|
+
|
25
|
+
# @!attribute id
|
26
|
+
# @return [String] The ID of the Subscription Change.
|
27
|
+
define_attribute :id, String
|
28
|
+
|
29
|
+
# @!attribute object
|
30
|
+
# @return [String] Object type
|
31
|
+
define_attribute :object, String
|
32
|
+
|
33
|
+
# @!attribute plan
|
34
|
+
# @return [PlanMini]
|
35
|
+
define_attribute :plan, :PlanMini
|
36
|
+
|
37
|
+
# @!attribute quantity
|
38
|
+
# @return [Integer] Subscription quantity
|
39
|
+
define_attribute :quantity, Integer
|
40
|
+
|
41
|
+
# @!attribute subscription_id
|
42
|
+
# @return [String] The ID of the subscription that is going to be changed.
|
43
|
+
define_attribute :subscription_id, String
|
44
|
+
|
45
|
+
# @!attribute unit_amount
|
46
|
+
# @return [Float] Unit amount
|
47
|
+
define_attribute :unit_amount, Float
|
48
|
+
|
49
|
+
# @!attribute [r] updated_at
|
50
|
+
# @return [DateTime] Updated at
|
51
|
+
define_attribute :updated_at, DateTime, {:read_only => true}
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Recurly
|
2
|
+
module Resources
|
3
|
+
class TaxInfo < Resource
|
4
|
+
|
5
|
+
# @!attribute rate
|
6
|
+
# @return [Float] Rate
|
7
|
+
define_attribute :rate, Float
|
8
|
+
|
9
|
+
# @!attribute region
|
10
|
+
# @return [String] Provides the tax region applied on an invoice. For U.S. Sales Tax, this will be the 2 letter state code. For EU VAT this will be the 2 letter country code. For all country level tax types, this will display the regional tax, like VAT, GST, or PST.
|
11
|
+
define_attribute :region, String
|
12
|
+
|
13
|
+
# @!attribute type
|
14
|
+
# @return [String] Provides the tax type as "vat" for EU VAT, "usst" for U.S. Sales Tax, or the 2 letter country code for country level tax types like Canada, Australia, New Zealand, Israel, and all non-EU European countries.
|
15
|
+
define_attribute :type, String
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,146 @@
|
|
1
|
+
module Recurly
|
2
|
+
module Resources
|
3
|
+
class Transaction < Resource
|
4
|
+
|
5
|
+
# @!attribute account
|
6
|
+
# @return [AccountMini]
|
7
|
+
define_attribute :account, :AccountMini
|
8
|
+
|
9
|
+
# @!attribute amount
|
10
|
+
# @return [Float] Total transaction amount sent to the payment gateway.
|
11
|
+
define_attribute :amount, Float
|
12
|
+
|
13
|
+
# @!attribute avs_check
|
14
|
+
# @return [String] When processed, result from checking the overall AVS on the transaction.
|
15
|
+
define_attribute :avs_check, String, {:enum => ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]}
|
16
|
+
|
17
|
+
# @!attribute billing_address
|
18
|
+
# @return [Address]
|
19
|
+
define_attribute :billing_address, :Address
|
20
|
+
|
21
|
+
# @!attribute collected_at
|
22
|
+
# @return [DateTime] Collected at, or if not collected yet, the time the transaction was created.
|
23
|
+
define_attribute :collected_at, DateTime
|
24
|
+
|
25
|
+
# @!attribute created_at
|
26
|
+
# @return [DateTime] Created at
|
27
|
+
define_attribute :created_at, DateTime
|
28
|
+
|
29
|
+
# @!attribute currency
|
30
|
+
# @return [String] 3-letter ISO 4217 currency code.
|
31
|
+
define_attribute :currency, String
|
32
|
+
|
33
|
+
# @!attribute customer_message
|
34
|
+
# @return [String] For declined (`success=false`) transactions, the message displayed to the customer.
|
35
|
+
define_attribute :customer_message, String
|
36
|
+
|
37
|
+
# @!attribute customer_message_locale
|
38
|
+
# @return [String] Language code for the message
|
39
|
+
define_attribute :customer_message_locale, String
|
40
|
+
|
41
|
+
# @!attribute cvv_check
|
42
|
+
# @return [String] When processed, result from checking the CVV/CVC value on the transaction.
|
43
|
+
define_attribute :cvv_check, String, {:enum => ["D", "I", "M", "N", "P", "S", "U", "X"]}
|
44
|
+
|
45
|
+
# @!attribute gateway_approval_code
|
46
|
+
# @return [String] Transaction approval code from the payment gateway.
|
47
|
+
define_attribute :gateway_approval_code, String
|
48
|
+
|
49
|
+
# @!attribute gateway_message
|
50
|
+
# @return [String] Transaction message from the payment gateway.
|
51
|
+
define_attribute :gateway_message, String
|
52
|
+
|
53
|
+
# @!attribute gateway_reference
|
54
|
+
# @return [String] Transaction reference number from the payment gateway.
|
55
|
+
define_attribute :gateway_reference, String
|
56
|
+
|
57
|
+
# @!attribute gateway_response_code
|
58
|
+
# @return [String] For declined transactions (`success=false`), this field lists the gateway error code.
|
59
|
+
define_attribute :gateway_response_code, String
|
60
|
+
|
61
|
+
# @!attribute gateway_response_time
|
62
|
+
# @return [Integer] Time, in seconds, for gateway to process the transaction.
|
63
|
+
define_attribute :gateway_response_time, Integer
|
64
|
+
|
65
|
+
# @!attribute gateway_response_values
|
66
|
+
# @return [Hash] The values in this field will vary from gateway to gateway.
|
67
|
+
define_attribute :gateway_response_values, Hash
|
68
|
+
|
69
|
+
# @!attribute id
|
70
|
+
# @return [String] Transaction ID
|
71
|
+
define_attribute :id, String
|
72
|
+
|
73
|
+
# @!attribute invoice
|
74
|
+
# @return [InvoiceMini]
|
75
|
+
define_attribute :invoice, :InvoiceMini
|
76
|
+
|
77
|
+
# @!attribute ip_address_country
|
78
|
+
# @return [String] IP address's country
|
79
|
+
define_attribute :ip_address_country, String
|
80
|
+
|
81
|
+
# @!attribute ip_address_v4
|
82
|
+
# @return [String] IP address provided when the billing information was collected: - When the customer enters billing information into the Recurly.JS or Hosted Payment Pages, Recurly records the IP address. - When the merchant enters billing information using the API, the merchant may provide an IP address. - When the merchant enters billing information using the UI, no IP address is recorded.
|
83
|
+
define_attribute :ip_address_v4, String
|
84
|
+
|
85
|
+
# @!attribute object
|
86
|
+
# @return [String] Object type
|
87
|
+
define_attribute :object, String
|
88
|
+
|
89
|
+
# @!attribute origin
|
90
|
+
# @return [String] Describes how the transaction was triggered.
|
91
|
+
define_attribute :origin, String, {:enum => ["api", "hpp", "merchant", "recurly_admin", "recurlyjs", "recurring", "transparent", "force_collect", "refunded_externally", "chargeback"]}
|
92
|
+
|
93
|
+
# @!attribute original_transaction_id
|
94
|
+
# @return [String] If this transaction is a refund (`type=refund`), this will be the ID of the original transaction on the invoice being refunded.
|
95
|
+
define_attribute :original_transaction_id, String
|
96
|
+
|
97
|
+
# @!attribute payment_gateway
|
98
|
+
# @return [Hash]
|
99
|
+
define_attribute :payment_gateway, Hash
|
100
|
+
|
101
|
+
# @!attribute payment_method
|
102
|
+
# @return [Hash] Payment method (TODO: this overlaps with BillinInfo’s payment_method but only documents credit cards)
|
103
|
+
define_attribute :payment_method, Hash
|
104
|
+
|
105
|
+
# @!attribute refunded
|
106
|
+
# @return [Boolean] Indicates if part or all of this transaction was refunded.
|
107
|
+
define_attribute :refunded, :Boolean
|
108
|
+
|
109
|
+
# @!attribute status
|
110
|
+
# @return [String] The current transaction status. Note that the status may change, e.g. a `pending` transaction may become `declined` or `success` may later become `void`.
|
111
|
+
define_attribute :status, String, {:enum => ["pending", "scheduled", "processing", "success", "void", "declined", "error", "chargeback"]}
|
112
|
+
|
113
|
+
# @!attribute status_code
|
114
|
+
# @return [String] Status code
|
115
|
+
define_attribute :status_code, String
|
116
|
+
|
117
|
+
# @!attribute status_message
|
118
|
+
# @return [String] For declined (`success=false`) transactions, the message displayed to the merchant.
|
119
|
+
define_attribute :status_message, String
|
120
|
+
|
121
|
+
# @!attribute subscription_ids
|
122
|
+
# @return [Array[String]] If the transaction is charging or refunding for one or more subscriptions, these are their IDs.
|
123
|
+
define_attribute :subscription_ids, Array, {:item_type => String}
|
124
|
+
|
125
|
+
# @!attribute success
|
126
|
+
# @return [Boolean] Did this transaction complete successfully?
|
127
|
+
define_attribute :success, :Boolean
|
128
|
+
|
129
|
+
# @!attribute type
|
130
|
+
# @return [String] Transaction type
|
131
|
+
define_attribute :type, String, {:enum => ["authorization", "capture", "purchase", "refund", "verify"]}
|
132
|
+
|
133
|
+
# @!attribute uuid
|
134
|
+
# @return [String] The UUID is useful for matching data with the CSV exports and building URLs into Recurly's UI.
|
135
|
+
define_attribute :uuid, String
|
136
|
+
|
137
|
+
# @!attribute voided_at
|
138
|
+
# @return [DateTime] Voided at
|
139
|
+
define_attribute :voided_at, DateTime
|
140
|
+
|
141
|
+
# @!attribute voided_by_invoice
|
142
|
+
# @return [InvoiceMini]
|
143
|
+
define_attribute :voided_by_invoice, :InvoiceMini
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Recurly
|
2
|
+
module Resources
|
3
|
+
class UniqueCouponCode < Resource
|
4
|
+
|
5
|
+
# @!attribute code
|
6
|
+
# @return [String] The code the customer enters to redeem the coupon.
|
7
|
+
define_attribute :code, String
|
8
|
+
|
9
|
+
# @!attribute [r] created_at
|
10
|
+
# @return [DateTime] Created at
|
11
|
+
define_attribute :created_at, DateTime, {:read_only => true}
|
12
|
+
|
13
|
+
# @!attribute expired_at
|
14
|
+
# @return [DateTime] The date and time the coupon was expired early or reached its `max_redemptions`.
|
15
|
+
define_attribute :expired_at, DateTime
|
16
|
+
|
17
|
+
# @!attribute [r] id
|
18
|
+
# @return [String] Unique Coupon Code ID
|
19
|
+
define_attribute :id, String, {:read_only => true}
|
20
|
+
|
21
|
+
# @!attribute [r] object
|
22
|
+
# @return [String] Object type
|
23
|
+
define_attribute :object, String, {:read_only => true}
|
24
|
+
|
25
|
+
# @!attribute [r] redeemed_at
|
26
|
+
# @return [DateTime] The date and time the unique coupon code was redeemed.
|
27
|
+
define_attribute :redeemed_at, DateTime, {:read_only => true}
|
28
|
+
|
29
|
+
# @!attribute state
|
30
|
+
# @return [String] Indicates if the unique coupon code is redeemable or why not.
|
31
|
+
define_attribute :state, String, {:enum => ["redeemable", "maxed_out", "expired", "inactive"]}
|
32
|
+
|
33
|
+
# @!attribute [r] updated_at
|
34
|
+
# @return [DateTime] Updated at
|
35
|
+
define_attribute :updated_at, DateTime, {:read_only => true}
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Recurly
|
2
|
+
module Resources
|
3
|
+
class User < Resource
|
4
|
+
|
5
|
+
# @!attribute [r] created_at
|
6
|
+
# @return [DateTime]
|
7
|
+
define_attribute :created_at, DateTime, {:read_only => true}
|
8
|
+
|
9
|
+
# @!attribute [r] deleted_at
|
10
|
+
# @return [DateTime]
|
11
|
+
define_attribute :deleted_at, DateTime, {:read_only => true}
|
12
|
+
|
13
|
+
# @!attribute email
|
14
|
+
# @return [String]
|
15
|
+
define_attribute :email, String
|
16
|
+
|
17
|
+
# @!attribute first_name
|
18
|
+
# @return [String]
|
19
|
+
define_attribute :first_name, String
|
20
|
+
|
21
|
+
# @!attribute [r] id
|
22
|
+
# @return [String]
|
23
|
+
define_attribute :id, String, {:read_only => true}
|
24
|
+
|
25
|
+
# @!attribute last_name
|
26
|
+
# @return [String]
|
27
|
+
define_attribute :last_name, String
|
28
|
+
|
29
|
+
# @!attribute [r] object
|
30
|
+
# @return [String] Object type
|
31
|
+
define_attribute :object, String, {:read_only => true}
|
32
|
+
|
33
|
+
# @!attribute time_zone
|
34
|
+
# @return [String]
|
35
|
+
define_attribute :time_zone, String
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'date'
|
2
|
+
|
3
|
+
module Recurly
|
4
|
+
class Schema
|
5
|
+
# The purpose of this class is to turn Recurly defined
|
6
|
+
# JSON data into Recurly ruby objects. It's to be used
|
7
|
+
# by the Resource as an extension.
|
8
|
+
module JsonDeserializer
|
9
|
+
# Gives the class the ability to initialize itself
|
10
|
+
# given some json data.
|
11
|
+
#
|
12
|
+
# @example
|
13
|
+
# Recurly::Resources::Account.from_json({"code" => "mycode"})
|
14
|
+
# #=> #<Recurly::Resources::Account @attributes={:code=>"mycode"}>
|
15
|
+
#
|
16
|
+
# @param attributes [Hash] A primitive Hash from JSON.parse of Recurly result.
|
17
|
+
# @return [Resource] the {Resource} (ruby object) representing the passed in JSON data.
|
18
|
+
def from_json(attributes = {})
|
19
|
+
resource = new()
|
20
|
+
attributes.each do |attr_name, val|
|
21
|
+
next if attr_name == 'object'
|
22
|
+
|
23
|
+
# if the Hash val is a recurly type, parse it into a Resource
|
24
|
+
if val.is_a?(Hash) && klazz = JSONParser.recurly_class(val['object'])
|
25
|
+
val = klazz.from_json(val)
|
26
|
+
elsif val.is_a?(Array)
|
27
|
+
val = val.map do |e|
|
28
|
+
if e.is_a?(Hash) && klazz = JSONParser.recurly_class(e['object'])
|
29
|
+
klazz.from_json(e)
|
30
|
+
else
|
31
|
+
e
|
32
|
+
end
|
33
|
+
end
|
34
|
+
elsif attr_name.end_with?("_at") && val && val.is_a?(String)
|
35
|
+
# TODO should use the schema to determine this probably
|
36
|
+
val = DateTime.parse(val)
|
37
|
+
end
|
38
|
+
|
39
|
+
writer = "#{attr_name}="
|
40
|
+
|
41
|
+
# TODO maybe check for protected writer first?
|
42
|
+
begin
|
43
|
+
resource.send(writer, val)
|
44
|
+
rescue => e
|
45
|
+
# TODO ignoring these missing fields for now
|
46
|
+
puts e
|
47
|
+
end
|
48
|
+
end
|
49
|
+
resource
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module Recurly
|
4
|
+
# This is a wrapper class to help parse responses into Recurly objects.
|
5
|
+
class JSONParser
|
6
|
+
# Parses the json body into a recurly object.
|
7
|
+
#
|
8
|
+
# @param client [Client] The Recurly client which made the request.
|
9
|
+
# @param body [String] The JSON string to parse.
|
10
|
+
# @return [Resource]
|
11
|
+
def self.parse(client, body)
|
12
|
+
data = JSON.parse(body)
|
13
|
+
from_json(data).tap do |object|
|
14
|
+
object.client = client if object.requires_client?
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# Converts the parsed JSON into a Recurly object.
|
19
|
+
#
|
20
|
+
# @param data [Hash] The parsed JSON data
|
21
|
+
# @return [Error,Resource]
|
22
|
+
def self.from_json(data)
|
23
|
+
type = if data.has_key?("error")
|
24
|
+
"error"
|
25
|
+
else
|
26
|
+
data.delete('object')
|
27
|
+
end
|
28
|
+
klazz = self.recurly_class(type)
|
29
|
+
|
30
|
+
unless klazz
|
31
|
+
raise ArgumentError, "Unknown resource for json type #{type}"
|
32
|
+
end
|
33
|
+
|
34
|
+
data = data["error"] if klazz == Resources::Error
|
35
|
+
|
36
|
+
klazz.from_json(data)
|
37
|
+
end
|
38
|
+
|
39
|
+
# Returns the Recurly ruby class responsible for the Recurly json key.
|
40
|
+
# TODO figure out how we should handle nil types
|
41
|
+
#
|
42
|
+
# @example
|
43
|
+
# JSONParser.recurly_class('list')
|
44
|
+
# #=> Recurly::Pager
|
45
|
+
# @example
|
46
|
+
# JSONParser.recurly_class('shipping_address')
|
47
|
+
# #=> Recurly::Resources::ShippingAddress
|
48
|
+
#
|
49
|
+
# @param type [String] The JSON key.
|
50
|
+
# @return [Resource,Pager,nil]
|
51
|
+
def self.recurly_class(type)
|
52
|
+
case type
|
53
|
+
when nil
|
54
|
+
nil
|
55
|
+
when 'list'
|
56
|
+
Pager
|
57
|
+
else
|
58
|
+
type_camelized = type.split('_').map(&:capitalize).join
|
59
|
+
if Resources.const_defined?(type_camelized)
|
60
|
+
klazz = Resources.const_get(type_camelized)
|
61
|
+
if klazz.ancestors.include?(Resource)
|
62
|
+
klazz
|
63
|
+
else
|
64
|
+
# TODO might want to throw an error?
|
65
|
+
nil
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'date'
|
2
|
+
|
3
|
+
module Recurly
|
4
|
+
class Schema
|
5
|
+
# *Note*: This class is for internal use.
|
6
|
+
# The RequestCaster turns mixed data into a pure Hash
|
7
|
+
# so it can be serialized into JSON and used as the body of a request.
|
8
|
+
# This module is to be extended by the Request class.
|
9
|
+
module RequestCaster
|
10
|
+
# This method casts the data object (of mixed types) into a Hash ready for JSON
|
11
|
+
# serialization. The *schema* will default to the self's schema.
|
12
|
+
# You should pass in the schema where possible. This is because objects are serialized
|
13
|
+
# differently depending on the context in which they are being written.
|
14
|
+
#
|
15
|
+
# @example
|
16
|
+
# Recurly::Requests::AccountUpdatable.cast(account_code: 'benjamin')
|
17
|
+
# #=> {:account_code=>"benjamin"}
|
18
|
+
# @example
|
19
|
+
# # If you have some mixed data, like passing in an Address, it should cast that
|
20
|
+
# # address into a Hash based on the Schema defined in AccountUpdatable
|
21
|
+
# address = Recurly::Resources::Address.new(city: 'New Orleans')
|
22
|
+
# Recurly::Requests::AccountUpdatable.cast(account_code: 'benjamin', address: address)
|
23
|
+
# #=> {:account_code=>"benjamin", :address=>{:city=>"New Orleans"}}
|
24
|
+
#
|
25
|
+
# @param data [Hash,Resource,Request] The data to transform into a JSON Hash.
|
26
|
+
# @param schema [Schema] The schema to use to transform the data into a JSON Hash.
|
27
|
+
# @return [Hash] The pure Hash ready to be serialized into JSON.
|
28
|
+
def cast(data, schema=self.schema)
|
29
|
+
casted = {}
|
30
|
+
if data.is_a?(Resource) || data.is_a?(Request)
|
31
|
+
data = as_json(data, schema)
|
32
|
+
end
|
33
|
+
|
34
|
+
data.each do |k,v|
|
35
|
+
schema_attr = schema.get_attribute(k)
|
36
|
+
norm_val = if v.respond_to?(:attributes)
|
37
|
+
cast(v, schema_attr.recurly_class.schema)
|
38
|
+
elsif v.is_a?(Array)
|
39
|
+
v.map do |elem|
|
40
|
+
if elem.respond_to?(:attributes)
|
41
|
+
cast(elem, schema_attr.recurly_class.schema)
|
42
|
+
else
|
43
|
+
elem
|
44
|
+
end
|
45
|
+
end
|
46
|
+
elsif v.is_a?(Hash) && schema_attr.type.is_a?(Symbol)
|
47
|
+
cast(v, schema_attr.recurly_class.schema)
|
48
|
+
else
|
49
|
+
v
|
50
|
+
end
|
51
|
+
|
52
|
+
casted[k] = norm_val
|
53
|
+
end
|
54
|
+
|
55
|
+
casted
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def as_json(resource, schema)
|
61
|
+
writeable_attributes = schema.attributes.reject(&:read_only?).map(&:name)
|
62
|
+
resource.attributes.select { |k,_| writeable_attributes.include?(k) }
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Recurly
|
2
|
+
class Schema
|
3
|
+
# A mixin that allows a class to be treated like a recurly
|
4
|
+
# object. This gives the class the power to describe
|
5
|
+
# it's schema. It adds the *define_attribute* method
|
6
|
+
# and a *schema* reader.
|
7
|
+
module SchemaFactory
|
8
|
+
|
9
|
+
# Gets the schema for this class
|
10
|
+
# @return [Schema]
|
11
|
+
def schema
|
12
|
+
@schema ||= ::Recurly::Schema.new
|
13
|
+
end
|
14
|
+
|
15
|
+
protected
|
16
|
+
|
17
|
+
# Macro that allows this class to define it's schema and associated
|
18
|
+
# attribute getters and setters.
|
19
|
+
#
|
20
|
+
# @example
|
21
|
+
# class Account
|
22
|
+
# extend Schema::SchemaFactory
|
23
|
+
# define_attribute :code, String, {:read_only=>true}
|
24
|
+
# end
|
25
|
+
# account = Account.new(code: "mycode")
|
26
|
+
# account.schema
|
27
|
+
# #=> Recurly::Schema
|
28
|
+
# acount.code = "newcode" # this method protected since read_only = true
|
29
|
+
# account.code
|
30
|
+
# #=> "mycode"
|
31
|
+
def define_attribute(name, type, options={})
|
32
|
+
attribute = schema.add_attribute(name, type, options)
|
33
|
+
|
34
|
+
# Define the reader
|
35
|
+
define_method(name) do
|
36
|
+
self.attributes[name]
|
37
|
+
end
|
38
|
+
|
39
|
+
# Define the writer
|
40
|
+
define_method("#{name}=") do |val|
|
41
|
+
self.attributes[name] = val
|
42
|
+
end
|
43
|
+
|
44
|
+
protected "#{name}=" if attribute.read_only?
|
45
|
+
|
46
|
+
self
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|