recurly 2.20.5 → 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 +132 -199
  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 -101
  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 -86
  125. data/lib/recurly/helper.rb +0 -51
  126. data/lib/recurly/invoice.rb +0 -355
  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 -240
  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
@@ -1,62 +0,0 @@
1
- module Recurly
2
- class ExternalSubscription < Resource
3
-
4
- # @return [Account]
5
- belongs_to :account
6
-
7
- # @return [ExternalProductReference]
8
- belongs_to :external_product_reference
9
-
10
- # @return [ExternalInvoice]
11
- has_many :external_invoices
12
-
13
- # @return [ExternalPaymentPhase]
14
- has_many :external_payment_phases
15
-
16
- define_attribute_methods %w(
17
- account
18
- uuid
19
- external_id
20
- external_product_reference
21
- quantity
22
- activated_at
23
- expires_at
24
- created_at
25
- updated_at
26
- last_purchased
27
- auto_renew
28
- app_identifier
29
- state
30
- trial_started_at
31
- trial_ends_at
32
- canceled_at
33
- in_grace_period
34
- imported
35
- test
36
- )
37
-
38
- # We do not expose PUT or POST in the v2 API.
39
- protected(*%w(save save!))
40
- private_class_method(*%w(create! create))
41
-
42
- def get_external_payment_phases
43
- Pager.new(Recurly::ExternalPaymentPhase, uri: "#{path}/external_payment_phases", parent: self)
44
- rescue Recurly::API::UnprocessableEntity => e
45
- raise Invalid, e.message
46
- end
47
-
48
- def get_external_payment_phase(external_payment_phase_uuid)
49
- ExternalPaymentPhase.from_response API.get("#{path}/external_payment_phases/#{external_payment_phase_uuid}")
50
- rescue Recurly::API::UnprocessableEntity => e
51
- raise Invalid, e.message
52
- end
53
-
54
- def self.find_by_external_id(external_id)
55
- self.find("external-id-#{external_id}")
56
- end
57
-
58
- def self.find_by_uuid(uuid)
59
- self.find("uuid-#{uuid}")
60
- end
61
- end
62
- end
@@ -1,10 +0,0 @@
1
- module Recurly
2
- # Additional attributes to pass to the gateway
3
- class GatewayAttribute < Resource
4
- belongs_to :billing_info, class_name: :BillingInfo
5
-
6
- define_attribute_methods %w(
7
- account_reference,
8
- )
9
- end
10
- end
@@ -1,16 +0,0 @@
1
- module Recurly
2
- class GeneralLedgerAccount < Resource
3
- belongs_to :site
4
-
5
- define_attribute_methods %w(
6
- id
7
- code
8
- description
9
- account_type
10
- )
11
-
12
- def self.collection_path
13
- "general_ledger_accounts"
14
- end
15
- end
16
- end
@@ -1,86 +0,0 @@
1
- module Recurly
2
- class GiftCard < Resource
3
- # @return [Invoice, nil]
4
- belongs_to :invoice
5
-
6
- # @return [Account, nil] The Account belonging to the gifter
7
- belongs_to :gifter_account, class_name: :Account, readonly: false
8
-
9
- # @return [Account, nil] The Account belonging to the recipient of the gift
10
- belongs_to :recipient_account, class_name: :Account, readonly: false
11
-
12
- # @return [Delivery, nil] Delivery information of the recipient.
13
- has_one :delivery, class_name: :Delivery, readonly: false
14
-
15
- # @return [Invoice, nil] The credit invoice for the gift card redemption.
16
- has_one :redemption_invoice, class_name: :Invoice, readonly: true
17
-
18
- # @return [Invoice, nil] The charge invoice for the gift card redemption.
19
- has_one :purchase_invoice, class_name: :Invoice, readonly: true
20
-
21
- # @return [BillingInfo, nil]
22
- has_one :billing_info, class_name: :BillingInfo, readonly: false
23
-
24
- define_attribute_methods %w(
25
- balance_in_cents
26
- currency
27
- created_at
28
- delivered_at
29
- id
30
- product_code
31
- redeemed_at
32
- redemption_code
33
- unit_amount_in_cents
34
- updated_at
35
- canceled_at
36
- gifter_account_code
37
- recipient_account_code
38
- invoice_number
39
- tax_service_opt_out
40
- ) + RevRec::PRODUCT_ATTRIBUTES
41
- alias to_param id
42
-
43
- # Preview a GiftCard given some attributes
44
- #
45
- # @param [Hash] attributes for the gift card
46
- # @return [GiftCard] The resulting preview GiftCard
47
- def self.preview(attributes = {})
48
- new(attributes) { |record| record.preview }
49
- end
50
-
51
- # Preview the GiftCard. Runs and validates the GiftCard but
52
- # does not persist it. Errors are applied to the GiftCard if there
53
- # are any errors.
54
- def preview
55
- clear_errors
56
- @response = API.send(:post, "#{path}/preview", to_xml)
57
- reload response
58
- rescue API::UnprocessableEntity => e
59
- apply_errors e
60
- end
61
-
62
- # Redeem this GiftCard on the given account.
63
- #
64
- # @param [String] Recipient's account code
65
- def redeem(recipient_account_code)
66
- clear_errors
67
- xml = <<-XML
68
- <recipient_account>
69
- <account_code>#{recipient_account_code}</account_code>
70
- </recipient_account>
71
- XML
72
- @response = API.send(:post, "#{self.class.collection_path}/#{redemption_code}/redeem", xml)
73
- reload response
74
- rescue API::UnprocessableEntity => e
75
- apply_errors e
76
- end
77
-
78
- private
79
-
80
- def xml_keys
81
- keys = super
82
- keys << 'redemption_code' if redemption_code? && !redemption_code_changed?
83
- keys.sort
84
- end
85
- end
86
- end
@@ -1,51 +0,0 @@
1
- module Recurly
2
- module Helper
3
- def camelize underscored_word
4
- underscored_word.to_s.gsub(/(?:^|_)(.)/) { $1.upcase }
5
- end
6
-
7
- def classify table_name
8
- camelize singularize(table_name.to_s.sub(/.*\./, ''))
9
- end
10
-
11
- def demodulize class_name_in_module
12
- class_name_in_module.to_s.sub(/^.*::/, '')
13
- end
14
-
15
- def pluralize word
16
- word.to_s.sub(/([^s])$/, '\1s')
17
- end
18
-
19
- def singularize word
20
- word = word.to_s
21
- return word if word.end_with?('address')
22
- return "shipping_address" if word == "shipping_addresses"
23
- word.sub(/s$/, '').sub(/ie$/, 'y')
24
- end
25
-
26
- def underscore camel_cased_word
27
- word = camel_cased_word.to_s.dup
28
- word.gsub!(/::/, '/')
29
- word.gsub!(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
30
- word.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
31
- word.tr! "-", "_"
32
- word.downcase!
33
- word
34
- end
35
-
36
- def hash_with_indifferent_read_access base = {}
37
- indifferent = Hash.new { |hash, key| hash[key.to_s] if key.is_a? Symbol }
38
- base.each_pair { |key, value| indifferent[key.to_s] = value }
39
- indifferent
40
- end
41
-
42
- def stringify_keys! hash
43
- hash.keys.each do |key|
44
- stringify_keys! hash[key] if hash[key].is_a? Hash
45
- hash[key.to_s] = hash.delete key if key.is_a? Symbol
46
- end
47
- end
48
-
49
- extend self
50
- end
51
- end
@@ -1,355 +0,0 @@
1
- module Recurly
2
- # Invoices are created through account objects.
3
- #
4
- # Recurly Documentation: https://dev.recurly.com/docs/list-invoices
5
- #
6
- # @example
7
- # account = Account.find(account_code)
8
- # account.invoice!
9
- class Invoice < Resource
10
- # @macro [attach] scope
11
- # @scope class
12
- # @return [Pager<Invoice>] A pager that yields +$1+ invoices.
13
- scope :pending, :state => :pending
14
- scope :paid, :state => :paid
15
- scope :failed, :state => :failed
16
- scope :past_due, :state => :past_due
17
-
18
- # These are deprecated as the states were renamed
19
- scope :open, :state => :pending
20
- scope :collected, :state => :paid
21
-
22
- # @return [Account]
23
- belongs_to :account
24
-
25
- # @return [BusinessEntity]
26
- belongs_to :business_entity
27
-
28
- # @return [Pager<Subscription>, []]
29
- has_many :subscriptions
30
-
31
- # This will only be present if the invoice has > 500 line items
32
- # @return [Pager<Adjustment>, []]
33
- has_many :all_line_items, class_name: :Adjustment
34
-
35
- # This will only be present if the invoice has > 500 transactions
36
- # @return [Pager<Transaction>, []]
37
- has_many :all_transactions, class_name: :Transaction
38
-
39
- # @return [Pager<Redemption>, []]
40
- has_many :redemptions
41
-
42
- # @return [ShippingAddress, nil]
43
- has_one :shipping_address, class_name: :ShippingAddress, readonly: true
44
-
45
- # @return [Pager<Invoice>, []]
46
- has_many :credit_invoices, class_name: :Invoice
47
-
48
- # @return [[CreditPayment]]
49
- has_many :credit_payments, class_name: :CreditPayment, readonly: true
50
-
51
- # @return [Pager<Invoice>, []]
52
- has_many :original_invoices, class_name: :Invoice, readonly: true
53
-
54
- # @return [Invoice, nil]
55
- has_one :original_invoice, class_name: :Invoice, readonly: true
56
-
57
- # @return [BillingInfo, nil]
58
- has_one :billing_info, class_name: :BillingInfo, readonly: true
59
-
60
- # Returns the first redemption in the Invoice's redemptions.
61
- # This was placed here for backwards compatibility when we went from
62
- # having a single redemption per invoice to multiple redemptions per invoice.
63
- #
64
- # @deprecated Use {#redemptions} and find the redemption you want.
65
- def redemption
66
- redemptions.first
67
- end
68
-
69
- # @return [String] The invoice number with the prefix (if there is one)
70
- def invoice_number_with_prefix
71
- "#{invoice_number_prefix}#{invoice_number}"
72
- end
73
-
74
- define_attribute_methods %w(
75
- uuid
76
- state
77
- invoice_number
78
- invoice_number_prefix
79
- po_number
80
- vat_number
81
- subtotal_in_cents
82
- tax_in_cents
83
- tax_type
84
- tax_region
85
- tax_rate
86
- total_in_cents
87
- currency
88
- created_at
89
- updated_at
90
- closed_at
91
- amount_remaining_in_cents
92
- line_items
93
- transactions
94
- terms_and_conditions
95
- vat_reverse_charge_notes
96
- customer_notes
97
- address
98
- net_terms
99
- net_terms_type
100
- collection_method
101
- tax_types
102
- refund_tax_date
103
- refund_geo_code
104
- subtotal_before_discount_in_cents
105
- attempt_next_collection_at
106
- recovery_reason
107
- discount_in_cents
108
- balance_in_cents
109
- due_on
110
- type
111
- origin
112
- credit_customer_notes
113
- refund_method
114
- subscription_id
115
- subscription_ids
116
- dunning_events_count
117
- final_dunning_event
118
- gateway_code
119
- surcharge_in_cents
120
- tax_details
121
- billing_info_uuid
122
- dunning_campaign_id
123
- refundable_total_in_cents
124
- used_tax_service
125
- business_entity_id
126
- vertex_transaction_type
127
- )
128
- alias to_param invoice_number_with_prefix
129
-
130
- def self.to_xml(attrs)
131
- invoice = new attrs
132
- invoice.to_xml
133
- end
134
-
135
- # Marks an invoice as paid successfully.
136
- #
137
- # @return [true, false] +true+ when successful, +false+ when unable to
138
- # (e.g., the invoice is no longer open).
139
- def mark_successful
140
- return false unless link? :mark_successful
141
- reload follow_link :mark_successful
142
- true
143
- end
144
-
145
- # Marks an invoice as failing collection.
146
- # Returns a new {InvoiceCollection} and does not
147
- # reload this invoice.
148
- #
149
- # @return [InvoiceCollection, false] InvoiceCollection when successful, +false+ when unable to
150
- # (e.g., the invoice is no longer open).
151
- def mark_failed
152
- return false unless link? :mark_failed
153
- InvoiceCollection.from_response follow_link(:mark_failed)
154
- rescue Recurly::API::UnprocessableEntity => e
155
- raise Invalid, e.message
156
- end
157
-
158
- # Initiate a collection attempt on an invoice.
159
- #
160
- # @example
161
- # # Optionally set transaction type
162
- # invoice.force_collect(transaction_type: 'moto')
163
- #
164
- # @param options [Hash] Optional set of details to send to collect endpoint.
165
- # @return [true, false] +true+ when successful, +false+ when unable to
166
- # (e.g., the invoice is no longer open).
167
- def force_collect(options = {})
168
- return false unless link? :force_collect
169
- http_opts = {}
170
- if body = force_collect_xml(options)
171
- http_opts[:body] = body
172
- end
173
- reload follow_link(:force_collect, http_opts)
174
- true
175
- end
176
-
177
- # Voids the invoice.
178
- #
179
- # @return [true, false] +true+ when successful, +false+ when unable to
180
- # (e.g., the invoice is no longer open).
181
- def void
182
- return false unless link? :void
183
- reload follow_link :void
184
- true
185
- end
186
-
187
- # Applies the open credit balance on the account to the invoice balance.
188
- #
189
- # @return [true, false] +true+ when successful, +false+ when unable to
190
- # (e.g., the invoice is no longer collectible).
191
- def apply_credit_balance
192
- return false unless link? :apply_credit_balance
193
- reload follow_link :apply_credit_balance
194
- true
195
- end
196
-
197
- # Posts an offline payment on this invoice
198
- #
199
- # @return [Transaction]
200
- # @raise [Error] If the transaction fails.
201
- def enter_offline_payment(attrs={})
202
- Transaction.from_response API.post("#{uri}/transactions", attrs.empty? ? nil : Transaction.to_xml(attrs))
203
- rescue Recurly::API::UnprocessableEntity => e
204
- raise Invalid, e.message
205
- end
206
-
207
- # Fetches the pdf for this invoice
208
- def pdf
209
- self.class.find(to_param, format: 'pdf')
210
- end
211
-
212
- # Refunds specific line items on the invoice.
213
- #
214
- # @return [Invoice, false] Invoice if successful, false if the invoice isn't
215
- # refundable.
216
- # @raise [Error] If the refund fails.
217
- # @param line_items [Array, nil] An array of line items to refund.
218
- # @param refund_method ["credit_first", "transaction_first", "all_transaction", "all_credit"] The method used to refund.
219
- # @param external_refund [true, false] Designates that the refund transactions created are manual.
220
- # @param credit_customer_notes [String] Adds notes to refund credit invoice.
221
- # @param payment_method [String] Creates the manual transactions with this payment method. Allowed if *external_refund* is true.
222
- # @param description [String] Sets this value as the *transaction_note* on the manual transactions created. Allowed if *external_refund* is true.
223
- # @param refunded_at [DateTime] Sets this value as the *collected_at* on the manual transactions created. Allowed if *external_refund* is true.
224
- def refund(line_items = nil, refund_method = 'credit_first', options = {})
225
- return false unless link? :refund
226
- self.class.from_response(
227
- follow_link :refund, :body => refund_line_items_to_xml(line_items, refund_method, options)
228
- )
229
- rescue Recurly::API::UnprocessableEntity => e
230
- Transaction::Error.validate! e, (self if is_a?(Transaction))
231
- raise
232
- end
233
-
234
- # Refunds the invoice for a specific amount.
235
- #
236
- # @return [Invoice, false] Invoice if successful, false if the invoice isn't
237
- # refundable.
238
- # @raise [Error] If the refund fails.
239
- # @param amount_in_cents [Integer, nil] The amount (in cents) to refund.
240
- # @param refund_method ["credit_first", "transaction_first", "all_transaction", "all_credit"] The method used to refund.
241
- # @param external_refund [true, false] Designates that the refund transactions created are manual.
242
- # @param credit_customer_notes [String] Adds notes to refund credit invoice.
243
- # @param payment_method [String] Creates the manual transactions with this payment method. Allowed if *external_refund* is true.
244
- # @param description [String] Sets this value as the *transaction_note* on the manual transactions created. Allowed if *external_refund* is true.
245
- # @param refunded_at [DateTime] Sets this value as the *collected_at* on the manual transactions created. Allowed if *external_refund* is true.
246
- def refund_amount(amount_in_cents = nil, refund_method = 'credit_first', options = {})
247
- return false unless link? :refund
248
- self.class.from_response(
249
- follow_link :refund, :body => refund_amount_to_xml(amount_in_cents, refund_method, options)
250
- )
251
- end
252
-
253
- # Refunds the invoice for a specific percentage.
254
- #
255
- # @return [Invoice, false] Invoice if successful, false if the invoice isn't
256
- # refundable.
257
- # @raise [Error] If the refund fails.
258
- # @param percentage [Integer, nil] The percentage to refund from the invoice.
259
- # @param refund_method ["credit_first", "transaction_first", "all_transaction", "all_credit"] The method used to refund.
260
- # @param external_refund [true, false] Designates that the refund transactions created are manual.
261
- # @param credit_customer_notes [String] Adds notes to refund credit invoice.
262
- # @param payment_method [String] Creates the manual transactions with this payment method. Allowed if *external_refund* is true.
263
- # @param description [String] Sets this value as the *transaction_note* on the manual transactions created. Allowed if *external_refund* is true.
264
- # @param refunded_at [DateTime] Sets this value as the *collected_at* on the manual transactions created. Allowed if *external_refund* is true.
265
- def refund_percentage(percentage = nil, refund_method = 'credit_first', options = {})
266
- return false unless link? :refund
267
- self.class.from_response(
268
- follow_link :refund, :body => refund_percentage_to_xml(percentage, refund_method, options)
269
- )
270
- end
271
-
272
- def xml_keys
273
- super - ['currency']
274
- end
275
-
276
- # Attempts to update the invoice, returning the success of the request.
277
- # Raises an error if attempting to create an invoice using this method.
278
- #
279
- # @return [true, false]
280
- # @raise [RuntimeError] Raises error if you attempt to create an invoice.
281
- # @example
282
- # invoice = Recurly::Invoice.find('1000')
283
- # invoice.po_number = '1234'
284
- # invoice.save # => true
285
- def save
286
- unless persisted?
287
- raise "Invoices can only be updated with Invoice#save. New invoices cannot be created using this method."
288
- end
289
- super
290
- end
291
-
292
- private
293
-
294
- def initialize(attributes = {})
295
- super({ :currency => Recurly.default_currency }.merge attributes)
296
- end
297
-
298
- def refund_amount_to_xml(amount_in_cents = nil, refund_method = nil, options = {})
299
- builder = XML.new("<invoice/>")
300
- builder.add_element 'refund_method', refund_method
301
- builder.add_element 'amount_in_cents', amount_in_cents
302
- options.each do |k, v|
303
- builder.add_element k.to_s, v
304
- end
305
- builder.to_s
306
- end
307
-
308
- def refund_percentage_to_xml(percentage = nil, refund_method = nil, options = {})
309
- builder = XML.new("<invoice/>")
310
- builder.add_element 'refund_method', refund_method
311
- builder.add_element 'percentage', percentage
312
- options.each do |k, v|
313
- builder.add_element k.to_s, v
314
- end
315
- builder.to_s
316
- end
317
-
318
- def refund_line_items_to_xml(line_items = nil, refund_method = nil, options = {})
319
- builder = XML.new("<invoice/>")
320
- builder.add_element 'refund_method', refund_method
321
- options.each do |k, v|
322
- builder.add_element k.to_s, v
323
- end
324
- line_items ||= []
325
- node = builder.add_element 'line_items'
326
- line_items.each do |line_item|
327
- adj_node = node.add_element 'adjustment'
328
- adj_node.add_element 'uuid', line_item[:adjustment].uuid
329
- adj_node.add_element 'quantity', line_item[:quantity] if line_item.key?(:quantity)
330
- adj_node.add_element('quantity_decimal', line_item[:quantity_decimal]) if line_item.key?(:quantity_decimal)
331
- adj_node.add_element 'percentage', line_item[:percentage] if line_item.key?(:percentage)
332
- adj_node.add_element 'amount_in_cents', line_item[:amount_in_cents] if line_item.key?(:amount_in_cents)
333
- adj_node.add_element 'prorate', line_item[:prorate]
334
- end
335
- builder.to_s
336
- end
337
-
338
- # Returns an xml body or nil given some options
339
- def force_collect_xml(options = {})
340
- if options[:transaction_type] || options[:billing_info]
341
- ForceCollect.new(options).to_xml
342
- end
343
- end
344
-
345
- # Invoices are only writeable through {Account} instances.
346
- embedded! true
347
- undef destroy
348
-
349
- # Represents a body for the force collect endpoint
350
- class ForceCollect < Resource
351
- has_one :billing_info, class_name: :BillingInfo, readonly: false
352
- define_attribute_methods %w[transaction_type]
353
- end
354
- end
355
- end
@@ -1,14 +0,0 @@
1
- module Recurly
2
- class InvoiceCollection < Resource
3
- # @return [Invoice, nil]
4
- has_one :charge_invoice, class_name: :Invoice, readonly: true
5
-
6
- # @return [[Invoice], []]
7
- has_many :credit_invoices, class_name: :Invoice, readonly: true
8
-
9
- # These are readonly resources
10
- embedded! true
11
- undef save
12
- undef destroy
13
- end
14
- end
@@ -1,14 +0,0 @@
1
- module Recurly
2
- class InvoiceTemplate < Resource
3
- has_many :accounts, class_name: :Account, readonly: true
4
-
5
- define_attribute_methods %w(
6
- uuid
7
- name
8
- code
9
- description
10
- created_at
11
- updated_at
12
- )
13
- end
14
- end
data/lib/recurly/item.rb DELETED
@@ -1,36 +0,0 @@
1
- module Recurly
2
- class Item < Resource
3
- # @return [[CustomField], []]
4
- has_many :custom_fields, class_name: :CustomField, readonly: false
5
-
6
- define_attribute_methods %w(
7
- item_code
8
- name
9
- description
10
- external_sku
11
- accounting_code
12
- revenue_schedule_type
13
- state
14
- avalara_transaction_type
15
- avalara_service_type
16
- created_at
17
- updated_at
18
- deleted_at
19
- ) + RevRec::PRODUCT_ATTRIBUTES
20
-
21
- def changed_attributes
22
- attrs = super
23
- if custom_fields.any?(&:changed?)
24
- attrs['custom_fields'] = custom_fields.select(&:changed?)
25
- end
26
- attrs
27
- end
28
-
29
- def reactivate
30
- return false unless link? :reactivate
31
- reload follow_link :reactivate
32
- true
33
- end
34
-
35
- end
36
- end
data/lib/recurly/js.rb DELETED
@@ -1,14 +0,0 @@
1
- module Recurly
2
- module JS
3
- class << self
4
- # @return [String] A public key for Recurly.js.
5
- # @raise [ConfigurationError] No public key has been set.
6
- def public_key
7
- defined? @public_key and @public_key or raise(
8
- ConfigurationError, "public_key not configured"
9
- )
10
- end
11
- attr_writer :public_key
12
- end
13
- end
14
- end
@@ -1,15 +0,0 @@
1
- module Recurly
2
- class JurisDetail < Resource
3
- define_attribute_methods %w(
4
- description
5
- jurisdiction
6
- rate
7
- tax_in_cents
8
- sub_type
9
- jurisdiction_name
10
- classification
11
- )
12
-
13
- embedded! true
14
- end
15
- end
@@ -1,16 +0,0 @@
1
- module Recurly
2
- # Measured Units are used in Recurly's usage-based billing feature.
3
- #
4
- # Recurly Documentation: https://dev.recurly.com/docs/measured-unit-object
5
- class MeasuredUnit < Resource
6
- define_attribute_methods %w(
7
- id
8
- name
9
- display_name
10
- description
11
- created_at
12
- updated_at
13
- )
14
- alias to_param id
15
- end
16
- end