recurly 2.17.0 → 3.14.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (260) hide show
  1. checksums.yaml +4 -4
  2. data/.bumpversion.cfg +15 -0
  3. data/.github/ISSUE_TEMPLATE/bug-report.md +30 -0
  4. data/.github/ISSUE_TEMPLATE/question-or-other.md +10 -0
  5. data/.github/workflows/docs.yml +28 -0
  6. data/.github_changelog_generator +8 -0
  7. data/.gitignore +15 -0
  8. data/.rspec +2 -0
  9. data/.travis.yml +13 -0
  10. data/.yardopts +2 -0
  11. data/CHANGELOG.md +313 -0
  12. data/CODE_OF_CONDUCT.md +130 -0
  13. data/CONTRIBUTING.md +106 -0
  14. data/GETTING_STARTED.md +319 -0
  15. data/Gemfile +4 -0
  16. data/LICENSE.txt +21 -0
  17. data/README.md +9 -153
  18. data/Rakefile +6 -0
  19. data/benchmark.rb +16 -0
  20. data/lib/data/ca-certificates.crt +3466 -0
  21. data/lib/recurly/client/operations.rb +3665 -0
  22. data/lib/recurly/client.rb +353 -0
  23. data/lib/recurly/connection_pool.rb +40 -0
  24. data/lib/recurly/errors/api_errors.rb +83 -0
  25. data/lib/recurly/errors/network_errors.rb +10 -0
  26. data/lib/recurly/errors.rb +68 -0
  27. data/lib/recurly/http.rb +50 -0
  28. data/lib/recurly/pager.rb +146 -0
  29. data/lib/recurly/request.rb +31 -0
  30. data/lib/recurly/requests/account_acquisition_cost.rb +18 -0
  31. data/lib/recurly/requests/account_acquisition_updatable.rb +26 -0
  32. data/lib/recurly/requests/account_create.rb +90 -0
  33. data/lib/recurly/requests/account_purchase.rb +90 -0
  34. data/lib/recurly/requests/account_update.rb +78 -0
  35. data/lib/recurly/requests/add_on_create.rb +94 -0
  36. data/lib/recurly/requests/add_on_pricing.rb +18 -0
  37. data/lib/recurly/requests/add_on_update.rb +74 -0
  38. data/lib/recurly/requests/address.rb +46 -0
  39. data/lib/recurly/requests/billing_info_create.rb +110 -0
  40. data/lib/recurly/requests/coupon_bulk_create.rb +14 -0
  41. data/lib/recurly/requests/coupon_create.rb +94 -0
  42. data/lib/recurly/requests/coupon_pricing.rb +18 -0
  43. data/lib/recurly/requests/coupon_redemption_create.rb +18 -0
  44. data/lib/recurly/requests/coupon_update.rb +34 -0
  45. data/lib/recurly/requests/custom_field.rb +18 -0
  46. data/lib/recurly/requests/external_refund.rb +22 -0
  47. data/lib/recurly/requests/external_transaction.rb +26 -0
  48. data/lib/recurly/requests/invoice_address.rb +54 -0
  49. data/lib/recurly/requests/invoice_collect.rb +18 -0
  50. data/lib/recurly/requests/invoice_create.rb +42 -0
  51. data/lib/recurly/requests/invoice_refund.rb +34 -0
  52. data/lib/recurly/requests/invoice_updatable.rb +34 -0
  53. data/lib/recurly/requests/item_create.rb +58 -0
  54. data/lib/recurly/requests/item_update.rb +58 -0
  55. data/lib/recurly/requests/line_item_create.rb +82 -0
  56. data/lib/recurly/requests/line_item_refund.rb +22 -0
  57. data/lib/recurly/requests/measured_unit_create.rb +22 -0
  58. data/lib/recurly/requests/measured_unit_update.rb +22 -0
  59. data/lib/recurly/requests/plan_create.rb +98 -0
  60. data/lib/recurly/requests/plan_hosted_pages.rb +26 -0
  61. data/lib/recurly/requests/plan_pricing.rb +22 -0
  62. data/lib/recurly/requests/plan_update.rb +94 -0
  63. data/lib/recurly/requests/pricing.rb +18 -0
  64. data/lib/recurly/requests/purchase_create.rb +74 -0
  65. data/lib/recurly/requests/shipping_address_create.rb +62 -0
  66. data/lib/recurly/requests/shipping_address_update.rb +66 -0
  67. data/lib/recurly/requests/shipping_fee_create.rb +22 -0
  68. data/lib/recurly/requests/shipping_method_create.rb +26 -0
  69. data/lib/recurly/requests/shipping_method_update.rb +26 -0
  70. data/lib/recurly/requests/shipping_purchase.rb +22 -0
  71. data/lib/recurly/requests/subscription_add_on_create.rb +38 -0
  72. data/lib/recurly/requests/subscription_add_on_tier.rb +18 -0
  73. data/lib/recurly/requests/subscription_add_on_update.rb +42 -0
  74. data/lib/recurly/requests/subscription_cancel.rb +14 -0
  75. data/lib/recurly/requests/subscription_change_create.rb +66 -0
  76. data/lib/recurly/requests/subscription_change_shipping_create.rb +22 -0
  77. data/lib/recurly/requests/subscription_create.rb +106 -0
  78. data/lib/recurly/requests/subscription_pause.rb +14 -0
  79. data/lib/recurly/requests/subscription_purchase.rb +66 -0
  80. data/lib/recurly/requests/subscription_shipping_create.rb +30 -0
  81. data/lib/recurly/requests/subscription_shipping_purchase.rb +22 -0
  82. data/lib/recurly/requests/subscription_shipping_update.rb +22 -0
  83. data/lib/recurly/requests/subscription_update.rb +58 -0
  84. data/lib/recurly/requests/tier.rb +18 -0
  85. data/lib/recurly/requests/usage_create.rb +26 -0
  86. data/lib/recurly/requests.rb +8 -0
  87. data/lib/recurly/resource.rb +23 -1082
  88. data/lib/recurly/resources/account.rb +130 -0
  89. data/lib/recurly/resources/account_acquisition.rb +46 -0
  90. data/lib/recurly/resources/account_acquisition_cost.rb +18 -0
  91. data/lib/recurly/resources/account_balance.rb +26 -0
  92. data/lib/recurly/resources/account_balance_amount.rb +18 -0
  93. data/lib/recurly/resources/account_mini.rb +46 -0
  94. data/lib/recurly/resources/account_note.rb +34 -0
  95. data/lib/recurly/resources/add_on.rb +114 -0
  96. data/lib/recurly/resources/add_on_mini.rb +54 -0
  97. data/lib/recurly/resources/add_on_pricing.rb +18 -0
  98. data/lib/recurly/resources/address.rb +46 -0
  99. data/lib/recurly/resources/billing_info.rb +66 -0
  100. data/lib/recurly/resources/billing_info_updated_by.rb +18 -0
  101. data/lib/recurly/resources/binary_file.rb +14 -0
  102. data/lib/recurly/resources/coupon.rb +130 -0
  103. data/lib/recurly/resources/coupon_discount.rb +26 -0
  104. data/lib/recurly/resources/coupon_discount_pricing.rb +18 -0
  105. data/lib/recurly/resources/coupon_discount_trial.rb +18 -0
  106. data/lib/recurly/resources/coupon_mini.rb +42 -0
  107. data/lib/recurly/resources/coupon_redemption.rb +50 -0
  108. data/lib/recurly/resources/coupon_redemption_mini.rb +34 -0
  109. data/lib/recurly/resources/credit_payment.rb +66 -0
  110. data/lib/recurly/resources/custom_field.rb +18 -0
  111. data/lib/recurly/resources/custom_field_definition.rb +50 -0
  112. data/lib/recurly/resources/error.rb +22 -0
  113. data/lib/recurly/resources/error_may_have_transaction.rb +26 -0
  114. data/lib/recurly/resources/export_dates.rb +18 -0
  115. data/lib/recurly/resources/export_file.rb +22 -0
  116. data/lib/recurly/resources/export_files.rb +18 -0
  117. data/lib/recurly/resources/fraud_info.rb +22 -0
  118. data/lib/recurly/resources/invoice.rb +146 -0
  119. data/lib/recurly/resources/invoice_address.rb +54 -0
  120. data/lib/recurly/resources/invoice_collection.rb +22 -0
  121. data/lib/recurly/resources/invoice_mini.rb +30 -0
  122. data/lib/recurly/resources/item.rb +82 -0
  123. data/lib/recurly/resources/item_mini.rb +34 -0
  124. data/lib/recurly/resources/line_item.rb +198 -0
  125. data/lib/recurly/resources/line_item_list.rb +26 -0
  126. data/lib/recurly/resources/measured_unit.rb +46 -0
  127. data/lib/recurly/resources/payment_method.rb +66 -0
  128. data/lib/recurly/resources/plan.rb +118 -0
  129. data/lib/recurly/resources/plan_hosted_pages.rb +26 -0
  130. data/lib/recurly/resources/plan_mini.rb +26 -0
  131. data/lib/recurly/resources/plan_pricing.rb +22 -0
  132. data/lib/recurly/resources/pricing.rb +18 -0
  133. data/lib/recurly/resources/settings.rb +22 -0
  134. data/lib/recurly/resources/shipping_address.rb +82 -0
  135. data/lib/recurly/resources/shipping_method.rb +46 -0
  136. data/lib/recurly/resources/shipping_method_mini.rb +26 -0
  137. data/lib/recurly/resources/site.rb +54 -0
  138. data/lib/recurly/resources/subscription.rb +174 -0
  139. data/lib/recurly/resources/subscription_add_on.rb +66 -0
  140. data/lib/recurly/resources/subscription_add_on_tier.rb +18 -0
  141. data/lib/recurly/resources/subscription_change.rb +78 -0
  142. data/lib/recurly/resources/subscription_change_preview.rb +78 -0
  143. data/lib/recurly/resources/subscription_shipping.rb +26 -0
  144. data/lib/recurly/resources/tax_info.rb +22 -0
  145. data/lib/recurly/resources/tier.rb +18 -0
  146. data/lib/recurly/resources/transaction.rb +158 -0
  147. data/lib/recurly/resources/transaction_error.rb +38 -0
  148. data/lib/recurly/resources/transaction_payment_gateway.rb +26 -0
  149. data/lib/recurly/resources/unique_coupon_code.rb +50 -0
  150. data/lib/recurly/resources/usage.rb +70 -0
  151. data/lib/recurly/resources/user.rb +42 -0
  152. data/lib/recurly/resources.rb +18 -0
  153. data/lib/recurly/schema/file_parser.rb +13 -0
  154. data/lib/recurly/schema/json_parser.rb +72 -0
  155. data/lib/recurly/schema/request_caster.rb +60 -0
  156. data/lib/recurly/schema/resource_caster.rb +46 -0
  157. data/lib/recurly/schema/schema_factory.rb +48 -0
  158. data/lib/recurly/schema/schema_validator.rb +144 -0
  159. data/lib/recurly/schema.rb +156 -0
  160. data/lib/recurly/version.rb +1 -15
  161. data/lib/recurly.rb +15 -137
  162. data/openapi/api.yaml +21024 -0
  163. data/recurly.gemspec +39 -0
  164. data/scripts/build +5 -0
  165. data/scripts/bump +11 -0
  166. data/scripts/changelog +14 -0
  167. data/scripts/clean +6 -0
  168. data/scripts/format +12 -0
  169. data/scripts/prepare-release +36 -0
  170. data/scripts/release +32 -0
  171. data/scripts/test +15 -0
  172. metadata +206 -168
  173. data/lib/recurly/account.rb +0 -169
  174. data/lib/recurly/account_balance.rb +0 -21
  175. data/lib/recurly/add_on.rb +0 -30
  176. data/lib/recurly/address.rb +0 -25
  177. data/lib/recurly/adjustment.rb +0 -76
  178. data/lib/recurly/api/errors.rb +0 -206
  179. data/lib/recurly/api/net_http_adapter.rb +0 -111
  180. data/lib/recurly/api.rb +0 -101
  181. data/lib/recurly/billing_info.rb +0 -80
  182. data/lib/recurly/coupon.rb +0 -134
  183. data/lib/recurly/credit_payment.rb +0 -28
  184. data/lib/recurly/custom_field.rb +0 -15
  185. data/lib/recurly/delivery.rb +0 -19
  186. data/lib/recurly/error.rb +0 -13
  187. data/lib/recurly/gift_card.rb +0 -79
  188. data/lib/recurly/helper.rb +0 -51
  189. data/lib/recurly/invoice.rb +0 -268
  190. data/lib/recurly/invoice_collection.rb +0 -14
  191. data/lib/recurly/js.rb +0 -14
  192. data/lib/recurly/juris_detail.rb +0 -14
  193. data/lib/recurly/measured_unit.rb +0 -16
  194. data/lib/recurly/money.rb +0 -120
  195. data/lib/recurly/plan.rb +0 -40
  196. data/lib/recurly/purchase.rb +0 -219
  197. data/lib/recurly/redemption.rb +0 -46
  198. data/lib/recurly/resource/association.rb +0 -16
  199. data/lib/recurly/resource/errors.rb +0 -20
  200. data/lib/recurly/resource/pager.rb +0 -314
  201. data/lib/recurly/shipping_address.rb +0 -22
  202. data/lib/recurly/subscription/add_ons.rb +0 -77
  203. data/lib/recurly/subscription.rb +0 -325
  204. data/lib/recurly/subscription_add_on.rb +0 -50
  205. data/lib/recurly/tax_detail.rb +0 -14
  206. data/lib/recurly/tax_type.rb +0 -12
  207. data/lib/recurly/transaction/errors.rb +0 -107
  208. data/lib/recurly/transaction.rb +0 -116
  209. data/lib/recurly/usage.rb +0 -24
  210. data/lib/recurly/webhook/account_notification.rb +0 -10
  211. data/lib/recurly/webhook/billing_info_updated_notification.rb +0 -6
  212. data/lib/recurly/webhook/canceled_account_notification.rb +0 -6
  213. data/lib/recurly/webhook/canceled_subscription_notification.rb +0 -6
  214. data/lib/recurly/webhook/closed_credit_invoice_notification.rb +0 -6
  215. data/lib/recurly/webhook/closed_invoice_notification.rb +0 -6
  216. data/lib/recurly/webhook/credit_payment_notification.rb +0 -12
  217. data/lib/recurly/webhook/dunning_notification.rb +0 -14
  218. data/lib/recurly/webhook/expired_subscription_notification.rb +0 -6
  219. data/lib/recurly/webhook/failed_charge_invoice_notification.rb +0 -6
  220. data/lib/recurly/webhook/failed_payment_notification.rb +0 -6
  221. data/lib/recurly/webhook/gift_card_notification.rb +0 -8
  222. data/lib/recurly/webhook/invoice_notification.rb +0 -12
  223. data/lib/recurly/webhook/new_account_notification.rb +0 -6
  224. data/lib/recurly/webhook/new_charge_invoice_notification.rb +0 -6
  225. data/lib/recurly/webhook/new_credit_invoice_notification.rb +0 -6
  226. data/lib/recurly/webhook/new_credit_payment_notification.rb +0 -6
  227. data/lib/recurly/webhook/new_dunning_event_notification.rb +0 -6
  228. data/lib/recurly/webhook/new_invoice_notification.rb +0 -6
  229. data/lib/recurly/webhook/new_subscription_notification.rb +0 -6
  230. data/lib/recurly/webhook/new_usage_notification.rb +0 -8
  231. data/lib/recurly/webhook/notification.rb +0 -18
  232. data/lib/recurly/webhook/paid_charge_invoice_notification.rb +0 -6
  233. data/lib/recurly/webhook/past_due_charge_invoice_notification.rb +0 -6
  234. data/lib/recurly/webhook/past_due_invoice_notification.rb +0 -6
  235. data/lib/recurly/webhook/processing_charge_invoice_notification.rb +0 -6
  236. data/lib/recurly/webhook/processing_credit_invoice_notification.rb +0 -6
  237. data/lib/recurly/webhook/processing_invoice_notification.rb +0 -6
  238. data/lib/recurly/webhook/processing_payment_notification.rb +0 -6
  239. data/lib/recurly/webhook/purchased_gift_card_notification.rb +0 -7
  240. data/lib/recurly/webhook/reactivated_account_notification.rb +0 -6
  241. data/lib/recurly/webhook/redeemed_gift_card_notification.rb +0 -7
  242. data/lib/recurly/webhook/renewed_subscription_notification.rb +0 -6
  243. data/lib/recurly/webhook/reopened_charge_invoice_notification.rb +0 -6
  244. data/lib/recurly/webhook/reopened_credit_invoice_notification.rb +0 -6
  245. data/lib/recurly/webhook/scheduled_payment_notification.rb +0 -6
  246. data/lib/recurly/webhook/subscription_notification.rb +0 -12
  247. data/lib/recurly/webhook/successful_payment_notification.rb +0 -6
  248. data/lib/recurly/webhook/successful_refund_notification.rb +0 -6
  249. data/lib/recurly/webhook/transaction_authorized_notification.rb +0 -6
  250. data/lib/recurly/webhook/transaction_notification.rb +0 -12
  251. data/lib/recurly/webhook/updated_account_notification.rb +0 -6
  252. data/lib/recurly/webhook/updated_balance_gift_card_notification.rb +0 -7
  253. data/lib/recurly/webhook/updated_subscription_notification.rb +0 -6
  254. data/lib/recurly/webhook/void_payment_notification.rb +0 -6
  255. data/lib/recurly/webhook/voided_credit_invoice_notification.rb +0 -6
  256. data/lib/recurly/webhook/voided_credit_payment_notification.rb +0 -6
  257. data/lib/recurly/webhook.rb +0 -88
  258. data/lib/recurly/xml/nokogiri.rb +0 -58
  259. data/lib/recurly/xml/rexml.rb +0 -50
  260. data/lib/recurly/xml.rb +0 -120
@@ -1,169 +0,0 @@
1
- module Recurly
2
- # Accounts are core to managing your customers inside of Recurly.
3
- # The account object stores the entire Recurly history of your customer and acts as the entry point
4
- # for working with a customer's billing information, subscription data, transactions, invoices and more.
5
- #
6
- # Recurly Documentation: https://dev.recurly.com/docs/account-object
7
- class Account < Resource
8
- # @macro [attach] scope
9
- # @scope class
10
- # @return [Pager<Account>] A pager that yields +$1+ accounts.
11
- scope :active, state: :active
12
- scope :closed, state: :closed
13
- scope :subscriber, state: :subscriber
14
- scope :non_subscriber, state: :non_subscriber
15
- scope :past_due, state: :past_due
16
-
17
- # @return [Pager<Adjustment>, []] A pager that yields Adjustments for persisted
18
- has_many :adjustments
19
-
20
- # @return [Pager<Invoice>, []] A pager that yields Invoices for persisted
21
- has_many :invoices
22
-
23
- # @return [Pager<Subscription>, []] A pager that yields Subscriptions for persisted
24
- has_many :subscriptions
25
-
26
- # @return [Pager<Transaction>, []] A pager that yields Transaction for persisted
27
- has_many :transactions
28
-
29
- # @return [Pager<Redemption>, []] A pager that yields Redemptions for persisted
30
- has_many :redemptions
31
-
32
- # @return [Pager<ShippingAddress>, [ShippingAddress], []] A pager that yields ShippingAddresses;
33
- # or a list of ShippingAddresses if set by the programmer
34
- has_many :shipping_addresses, readonly: false
35
-
36
- # @return [BillingInfo, nil]
37
- has_one :billing_info, readonly: false
38
-
39
- # @return [AccountBalance, nil]
40
- has_one :account_balance, readonly: true
41
-
42
- # @return [Pager<CreditPayment>, []]
43
- has_many :credit_payments, class_name: :CreditPayment, readonly: true
44
-
45
- # @return [[CustomField], []]
46
- has_many :custom_fields, class_name: :CustomField, readonly: false
47
-
48
- # Get's the first redemption given a coupon code
49
- # @deprecated Use #{redemptions} instead
50
- # @param coupon_code [String] The coupon code for the redemption
51
- def redemption(coupon_code)
52
- redemptions.detect { |r| r.coupon_code == coupon_code }
53
- end
54
-
55
- define_attribute_methods %w(
56
- account_code
57
- state
58
- username
59
- email
60
- cc_emails
61
- first_name
62
- last_name
63
- company_name
64
- accept_language
65
- hosted_login_token
66
- vat_number
67
- address
68
- tax_exempt
69
- entity_use_code
70
- created_at
71
- updated_at
72
- closed_at
73
- vat_location_valid
74
- has_live_subscription
75
- has_active_subscription
76
- has_future_subscription
77
- has_canceled_subscription
78
- has_past_due_invoice
79
- has_paused_subscription
80
- preferred_locale
81
- )
82
- alias to_param account_code
83
-
84
- # Creates an invoice from the pending charges on the account.
85
- # Raises an error if it fails.
86
- #
87
- # @return [InvoiceCollection] A newly-created invoice.
88
- # @raise [Invalid] Raised if the account cannot be invoiced.
89
- def invoice!(attrs={})
90
- InvoiceCollection.from_response API.post(invoices.uri, attrs.empty? ? nil : Invoice.to_xml(attrs))
91
- rescue Recurly::API::UnprocessableEntity => e
92
- raise Invalid, e.message
93
- end
94
-
95
- # Builds an invoice from the pending charges on the account but does not persist the invoice.
96
- # Raises an error if it fails.
97
- #
98
- # @return [InvoiceCollection] The newly-built invoice that has not been persisted.
99
- # @raise [Invalid] Raised if the account cannot be invoiced.
100
- def build_invoice
101
- InvoiceCollection.from_response API.post("#{invoices.uri}/preview")
102
- rescue Recurly::API::UnprocessableEntity => e
103
- raise Invalid, e.message
104
- end
105
-
106
- # Reopen an account.
107
- #
108
- # @return [true, false] +true+ when successful, +false+ when unable to
109
- # (e.g., the account is already opwn), and may raise an exception if the
110
- # attempt fails.
111
- def reopen
112
- return false unless link? :reopen
113
- reload follow_link :reopen
114
- true
115
- end
116
-
117
- # Verify a cvv code for the account's billing info.
118
- #
119
- # @example
120
- # acct = Recurly::Account.find('benjamin-du-monde')
121
- # begin
122
- # # If successful, returned billing_info will contain
123
- # # updated billing info details.
124
- # billing_info = acct.verify_cvv!("504")
125
- # rescue Recurly::API::BadRequest => e
126
- # e.message # => "This credit card has too many cvv check attempts."
127
- # rescue Recurly::Transaction::Error => e
128
- # # this will be the errors coming back from gateway
129
- # e.transaction_error_code # => "fraud_security_code"
130
- # e.gateway_error_code # => "fraud"
131
- # rescue Recurly::Resource::Invalid => e
132
- # e.message # => "verification_value must be three digits"
133
- # end
134
- #
135
- # @param [String] verification_value The CVV code to check
136
- # @return [BillingInfo] The updated billing info
137
- # @raise [Recurly::Transaction::Error] A Transaction Error will be raised if the gateway declines
138
- # the cvv code.
139
- # @raise [API::BadRequest] A BadRequest error will be raised if you attempt to check too many times
140
- # and are locked out.
141
- # @raise [Resource::Invalid] An Invalid Error will be raised if you send an invalid request (such as
142
- # a value that is not a propert verification number).
143
- def verify_cvv!(verification_value)
144
- bi = BillingInfo.new(verification_value: verification_value)
145
- bi.uri = "#{path}/billing_info/verify_cvv"
146
- bi.save!
147
- bi
148
- end
149
-
150
- def changed_attributes
151
- attrs = super
152
- if address.respond_to?(:changed?) && address.changed?
153
- attrs['address'] = address
154
- end
155
- if custom_fields.any?(&:changed?)
156
- attrs['custom_fields'] = custom_fields.select(&:changed?)
157
- end
158
- attrs
159
- end
160
-
161
- private
162
-
163
- def xml_keys
164
- keys = super
165
- keys << 'account_code' if account_code? && !account_code_changed?
166
- keys.sort
167
- end
168
- end
169
- end
@@ -1,21 +0,0 @@
1
- module Recurly
2
- # The AccountBalance object contains some information about the account's balance.
3
- # It exists to give us parity with the v1 API which used to include this information with
4
- # the {Account}. You can get an account's balance by calling {Account#account_balance} on an account instance.
5
- #
6
- # Recurly Documentation: https://dev.recurly.com/docs/lookup-account-balance
7
- class AccountBalance < Resource
8
- # @return [Account, nil]
9
- has_one :account, readonly: true
10
-
11
- define_attribute_methods %w(
12
- past_due
13
- balance_in_cents
14
- )
15
-
16
- # This object does not represent a model on the server side
17
- # so we do not need to expose these methods.
18
- protected(*%w(save save!))
19
- private_class_method(*%w(all find_each first paginate scoped where create! create))
20
- end
21
- end
@@ -1,30 +0,0 @@
1
- module Recurly
2
- class AddOn < Resource
3
- # @return [Plan]
4
- belongs_to :plan
5
-
6
- define_attribute_methods %w(
7
- add_on_code
8
- name
9
- accounting_code
10
- default_quantity
11
- unit_amount_in_cents
12
- display_quantity_on_hosted_page
13
- tax_code
14
- add_on_type
15
- measured_unit_id
16
- optional
17
- usage_type
18
- usage_percentage
19
- revenue_schedule_type
20
- created_at
21
- updated_at
22
- )
23
- alias to_param add_on_code
24
- alias quantity default_quantity
25
-
26
- # Add-ons are only writeable and readable through {Plan} instances.
27
- embedded!
28
- private_class_method :find
29
- end
30
- end
@@ -1,25 +0,0 @@
1
- module Recurly
2
- class Address < Resource
3
- define_attribute_methods %w(
4
- first_name
5
- last_name
6
- name_on_account
7
- company
8
- address1
9
- address2
10
- city
11
- state
12
- zip
13
- country
14
- phone
15
- geo_code
16
- )
17
-
18
- # This ensures every attribute is rendered
19
- # when updating. The Address object does not
20
- # accept partial updates on the server
21
- def xml_keys
22
- attributes.keys
23
- end
24
- end
25
- end
@@ -1,76 +0,0 @@
1
- module Recurly
2
- # The history of your customer's Recurly account can be tracked through adjustments, made up of credits and charges.
3
- #
4
- # Recurly Documentation: https://dev.recurly.com/docs/adjustment-object
5
- class Adjustment < Resource
6
- # @macro [attach] scope
7
- # @scope class
8
- # @return [Pager<Adjustment>] a pager that yields +$1+.
9
- scope :charges, type: 'charge'
10
- scope :credits, type: 'credit'
11
- scope :pending, state: 'pending'
12
- scope :invoiced, state: 'invoiced'
13
-
14
- # @return [Account, nil]
15
- belongs_to :account
16
- # @return [Invoice, nil]
17
- belongs_to :invoice
18
- # @return [Subscription, nil]
19
- belongs_to :subscription
20
-
21
- # @return [Pager<Adjustment>, []]
22
- has_many :credit_adjustments, class_name: :Adjustment, readonly: true
23
-
24
- # @return [ShippingAddress, nil]
25
- has_one :shipping_address, class_name: :ShippingAddress, readonly: false
26
-
27
- define_attribute_methods %w(
28
- uuid
29
- state
30
- description
31
- accounting_code
32
- origin
33
- unit_amount_in_cents
34
- quantity
35
- discount_in_cents
36
- total_in_cents
37
- currency
38
- product_code
39
- start_date
40
- end_date
41
- created_at
42
- updated_at
43
- quantity_remaining
44
- revenue_schedule_type
45
- tax_in_cents
46
- tax_type
47
- tax_region
48
- tax_rate
49
- tax_exempt
50
- tax_code
51
- tax_details
52
- tax_types
53
- proration_rate
54
- credit_reason_code
55
- original_adjustment_uuid
56
- shipping_address_id
57
- )
58
- alias to_param uuid
59
-
60
- # @return ["charge", "credit", nil] The type of adjustment.
61
- attr_reader :type
62
-
63
- # Adjustments should be built through {Account} instances.
64
- #
65
- # @return [Adjustment] A new adjustment.
66
- # @example
67
- # account.adjustments.new attributes
68
- # @see Resource#initialize
69
- def initialize(attributes = {})
70
- super({ :currency => Recurly.default_currency }.merge attributes)
71
- end
72
-
73
- # Adjustments are only writeable through an {Account} instance.
74
- embedded! true
75
- end
76
- end
@@ -1,206 +0,0 @@
1
- require 'cgi'
2
-
3
- module Recurly
4
- class API
5
- # The superclass to all errors that occur when making an API request.
6
- class ResponseError < Error
7
- attr_reader :request
8
- attr_reader :response
9
-
10
- def initialize request, response
11
- @request, @response = request, response
12
- end
13
-
14
- def code
15
- response.code.to_i if response
16
- end
17
-
18
- def to_s
19
- if description
20
- return CGI.unescapeHTML [description, details].compact.join(' ')
21
- end
22
-
23
- return super unless code
24
- "%d %s (%s %s)" % [
25
- code, http_error, request.method, API.base_uri + request.path
26
- ]
27
- end
28
-
29
- def symbol
30
- xml and xml.root and xml.text '/error/symbol'
31
- end
32
-
33
- def description
34
- xml and xml.root and xml.text '/error/description'
35
- end
36
-
37
- def details
38
- xml and xml.root and xml.text '/error/details'
39
- end
40
-
41
- private
42
-
43
- def http_error
44
- Helper.demodulize self.class.name.gsub(/([a-z])([A-Z])/, '\1 \2')
45
- end
46
-
47
- def xml
48
- @xml ||= begin
49
- XML.new(response.body) if response and response.body and not response.body.empty?
50
- end
51
- end
52
- end
53
-
54
- # === 3xx Redirection
55
- #
56
- # Not an error, per se, but should result in one in the normal course of
57
- # API interaction.
58
- class Redirection < ResponseError
59
- end
60
-
61
- # === 304 Not Modified
62
- #
63
- # Catchably raised when a request is made with an ETag.
64
- class NotModified < ResponseError
65
- end
66
-
67
- # === 4xx Client Error
68
- #
69
- # The superclass to all client errors (responses with status code 4xx).
70
- class ClientError < ResponseError
71
- end
72
-
73
- # === 400 Bad Request
74
- #
75
- # The request was invalid or could not be understood by the server.
76
- # Resubmitting the request will likely result in the same error.
77
- class BadRequest < ClientError
78
- end
79
-
80
- # === 401 Unauthorized
81
- #
82
- # The API key is missing or invalid for the given request.
83
- class Unauthorized < ClientError
84
- def description
85
- response.body.strip
86
- end
87
- end
88
-
89
- # === 402 Payment Required
90
- #
91
- # Your Recurly account is in production mode but is not in good standing.
92
- # Please pay any outstanding invoices.
93
- class PaymentRequired < ClientError
94
- end
95
-
96
- # === 403 Forbidden
97
- #
98
- # The login is attempting to perform an action it does not have privileges
99
- # to access. The login credentials are correct.
100
- class Forbidden < ClientError
101
- end
102
-
103
- # === 404 Not Found
104
- #
105
- # The resource was not found. This may be returned if the given account
106
- # code or subscription plan does not exist. The response body will explain
107
- # which resource was not found.
108
- class NotFound < ClientError
109
- end
110
-
111
- # === 405 Method Not Allowed
112
- #
113
- # A method was attempted where it is not allowed.
114
- #
115
- # If this is raised, there may be a bug with the client library or with
116
- # the server. Please contact support@recurly.com or
117
- # {file a bug}[https://github.com/recurly/recurly-client-ruby/issues].
118
- class MethodNotAllowed < ClientError
119
- end
120
-
121
- # === 406 Not Acceptable
122
- #
123
- # The request content type was not acceptable.
124
- #
125
- # If this is raised, there may be a bug with the client library or with
126
- # the server. Please contact support@recurly.com or
127
- # {file a bug}[https://github.com/recurly/recurly-client-ruby/issues].
128
- class NotAcceptable < ClientError
129
- end
130
-
131
- # === 412 Precondition Failed
132
- #
133
- # The request was unsuccessful because a condition was not met. For
134
- # example, this message may be returned if you attempt to cancel a
135
- # subscription for an account that has no subscription.
136
- class PreconditionFailed < ClientError
137
- end
138
-
139
- # === 415 Unsupported Media Type
140
- #
141
- # The request body was not recognized as XML.
142
- #
143
- # If this is raised, there may be a bug with the client library or with
144
- # the server. Please contact support@recurly.com or
145
- # {file a bug}[https://github.com/recurly/recurly-client-ruby/issues].
146
- class UnsupportedMediaType < ClientError
147
- end
148
-
149
- # === 422 Unprocessable Entity
150
- #
151
- # Could not process a POST or PUT request because the request is invalid.
152
- # See the response body for more details.
153
- class UnprocessableEntity < ClientError
154
- end
155
-
156
- # === 5xx Server Error
157
- #
158
- # The superclass to all server errors (responses with status code 5xx).
159
- class ServerError < ResponseError
160
- end
161
-
162
- # === 500 Internal Server Error
163
- #
164
- # The server encountered an error while processing your request and failed.
165
- class InternalServerError < ServerError
166
- end
167
-
168
- # === 502 Gateway Error
169
- #
170
- # The load balancer or web server had trouble connecting to the Recurly.
171
- # Please try the request again.
172
- class GatewayError < ServerError
173
- end
174
-
175
- # === 503 Service Unavailable
176
- #
177
- # The service is temporarily unavailable. Please try the request again.
178
- class ServiceUnavailable < ServerError
179
- end
180
-
181
- # Error mapping by status code.
182
- ERRORS = Hash.new { |hash, code|
183
- unless hash.key? code
184
- case code
185
- when 400...500 then ClientError
186
- when 500...600 then ServerError
187
- else ResponseError
188
- end
189
- end
190
- }.update(
191
- 304 => NotModified,
192
- 400 => BadRequest,
193
- 401 => Unauthorized,
194
- 402 => PaymentRequired,
195
- 403 => Forbidden,
196
- 404 => NotFound,
197
- 406 => NotAcceptable,
198
- 412 => PreconditionFailed,
199
- 415 => UnsupportedMediaType,
200
- 422 => UnprocessableEntity,
201
- 500 => InternalServerError,
202
- 502 => GatewayError,
203
- 503 => ServiceUnavailable
204
- ).freeze
205
- end
206
- end
@@ -1,111 +0,0 @@
1
- require 'cgi'
2
- require 'net/https'
3
-
4
- module Recurly
5
- class API
6
- module Net
7
- module HTTPAdapter
8
- # A hash of Net::HTTP settings configured before the request.
9
- #
10
- # @return [Hash]
11
- def net_http
12
- @net_http ||= {}
13
- end
14
-
15
- # Used to store any Net::HTTP settings.
16
- #
17
- # @example
18
- # Recurly::API.net_http = {
19
- # :verify_mode => OpenSSL::SSL::VERIFY_PEER,
20
- # :ca_path => "/etc/ssl/certs",
21
- # :ca_file => "/opt/local/share/curl/curl-ca-bundle.crt"
22
- # }
23
- attr_writer :net_http
24
-
25
- private
26
-
27
- METHODS = {
28
- :head => ::Net::HTTP::Head,
29
- :get => ::Net::HTTP::Get,
30
- :post => ::Net::HTTP::Post,
31
- :put => ::Net::HTTP::Put,
32
- :delete => ::Net::HTTP::Delete
33
- }
34
-
35
- def request method, uri, options = {}
36
- head = headers.dup
37
- head.update options[:head] if options[:head]
38
- head.delete_if { |_, value| value.nil? }
39
- uri = base_uri + uri
40
- if options[:params] && !options[:params].empty?
41
- pairs = options[:params].map { |key, value|
42
- "#{CGI.escape key.to_s}=#{CGI.escape value.to_s}"
43
- }
44
- uri += "?#{pairs.join '&'}"
45
- end
46
- self.validate_uri!(uri)
47
- request = METHODS[method].new uri.request_uri, head
48
- request.basic_auth(*[Recurly.api_key, nil].flatten[0, 2])
49
- if options[:body]
50
- request['Content-Type'] = content_type
51
- request.body = options[:body]
52
- end
53
- if options[:etag]
54
- request['If-None-Match'] = options[:etag]
55
- end
56
- if options[:format]
57
- request['Accept'] = FORMATS[options[:format]]
58
- end
59
- if options[:locale]
60
- request['Accept-Language'] = options[:locale]
61
- end
62
- http = ::Net::HTTP.new uri.host, uri.port
63
- http.use_ssl = uri.scheme == 'https'
64
- net_http.each_pair { |key, value| http.send "#{key}=", value }
65
-
66
- if Recurly.logger
67
- Recurly.log :info, "===> %s %s" % [request.method, uri]
68
- headers = request.to_hash
69
- headers['authorization'] &&= ['Basic [FILTERED]']
70
- Recurly.log :debug, headers.inspect
71
- if request.body && !request.body.empty?
72
- Recurly.log :debug, XML.filter(request.body)
73
- end
74
- start_time = Time.now
75
- end
76
-
77
- response = http.start { http.request request }
78
- code = response.code.to_i
79
-
80
- if Recurly.logger
81
- latency = (Time.now - start_time) * 1_000
82
- level = case code
83
- when 200...300 then :info
84
- when 300...400 then :warn
85
- when 400...500 then :error
86
- else :fatal
87
- end
88
- Recurly.log level, "<=== %d %s (%.1fms)" % [
89
- code,
90
- response.class.name[9, response.class.name.length].gsub(
91
- /([a-z])([A-Z])/, '\1 \2'
92
- ),
93
- latency
94
- ]
95
- Recurly.log :debug, response.to_hash.inspect
96
- Recurly.log :debug, response.body if response.body
97
- end
98
-
99
- case code
100
- when 200...300 then response
101
- else raise ERRORS[code].new request, response
102
- end
103
- rescue Errno::ECONNREFUSED => e
104
- raise Error, e.message
105
- end
106
- end
107
- end
108
-
109
- extend Net::HTTPAdapter
110
- end
111
- end