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.
Files changed (234) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +14 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +5 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +158 -110
  8. data/Rakefile +6 -0
  9. data/bin/bundle +105 -0
  10. data/bin/coderay +29 -0
  11. data/bin/console +14 -0
  12. data/bin/htmldiff +29 -0
  13. data/bin/ldiff +29 -0
  14. data/bin/pry +29 -0
  15. data/bin/rake +29 -0
  16. data/bin/rspec +29 -0
  17. data/bin/setup +8 -0
  18. data/bin/yard +29 -0
  19. data/bin/yardoc +29 -0
  20. data/bin/yri +29 -0
  21. data/lib/data/ca-certificates.crt +31 -0
  22. data/lib/recurly/client/operations.rb +935 -0
  23. data/lib/recurly/client.rb +198 -0
  24. data/lib/recurly/errors/api_errors.rb +35 -0
  25. data/lib/recurly/errors/network_errors.rb +8 -0
  26. data/lib/recurly/errors.rb +34 -0
  27. data/lib/recurly/pager.rb +119 -0
  28. data/lib/recurly/request.rb +30 -0
  29. data/lib/recurly/requests/account_acquisition_updatable.rb +22 -0
  30. data/lib/recurly/requests/account_create_only.rb +18 -0
  31. data/lib/recurly/requests/account_updatable.rb +50 -0
  32. data/lib/recurly/requests/add_on_create.rb +38 -0
  33. data/lib/recurly/requests/add_on_update.rb +38 -0
  34. data/lib/recurly/requests/address.rb +42 -0
  35. data/lib/recurly/requests/billing_info_create.rb +58 -0
  36. data/lib/recurly/requests/coupon_create_only.rb +66 -0
  37. data/lib/recurly/requests/coupon_updatable.rb +30 -0
  38. data/lib/recurly/requests/create_account.rb +62 -0
  39. data/lib/recurly/requests/create_coupon.rb +90 -0
  40. data/lib/recurly/requests/invoice_create.rb +42 -0
  41. data/lib/recurly/requests/invoice_refund.rb +30 -0
  42. data/lib/recurly/requests/line_item_create.rb +46 -0
  43. data/lib/recurly/requests/plan_create.rb +66 -0
  44. data/lib/recurly/requests/plan_update.rb +70 -0
  45. data/lib/recurly/requests/shipping_address_create.rb +58 -0
  46. data/lib/recurly/requests/shipping_address_update.rb +62 -0
  47. data/lib/recurly/requests/subscription_add_on_create.rb +22 -0
  48. data/lib/recurly/requests/subscription_change_create.rb +42 -0
  49. data/lib/recurly/requests/subscription_create.rb +86 -0
  50. data/lib/recurly/requests/subscription_update.rb +42 -0
  51. data/lib/recurly/requests/update_coupon.rb +30 -0
  52. data/lib/recurly/resource.rb +16 -1114
  53. data/lib/recurly/resources/account.rb +86 -0
  54. data/lib/recurly/resources/account_acquisition.rb +42 -0
  55. data/lib/recurly/resources/account_balance.rb +22 -0
  56. data/lib/recurly/resources/account_note.rb +30 -0
  57. data/lib/recurly/resources/add_on.rb +62 -0
  58. data/lib/recurly/resources/address.rb +42 -0
  59. data/lib/recurly/resources/billing_info.rb +62 -0
  60. data/lib/recurly/resources/coupon.rb +110 -0
  61. data/lib/recurly/resources/coupon_discount.rb +22 -0
  62. data/lib/recurly/resources/coupon_redemption.rb +46 -0
  63. data/lib/recurly/resources/credit_payment.rb +62 -0
  64. data/lib/recurly/resources/error.rb +18 -0
  65. data/lib/recurly/resources/error_may_have_transaction.rb +22 -0
  66. data/lib/recurly/resources/invoice.rb +138 -0
  67. data/lib/recurly/resources/invoice_collection.rb +18 -0
  68. data/lib/recurly/resources/line_item.rb +166 -0
  69. data/lib/recurly/resources/plan.rb +86 -0
  70. data/lib/recurly/resources/settings.rb +18 -0
  71. data/lib/recurly/resources/shipping_address.rb +74 -0
  72. data/lib/recurly/resources/site.rb +46 -0
  73. data/lib/recurly/resources/subscription.rb +134 -0
  74. data/lib/recurly/resources/subscription_add_on.rb +42 -0
  75. data/lib/recurly/resources/subscription_change.rb +54 -0
  76. data/lib/recurly/resources/tax_info.rb +18 -0
  77. data/lib/recurly/resources/transaction.rb +146 -0
  78. data/lib/recurly/resources/unique_coupon_code.rb +38 -0
  79. data/lib/recurly/resources/user.rb +38 -0
  80. data/lib/recurly/schema/json_deserializer.rb +53 -0
  81. data/lib/recurly/schema/json_parser.rb +71 -0
  82. data/lib/recurly/schema/request_caster.rb +66 -0
  83. data/lib/recurly/schema/schema_factory.rb +50 -0
  84. data/lib/recurly/schema/schema_validator.rb +125 -0
  85. data/lib/recurly/schema.rb +114 -0
  86. data/lib/recurly/version.rb +1 -10
  87. data/lib/recurly.rb +14 -167
  88. data/recurly.gemspec +32 -0
  89. data/scripts/build +4 -0
  90. data/scripts/clean +6 -0
  91. data/scripts/test +3 -0
  92. metadata +129 -196
  93. data/lib/recurly/account.rb +0 -230
  94. data/lib/recurly/account_acquisition.rb +0 -27
  95. data/lib/recurly/account_balance.rb +0 -23
  96. data/lib/recurly/add_on.rb +0 -52
  97. data/lib/recurly/address.rb +0 -25
  98. data/lib/recurly/adjustment.rb +0 -100
  99. data/lib/recurly/api/errors.rb +0 -208
  100. data/lib/recurly/api/net_http_adapter.rb +0 -111
  101. data/lib/recurly/api.rb +0 -110
  102. data/lib/recurly/billing_info.rb +0 -134
  103. data/lib/recurly/business_entity.rb +0 -35
  104. data/lib/recurly/coupon.rb +0 -136
  105. data/lib/recurly/credit_payment.rb +0 -32
  106. data/lib/recurly/currency_percentage_tier.rb +0 -17
  107. data/lib/recurly/custom_field.rb +0 -15
  108. data/lib/recurly/custom_field_definition.rb +0 -14
  109. data/lib/recurly/customer_permission.rb +0 -10
  110. data/lib/recurly/delivery.rb +0 -19
  111. data/lib/recurly/dunning_campaign.rb +0 -30
  112. data/lib/recurly/dunning_cycle.rb +0 -18
  113. data/lib/recurly/entitlement.rb +0 -19
  114. data/lib/recurly/error.rb +0 -13
  115. data/lib/recurly/external_account.rb +0 -17
  116. data/lib/recurly/external_charge.rb +0 -20
  117. data/lib/recurly/external_invoice.rb +0 -27
  118. data/lib/recurly/external_payment_phase.rb +0 -27
  119. data/lib/recurly/external_product.rb +0 -34
  120. data/lib/recurly/external_product_reference.rb +0 -18
  121. data/lib/recurly/external_subscription.rb +0 -62
  122. data/lib/recurly/gateway_attribute.rb +0 -10
  123. data/lib/recurly/general_ledger_account.rb +0 -16
  124. data/lib/recurly/gift_card.rb +0 -85
  125. data/lib/recurly/helper.rb +0 -51
  126. data/lib/recurly/invoice.rb +0 -354
  127. data/lib/recurly/invoice_collection.rb +0 -14
  128. data/lib/recurly/invoice_template.rb +0 -14
  129. data/lib/recurly/item.rb +0 -36
  130. data/lib/recurly/js.rb +0 -14
  131. data/lib/recurly/juris_detail.rb +0 -15
  132. data/lib/recurly/measured_unit.rb +0 -16
  133. data/lib/recurly/money.rb +0 -120
  134. data/lib/recurly/note.rb +0 -14
  135. data/lib/recurly/percentage_tier.rb +0 -17
  136. data/lib/recurly/performance_obligation.rb +0 -15
  137. data/lib/recurly/plan.rb +0 -59
  138. data/lib/recurly/plan_ramp_interval.rb +0 -10
  139. data/lib/recurly/purchase.rb +0 -239
  140. data/lib/recurly/redemption.rb +0 -46
  141. data/lib/recurly/resource/association.rb +0 -16
  142. data/lib/recurly/resource/errors.rb +0 -20
  143. data/lib/recurly/resource/pager.rb +0 -313
  144. data/lib/recurly/rev_rec.rb +0 -18
  145. data/lib/recurly/shipping_address.rb +0 -26
  146. data/lib/recurly/shipping_fee.rb +0 -17
  147. data/lib/recurly/shipping_method.rb +0 -13
  148. data/lib/recurly/sub_add_on_percentage_tier.rb +0 -17
  149. data/lib/recurly/subscription/add_ons.rb +0 -82
  150. data/lib/recurly/subscription.rb +0 -374
  151. data/lib/recurly/subscription_add_on.rb +0 -64
  152. data/lib/recurly/subscription_ramp_interval.rb +0 -12
  153. data/lib/recurly/tax_detail.rb +0 -18
  154. data/lib/recurly/tax_type.rb +0 -13
  155. data/lib/recurly/tier.rb +0 -18
  156. data/lib/recurly/transaction/errors.rb +0 -119
  157. data/lib/recurly/transaction.rb +0 -132
  158. data/lib/recurly/usage.rb +0 -29
  159. data/lib/recurly/verify.rb +0 -12
  160. data/lib/recurly/webhook/account_notification.rb +0 -13
  161. data/lib/recurly/webhook/billing_info_update_failed_notification.rb +0 -6
  162. data/lib/recurly/webhook/billing_info_updated_notification.rb +0 -6
  163. data/lib/recurly/webhook/canceled_account_notification.rb +0 -6
  164. data/lib/recurly/webhook/canceled_gift_card_notification.rb +0 -6
  165. data/lib/recurly/webhook/canceled_subscription_notification.rb +0 -6
  166. data/lib/recurly/webhook/closed_credit_invoice_notification.rb +0 -6
  167. data/lib/recurly/webhook/closed_invoice_notification.rb +0 -6
  168. data/lib/recurly/webhook/credit_payment_notification.rb +0 -12
  169. data/lib/recurly/webhook/deactivated_item_notification.rb +0 -6
  170. data/lib/recurly/webhook/deleted_shipping_address_notification.rb +0 -6
  171. data/lib/recurly/webhook/dunning_notification.rb +0 -14
  172. data/lib/recurly/webhook/expired_subscription_notification.rb +0 -6
  173. data/lib/recurly/webhook/failed_charge_invoice_notification.rb +0 -6
  174. data/lib/recurly/webhook/failed_payment_notification.rb +0 -6
  175. data/lib/recurly/webhook/fraud_info_updated_notification.rb +0 -6
  176. data/lib/recurly/webhook/gift_card_notification.rb +0 -8
  177. data/lib/recurly/webhook/invoice_notification.rb +0 -12
  178. data/lib/recurly/webhook/item_notification.rb +0 -7
  179. data/lib/recurly/webhook/low_balance_gift_card_notification.rb +0 -6
  180. data/lib/recurly/webhook/new_account_notification.rb +0 -6
  181. data/lib/recurly/webhook/new_charge_invoice_notification.rb +0 -6
  182. data/lib/recurly/webhook/new_credit_invoice_notification.rb +0 -6
  183. data/lib/recurly/webhook/new_credit_payment_notification.rb +0 -6
  184. data/lib/recurly/webhook/new_dunning_event_notification.rb +0 -6
  185. data/lib/recurly/webhook/new_invoice_notification.rb +0 -6
  186. data/lib/recurly/webhook/new_item_notification.rb +0 -6
  187. data/lib/recurly/webhook/new_shipping_address_notification.rb +0 -6
  188. data/lib/recurly/webhook/new_subscription_notification.rb +0 -6
  189. data/lib/recurly/webhook/new_usage_notification.rb +0 -8
  190. data/lib/recurly/webhook/notification.rb +0 -18
  191. data/lib/recurly/webhook/paid_charge_invoice_notification.rb +0 -6
  192. data/lib/recurly/webhook/past_due_charge_invoice_notification.rb +0 -6
  193. data/lib/recurly/webhook/past_due_invoice_notification.rb +0 -6
  194. data/lib/recurly/webhook/paused_subscription_renewal_notification.rb +0 -6
  195. data/lib/recurly/webhook/prerenewal_notification.rb +0 -6
  196. data/lib/recurly/webhook/processing_charge_invoice_notification.rb +0 -6
  197. data/lib/recurly/webhook/processing_credit_invoice_notification.rb +0 -6
  198. data/lib/recurly/webhook/processing_invoice_notification.rb +0 -6
  199. data/lib/recurly/webhook/processing_payment_notification.rb +0 -6
  200. data/lib/recurly/webhook/purchased_gift_card_notification.rb +0 -7
  201. data/lib/recurly/webhook/reactivated_account_notification.rb +0 -6
  202. data/lib/recurly/webhook/reactivated_item_notification.rb +0 -6
  203. data/lib/recurly/webhook/redeemed_gift_card_notification.rb +0 -7
  204. data/lib/recurly/webhook/regenerated_gift_card_notification.rb +0 -6
  205. data/lib/recurly/webhook/renewed_subscription_notification.rb +0 -6
  206. data/lib/recurly/webhook/reopened_charge_invoice_notification.rb +0 -6
  207. data/lib/recurly/webhook/reopened_credit_invoice_notification.rb +0 -6
  208. data/lib/recurly/webhook/scheduled_payment_notification.rb +0 -6
  209. data/lib/recurly/webhook/scheduled_subscription_pause_notification.rb +0 -6
  210. data/lib/recurly/webhook/scheduled_subscription_update_notification.rb +0 -6
  211. data/lib/recurly/webhook/subscription_notification.rb +0 -12
  212. data/lib/recurly/webhook/subscription_pause_canceled_notification.rb +0 -6
  213. data/lib/recurly/webhook/subscription_pause_modified_notification.rb +0 -6
  214. data/lib/recurly/webhook/subscription_paused_notification.rb +0 -6
  215. data/lib/recurly/webhook/subscription_resumed_notification.rb +0 -6
  216. data/lib/recurly/webhook/successful_payment_notification.rb +0 -6
  217. data/lib/recurly/webhook/successful_refund_notification.rb +0 -6
  218. data/lib/recurly/webhook/transaction_authorized_notification.rb +0 -6
  219. data/lib/recurly/webhook/transaction_notification.rb +0 -12
  220. data/lib/recurly/webhook/transaction_status_updated_notification.rb +0 -6
  221. data/lib/recurly/webhook/updated_account_notification.rb +0 -6
  222. data/lib/recurly/webhook/updated_balance_gift_card_notification.rb +0 -7
  223. data/lib/recurly/webhook/updated_gift_card_notification.rb +0 -6
  224. data/lib/recurly/webhook/updated_invoice_notification.rb +0 -6
  225. data/lib/recurly/webhook/updated_item_notification.rb +0 -6
  226. data/lib/recurly/webhook/updated_shipping_address_notification.rb +0 -6
  227. data/lib/recurly/webhook/updated_subscription_notification.rb +0 -6
  228. data/lib/recurly/webhook/void_payment_notification.rb +0 -6
  229. data/lib/recurly/webhook/voided_credit_invoice_notification.rb +0 -6
  230. data/lib/recurly/webhook/voided_credit_payment_notification.rb +0 -6
  231. data/lib/recurly/webhook.rb +0 -113
  232. data/lib/recurly/xml/nokogiri.rb +0 -60
  233. data/lib/recurly/xml/rexml.rb +0 -52
  234. 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