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
@@ -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,85 +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
- ) + RevRec::PRODUCT_ATTRIBUTES
40
- alias to_param id
41
-
42
- # Preview a GiftCard given some attributes
43
- #
44
- # @param [Hash] attributes for the gift card
45
- # @return [GiftCard] The resulting preview GiftCard
46
- def self.preview(attributes = {})
47
- new(attributes) { |record| record.preview }
48
- end
49
-
50
- # Preview the GiftCard. Runs and validates the GiftCard but
51
- # does not persist it. Errors are applied to the GiftCard if there
52
- # are any errors.
53
- def preview
54
- clear_errors
55
- @response = API.send(:post, "#{path}/preview", to_xml)
56
- reload response
57
- rescue API::UnprocessableEntity => e
58
- apply_errors e
59
- end
60
-
61
- # Redeem this GiftCard on the given account.
62
- #
63
- # @param [String] Recipient's account code
64
- def redeem(recipient_account_code)
65
- clear_errors
66
- xml = <<-XML
67
- <recipient_account>
68
- <account_code>#{recipient_account_code}</account_code>
69
- </recipient_account>
70
- XML
71
- @response = API.send(:post, "#{self.class.collection_path}/#{redemption_code}/redeem", xml)
72
- reload response
73
- rescue API::UnprocessableEntity => e
74
- apply_errors e
75
- end
76
-
77
- private
78
-
79
- def xml_keys
80
- keys = super
81
- keys << 'redemption_code' if redemption_code? && !redemption_code_changed?
82
- keys.sort
83
- end
84
- end
85
- 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,354 +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
- )
127
- alias to_param invoice_number_with_prefix
128
-
129
- def self.to_xml(attrs)
130
- invoice = new attrs
131
- invoice.to_xml
132
- end
133
-
134
- # Marks an invoice as paid successfully.
135
- #
136
- # @return [true, false] +true+ when successful, +false+ when unable to
137
- # (e.g., the invoice is no longer open).
138
- def mark_successful
139
- return false unless link? :mark_successful
140
- reload follow_link :mark_successful
141
- true
142
- end
143
-
144
- # Marks an invoice as failing collection.
145
- # Returns a new {InvoiceCollection} and does not
146
- # reload this invoice.
147
- #
148
- # @return [InvoiceCollection, false] InvoiceCollection when successful, +false+ when unable to
149
- # (e.g., the invoice is no longer open).
150
- def mark_failed
151
- return false unless link? :mark_failed
152
- InvoiceCollection.from_response follow_link(:mark_failed)
153
- rescue Recurly::API::UnprocessableEntity => e
154
- raise Invalid, e.message
155
- end
156
-
157
- # Initiate a collection attempt on an invoice.
158
- #
159
- # @example
160
- # # Optionally set transaction type
161
- # invoice.force_collect(transaction_type: 'moto')
162
- #
163
- # @param options [Hash] Optional set of details to send to collect endpoint.
164
- # @return [true, false] +true+ when successful, +false+ when unable to
165
- # (e.g., the invoice is no longer open).
166
- def force_collect(options = {})
167
- return false unless link? :force_collect
168
- http_opts = {}
169
- if body = force_collect_xml(options)
170
- http_opts[:body] = body
171
- end
172
- reload follow_link(:force_collect, http_opts)
173
- true
174
- end
175
-
176
- # Voids the invoice.
177
- #
178
- # @return [true, false] +true+ when successful, +false+ when unable to
179
- # (e.g., the invoice is no longer open).
180
- def void
181
- return false unless link? :void
182
- reload follow_link :void
183
- true
184
- end
185
-
186
- # Applies the open credit balance on the account to the invoice balance.
187
- #
188
- # @return [true, false] +true+ when successful, +false+ when unable to
189
- # (e.g., the invoice is no longer collectible).
190
- def apply_credit_balance
191
- return false unless link? :apply_credit_balance
192
- reload follow_link :apply_credit_balance
193
- true
194
- end
195
-
196
- # Posts an offline payment on this invoice
197
- #
198
- # @return [Transaction]
199
- # @raise [Error] If the transaction fails.
200
- def enter_offline_payment(attrs={})
201
- Transaction.from_response API.post("#{uri}/transactions", attrs.empty? ? nil : Transaction.to_xml(attrs))
202
- rescue Recurly::API::UnprocessableEntity => e
203
- raise Invalid, e.message
204
- end
205
-
206
- # Fetches the pdf for this invoice
207
- def pdf
208
- self.class.find(to_param, format: 'pdf')
209
- end
210
-
211
- # Refunds specific line items on the invoice.
212
- #
213
- # @return [Invoice, false] Invoice if successful, false if the invoice isn't
214
- # refundable.
215
- # @raise [Error] If the refund fails.
216
- # @param line_items [Array, nil] An array of line items to refund.
217
- # @param refund_method ["credit_first", "transaction_first", "all_transaction", "all_credit"] The method used to refund.
218
- # @param external_refund [true, false] Designates that the refund transactions created are manual.
219
- # @param credit_customer_notes [String] Adds notes to refund credit invoice.
220
- # @param payment_method [String] Creates the manual transactions with this payment method. Allowed if *external_refund* is true.
221
- # @param description [String] Sets this value as the *transaction_note* on the manual transactions created. Allowed if *external_refund* is true.
222
- # @param refunded_at [DateTime] Sets this value as the *collected_at* on the manual transactions created. Allowed if *external_refund* is true.
223
- def refund(line_items = nil, refund_method = 'credit_first', options = {})
224
- return false unless link? :refund
225
- self.class.from_response(
226
- follow_link :refund, :body => refund_line_items_to_xml(line_items, refund_method, options)
227
- )
228
- rescue Recurly::API::UnprocessableEntity => e
229
- Transaction::Error.validate! e, (self if is_a?(Transaction))
230
- raise
231
- end
232
-
233
- # Refunds the invoice for a specific amount.
234
- #
235
- # @return [Invoice, false] Invoice if successful, false if the invoice isn't
236
- # refundable.
237
- # @raise [Error] If the refund fails.
238
- # @param amount_in_cents [Integer, nil] The amount (in cents) to refund.
239
- # @param refund_method ["credit_first", "transaction_first", "all_transaction", "all_credit"] The method used to refund.
240
- # @param external_refund [true, false] Designates that the refund transactions created are manual.
241
- # @param credit_customer_notes [String] Adds notes to refund credit invoice.
242
- # @param payment_method [String] Creates the manual transactions with this payment method. Allowed if *external_refund* is true.
243
- # @param description [String] Sets this value as the *transaction_note* on the manual transactions created. Allowed if *external_refund* is true.
244
- # @param refunded_at [DateTime] Sets this value as the *collected_at* on the manual transactions created. Allowed if *external_refund* is true.
245
- def refund_amount(amount_in_cents = nil, refund_method = 'credit_first', options = {})
246
- return false unless link? :refund
247
- self.class.from_response(
248
- follow_link :refund, :body => refund_amount_to_xml(amount_in_cents, refund_method, options)
249
- )
250
- end
251
-
252
- # Refunds the invoice for a specific percentage.
253
- #
254
- # @return [Invoice, false] Invoice if successful, false if the invoice isn't
255
- # refundable.
256
- # @raise [Error] If the refund fails.
257
- # @param percentage [Integer, nil] The percentage to refund from the invoice.
258
- # @param refund_method ["credit_first", "transaction_first", "all_transaction", "all_credit"] The method used to refund.
259
- # @param external_refund [true, false] Designates that the refund transactions created are manual.
260
- # @param credit_customer_notes [String] Adds notes to refund credit invoice.
261
- # @param payment_method [String] Creates the manual transactions with this payment method. Allowed if *external_refund* is true.
262
- # @param description [String] Sets this value as the *transaction_note* on the manual transactions created. Allowed if *external_refund* is true.
263
- # @param refunded_at [DateTime] Sets this value as the *collected_at* on the manual transactions created. Allowed if *external_refund* is true.
264
- def refund_percentage(percentage = nil, refund_method = 'credit_first', options = {})
265
- return false unless link? :refund
266
- self.class.from_response(
267
- follow_link :refund, :body => refund_percentage_to_xml(percentage, refund_method, options)
268
- )
269
- end
270
-
271
- def xml_keys
272
- super - ['currency']
273
- end
274
-
275
- # Attempts to update the invoice, returning the success of the request.
276
- # Raises an error if attempting to create an invoice using this method.
277
- #
278
- # @return [true, false]
279
- # @raise [RuntimeError] Raises error if you attempt to create an invoice.
280
- # @example
281
- # invoice = Recurly::Invoice.find('1000')
282
- # invoice.po_number = '1234'
283
- # invoice.save # => true
284
- def save
285
- unless persisted?
286
- raise "Invoices can only be updated with Invoice#save. New invoices cannot be created using this method."
287
- end
288
- super
289
- end
290
-
291
- private
292
-
293
- def initialize(attributes = {})
294
- super({ :currency => Recurly.default_currency }.merge attributes)
295
- end
296
-
297
- def refund_amount_to_xml(amount_in_cents = nil, refund_method = nil, options = {})
298
- builder = XML.new("<invoice/>")
299
- builder.add_element 'refund_method', refund_method
300
- builder.add_element 'amount_in_cents', amount_in_cents
301
- options.each do |k, v|
302
- builder.add_element k.to_s, v
303
- end
304
- builder.to_s
305
- end
306
-
307
- def refund_percentage_to_xml(percentage = nil, refund_method = nil, options = {})
308
- builder = XML.new("<invoice/>")
309
- builder.add_element 'refund_method', refund_method
310
- builder.add_element 'percentage', percentage
311
- options.each do |k, v|
312
- builder.add_element k.to_s, v
313
- end
314
- builder.to_s
315
- end
316
-
317
- def refund_line_items_to_xml(line_items = nil, refund_method = nil, options = {})
318
- builder = XML.new("<invoice/>")
319
- builder.add_element 'refund_method', refund_method
320
- options.each do |k, v|
321
- builder.add_element k.to_s, v
322
- end
323
- line_items ||= []
324
- node = builder.add_element 'line_items'
325
- line_items.each do |line_item|
326
- adj_node = node.add_element 'adjustment'
327
- adj_node.add_element 'uuid', line_item[:adjustment].uuid
328
- adj_node.add_element 'quantity', line_item[:quantity] if line_item.key?(:quantity)
329
- adj_node.add_element('quantity_decimal', line_item[:quantity_decimal]) if line_item.key?(:quantity_decimal)
330
- adj_node.add_element 'percentage', line_item[:percentage] if line_item.key?(:percentage)
331
- adj_node.add_element 'amount_in_cents', line_item[:amount_in_cents] if line_item.key?(:amount_in_cents)
332
- adj_node.add_element 'prorate', line_item[:prorate]
333
- end
334
- builder.to_s
335
- end
336
-
337
- # Returns an xml body or nil given some options
338
- def force_collect_xml(options = {})
339
- if options[:transaction_type] || options[:billing_info]
340
- ForceCollect.new(options).to_xml
341
- end
342
- end
343
-
344
- # Invoices are only writeable through {Account} instances.
345
- embedded! true
346
- undef destroy
347
-
348
- # Represents a body for the force collect endpoint
349
- class ForceCollect < Resource
350
- has_one :billing_info, class_name: :BillingInfo, readonly: false
351
- define_attribute_methods %w[transaction_type]
352
- end
353
- end
354
- 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