recurly 2.20.3 → 3.0.0.beta.1
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.
- 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 -1114
- 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 -167
- data/recurly.gemspec +32 -0
- data/scripts/build +4 -0
- data/scripts/clean +6 -0
- data/scripts/test +3 -0
- metadata +129 -196
- data/lib/recurly/account.rb +0 -230
- data/lib/recurly/account_acquisition.rb +0 -27
- data/lib/recurly/account_balance.rb +0 -23
- data/lib/recurly/add_on.rb +0 -52
- data/lib/recurly/address.rb +0 -25
- data/lib/recurly/adjustment.rb +0 -100
- 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 -134
- data/lib/recurly/business_entity.rb +0 -35
- 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/custom_field_definition.rb +0 -14
- data/lib/recurly/customer_permission.rb +0 -10
- 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/entitlement.rb +0 -19
- data/lib/recurly/error.rb +0 -13
- data/lib/recurly/external_account.rb +0 -17
- data/lib/recurly/external_charge.rb +0 -20
- data/lib/recurly/external_invoice.rb +0 -27
- data/lib/recurly/external_payment_phase.rb +0 -27
- data/lib/recurly/external_product.rb +0 -34
- data/lib/recurly/external_product_reference.rb +0 -18
- data/lib/recurly/external_subscription.rb +0 -62
- data/lib/recurly/gateway_attribute.rb +0 -10
- data/lib/recurly/general_ledger_account.rb +0 -16
- data/lib/recurly/gift_card.rb +0 -85
- data/lib/recurly/helper.rb +0 -51
- data/lib/recurly/invoice.rb +0 -354
- 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/performance_obligation.rb +0 -15
- data/lib/recurly/plan.rb +0 -59
- data/lib/recurly/plan_ramp_interval.rb +0 -10
- data/lib/recurly/purchase.rb +0 -239
- 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/rev_rec.rb +0 -18
- 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 -374
- data/lib/recurly/subscription_add_on.rb +0 -64
- data/lib/recurly/subscription_ramp_interval.rb +0 -12
- 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 -119
- data/lib/recurly/transaction.rb +0 -132
- data/lib/recurly/usage.rb +0 -29
- 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
|