recurly 2.20.3 → 3.0.0.beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +14 -0
- data/.rspec +2 -0
- data/.travis.yml +5 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +158 -110
- data/Rakefile +6 -0
- data/bin/bundle +105 -0
- data/bin/coderay +29 -0
- data/bin/console +14 -0
- data/bin/htmldiff +29 -0
- data/bin/ldiff +29 -0
- data/bin/pry +29 -0
- data/bin/rake +29 -0
- data/bin/rspec +29 -0
- data/bin/setup +8 -0
- data/bin/yard +29 -0
- data/bin/yardoc +29 -0
- data/bin/yri +29 -0
- data/lib/data/ca-certificates.crt +31 -0
- data/lib/recurly/client/operations.rb +935 -0
- data/lib/recurly/client.rb +198 -0
- data/lib/recurly/errors/api_errors.rb +35 -0
- data/lib/recurly/errors/network_errors.rb +8 -0
- data/lib/recurly/errors.rb +34 -0
- data/lib/recurly/pager.rb +119 -0
- data/lib/recurly/request.rb +30 -0
- data/lib/recurly/requests/account_acquisition_updatable.rb +22 -0
- data/lib/recurly/requests/account_create_only.rb +18 -0
- data/lib/recurly/requests/account_updatable.rb +50 -0
- data/lib/recurly/requests/add_on_create.rb +38 -0
- data/lib/recurly/requests/add_on_update.rb +38 -0
- data/lib/recurly/requests/address.rb +42 -0
- data/lib/recurly/requests/billing_info_create.rb +58 -0
- data/lib/recurly/requests/coupon_create_only.rb +66 -0
- data/lib/recurly/requests/coupon_updatable.rb +30 -0
- data/lib/recurly/requests/create_account.rb +62 -0
- data/lib/recurly/requests/create_coupon.rb +90 -0
- data/lib/recurly/requests/invoice_create.rb +42 -0
- data/lib/recurly/requests/invoice_refund.rb +30 -0
- data/lib/recurly/requests/line_item_create.rb +46 -0
- data/lib/recurly/requests/plan_create.rb +66 -0
- data/lib/recurly/requests/plan_update.rb +70 -0
- data/lib/recurly/requests/shipping_address_create.rb +58 -0
- data/lib/recurly/requests/shipping_address_update.rb +62 -0
- data/lib/recurly/requests/subscription_add_on_create.rb +22 -0
- data/lib/recurly/requests/subscription_change_create.rb +42 -0
- data/lib/recurly/requests/subscription_create.rb +86 -0
- data/lib/recurly/requests/subscription_update.rb +42 -0
- data/lib/recurly/requests/update_coupon.rb +30 -0
- data/lib/recurly/resource.rb +16 -1114
- data/lib/recurly/resources/account.rb +86 -0
- data/lib/recurly/resources/account_acquisition.rb +42 -0
- data/lib/recurly/resources/account_balance.rb +22 -0
- data/lib/recurly/resources/account_note.rb +30 -0
- data/lib/recurly/resources/add_on.rb +62 -0
- data/lib/recurly/resources/address.rb +42 -0
- data/lib/recurly/resources/billing_info.rb +62 -0
- data/lib/recurly/resources/coupon.rb +110 -0
- data/lib/recurly/resources/coupon_discount.rb +22 -0
- data/lib/recurly/resources/coupon_redemption.rb +46 -0
- data/lib/recurly/resources/credit_payment.rb +62 -0
- data/lib/recurly/resources/error.rb +18 -0
- data/lib/recurly/resources/error_may_have_transaction.rb +22 -0
- data/lib/recurly/resources/invoice.rb +138 -0
- data/lib/recurly/resources/invoice_collection.rb +18 -0
- data/lib/recurly/resources/line_item.rb +166 -0
- data/lib/recurly/resources/plan.rb +86 -0
- data/lib/recurly/resources/settings.rb +18 -0
- data/lib/recurly/resources/shipping_address.rb +74 -0
- data/lib/recurly/resources/site.rb +46 -0
- data/lib/recurly/resources/subscription.rb +134 -0
- data/lib/recurly/resources/subscription_add_on.rb +42 -0
- data/lib/recurly/resources/subscription_change.rb +54 -0
- data/lib/recurly/resources/tax_info.rb +18 -0
- data/lib/recurly/resources/transaction.rb +146 -0
- data/lib/recurly/resources/unique_coupon_code.rb +38 -0
- data/lib/recurly/resources/user.rb +38 -0
- data/lib/recurly/schema/json_deserializer.rb +53 -0
- data/lib/recurly/schema/json_parser.rb +71 -0
- data/lib/recurly/schema/request_caster.rb +66 -0
- data/lib/recurly/schema/schema_factory.rb +50 -0
- data/lib/recurly/schema/schema_validator.rb +125 -0
- data/lib/recurly/schema.rb +114 -0
- data/lib/recurly/version.rb +1 -10
- data/lib/recurly.rb +14 -167
- data/recurly.gemspec +32 -0
- data/scripts/build +4 -0
- data/scripts/clean +6 -0
- data/scripts/test +3 -0
- metadata +129 -196
- data/lib/recurly/account.rb +0 -230
- data/lib/recurly/account_acquisition.rb +0 -27
- data/lib/recurly/account_balance.rb +0 -23
- data/lib/recurly/add_on.rb +0 -52
- data/lib/recurly/address.rb +0 -25
- data/lib/recurly/adjustment.rb +0 -100
- data/lib/recurly/api/errors.rb +0 -208
- data/lib/recurly/api/net_http_adapter.rb +0 -111
- data/lib/recurly/api.rb +0 -110
- data/lib/recurly/billing_info.rb +0 -134
- data/lib/recurly/business_entity.rb +0 -35
- data/lib/recurly/coupon.rb +0 -136
- data/lib/recurly/credit_payment.rb +0 -32
- data/lib/recurly/currency_percentage_tier.rb +0 -17
- data/lib/recurly/custom_field.rb +0 -15
- data/lib/recurly/custom_field_definition.rb +0 -14
- data/lib/recurly/customer_permission.rb +0 -10
- data/lib/recurly/delivery.rb +0 -19
- data/lib/recurly/dunning_campaign.rb +0 -30
- data/lib/recurly/dunning_cycle.rb +0 -18
- data/lib/recurly/entitlement.rb +0 -19
- data/lib/recurly/error.rb +0 -13
- data/lib/recurly/external_account.rb +0 -17
- data/lib/recurly/external_charge.rb +0 -20
- data/lib/recurly/external_invoice.rb +0 -27
- data/lib/recurly/external_payment_phase.rb +0 -27
- data/lib/recurly/external_product.rb +0 -34
- data/lib/recurly/external_product_reference.rb +0 -18
- data/lib/recurly/external_subscription.rb +0 -62
- data/lib/recurly/gateway_attribute.rb +0 -10
- data/lib/recurly/general_ledger_account.rb +0 -16
- data/lib/recurly/gift_card.rb +0 -85
- data/lib/recurly/helper.rb +0 -51
- data/lib/recurly/invoice.rb +0 -354
- data/lib/recurly/invoice_collection.rb +0 -14
- data/lib/recurly/invoice_template.rb +0 -14
- data/lib/recurly/item.rb +0 -36
- data/lib/recurly/js.rb +0 -14
- data/lib/recurly/juris_detail.rb +0 -15
- data/lib/recurly/measured_unit.rb +0 -16
- data/lib/recurly/money.rb +0 -120
- data/lib/recurly/note.rb +0 -14
- data/lib/recurly/percentage_tier.rb +0 -17
- data/lib/recurly/performance_obligation.rb +0 -15
- data/lib/recurly/plan.rb +0 -59
- data/lib/recurly/plan_ramp_interval.rb +0 -10
- data/lib/recurly/purchase.rb +0 -239
- data/lib/recurly/redemption.rb +0 -46
- data/lib/recurly/resource/association.rb +0 -16
- data/lib/recurly/resource/errors.rb +0 -20
- data/lib/recurly/resource/pager.rb +0 -313
- data/lib/recurly/rev_rec.rb +0 -18
- data/lib/recurly/shipping_address.rb +0 -26
- data/lib/recurly/shipping_fee.rb +0 -17
- data/lib/recurly/shipping_method.rb +0 -13
- data/lib/recurly/sub_add_on_percentage_tier.rb +0 -17
- data/lib/recurly/subscription/add_ons.rb +0 -82
- data/lib/recurly/subscription.rb +0 -374
- data/lib/recurly/subscription_add_on.rb +0 -64
- data/lib/recurly/subscription_ramp_interval.rb +0 -12
- data/lib/recurly/tax_detail.rb +0 -18
- data/lib/recurly/tax_type.rb +0 -13
- data/lib/recurly/tier.rb +0 -18
- data/lib/recurly/transaction/errors.rb +0 -119
- data/lib/recurly/transaction.rb +0 -132
- data/lib/recurly/usage.rb +0 -29
- data/lib/recurly/verify.rb +0 -12
- data/lib/recurly/webhook/account_notification.rb +0 -13
- data/lib/recurly/webhook/billing_info_update_failed_notification.rb +0 -6
- data/lib/recurly/webhook/billing_info_updated_notification.rb +0 -6
- data/lib/recurly/webhook/canceled_account_notification.rb +0 -6
- data/lib/recurly/webhook/canceled_gift_card_notification.rb +0 -6
- data/lib/recurly/webhook/canceled_subscription_notification.rb +0 -6
- data/lib/recurly/webhook/closed_credit_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/closed_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/credit_payment_notification.rb +0 -12
- data/lib/recurly/webhook/deactivated_item_notification.rb +0 -6
- data/lib/recurly/webhook/deleted_shipping_address_notification.rb +0 -6
- data/lib/recurly/webhook/dunning_notification.rb +0 -14
- data/lib/recurly/webhook/expired_subscription_notification.rb +0 -6
- data/lib/recurly/webhook/failed_charge_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/failed_payment_notification.rb +0 -6
- data/lib/recurly/webhook/fraud_info_updated_notification.rb +0 -6
- data/lib/recurly/webhook/gift_card_notification.rb +0 -8
- data/lib/recurly/webhook/invoice_notification.rb +0 -12
- data/lib/recurly/webhook/item_notification.rb +0 -7
- data/lib/recurly/webhook/low_balance_gift_card_notification.rb +0 -6
- data/lib/recurly/webhook/new_account_notification.rb +0 -6
- data/lib/recurly/webhook/new_charge_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/new_credit_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/new_credit_payment_notification.rb +0 -6
- data/lib/recurly/webhook/new_dunning_event_notification.rb +0 -6
- data/lib/recurly/webhook/new_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/new_item_notification.rb +0 -6
- data/lib/recurly/webhook/new_shipping_address_notification.rb +0 -6
- data/lib/recurly/webhook/new_subscription_notification.rb +0 -6
- data/lib/recurly/webhook/new_usage_notification.rb +0 -8
- data/lib/recurly/webhook/notification.rb +0 -18
- data/lib/recurly/webhook/paid_charge_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/past_due_charge_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/past_due_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/paused_subscription_renewal_notification.rb +0 -6
- data/lib/recurly/webhook/prerenewal_notification.rb +0 -6
- data/lib/recurly/webhook/processing_charge_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/processing_credit_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/processing_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/processing_payment_notification.rb +0 -6
- data/lib/recurly/webhook/purchased_gift_card_notification.rb +0 -7
- data/lib/recurly/webhook/reactivated_account_notification.rb +0 -6
- data/lib/recurly/webhook/reactivated_item_notification.rb +0 -6
- data/lib/recurly/webhook/redeemed_gift_card_notification.rb +0 -7
- data/lib/recurly/webhook/regenerated_gift_card_notification.rb +0 -6
- data/lib/recurly/webhook/renewed_subscription_notification.rb +0 -6
- data/lib/recurly/webhook/reopened_charge_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/reopened_credit_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/scheduled_payment_notification.rb +0 -6
- data/lib/recurly/webhook/scheduled_subscription_pause_notification.rb +0 -6
- data/lib/recurly/webhook/scheduled_subscription_update_notification.rb +0 -6
- data/lib/recurly/webhook/subscription_notification.rb +0 -12
- data/lib/recurly/webhook/subscription_pause_canceled_notification.rb +0 -6
- data/lib/recurly/webhook/subscription_pause_modified_notification.rb +0 -6
- data/lib/recurly/webhook/subscription_paused_notification.rb +0 -6
- data/lib/recurly/webhook/subscription_resumed_notification.rb +0 -6
- data/lib/recurly/webhook/successful_payment_notification.rb +0 -6
- data/lib/recurly/webhook/successful_refund_notification.rb +0 -6
- data/lib/recurly/webhook/transaction_authorized_notification.rb +0 -6
- data/lib/recurly/webhook/transaction_notification.rb +0 -12
- data/lib/recurly/webhook/transaction_status_updated_notification.rb +0 -6
- data/lib/recurly/webhook/updated_account_notification.rb +0 -6
- data/lib/recurly/webhook/updated_balance_gift_card_notification.rb +0 -7
- data/lib/recurly/webhook/updated_gift_card_notification.rb +0 -6
- data/lib/recurly/webhook/updated_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/updated_item_notification.rb +0 -6
- data/lib/recurly/webhook/updated_shipping_address_notification.rb +0 -6
- data/lib/recurly/webhook/updated_subscription_notification.rb +0 -6
- data/lib/recurly/webhook/void_payment_notification.rb +0 -6
- data/lib/recurly/webhook/voided_credit_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/voided_credit_payment_notification.rb +0 -6
- data/lib/recurly/webhook.rb +0 -113
- data/lib/recurly/xml/nokogiri.rb +0 -60
- data/lib/recurly/xml/rexml.rb +0 -52
- data/lib/recurly/xml.rb +0 -122
@@ -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
|
data/lib/recurly/gift_card.rb
DELETED
@@ -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
|
data/lib/recurly/helper.rb
DELETED
@@ -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
|
data/lib/recurly/invoice.rb
DELETED
@@ -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
|
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
|
data/lib/recurly/juris_detail.rb
DELETED
@@ -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
|