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,313 +0,0 @@
|
|
1
|
-
require 'erb'
|
2
|
-
|
3
|
-
module Recurly
|
4
|
-
class Resource
|
5
|
-
# Pages through an index resource, yielding records as it goes. It's rare
|
6
|
-
# to instantiate one on its own: use {Resource.paginate},
|
7
|
-
# {Resource.find_each}, and <tt>Resource#{has_many_association}</tt>
|
8
|
-
# instead.
|
9
|
-
#
|
10
|
-
# Because pagers handle +has_many+ associations, pagers can also build and
|
11
|
-
# create child records.
|
12
|
-
#
|
13
|
-
# @example Through a resource class:
|
14
|
-
# Recurly::Account.paginate # => #<Recurly::Resource::Pager...>
|
15
|
-
#
|
16
|
-
# Recurly::Account.find_each { |a| p a }
|
17
|
-
# @example Through an resource instance:
|
18
|
-
# account.transactions
|
19
|
-
# # => #<Recurly::Resource::Pager...>
|
20
|
-
#
|
21
|
-
# account.transactions.new(attributes) # or #create, or #create!
|
22
|
-
# # => #<Recurly::Transaction ...>
|
23
|
-
#
|
24
|
-
# account.transactions.find_each do |transaction|
|
25
|
-
# puts transaction
|
26
|
-
# end
|
27
|
-
# @example Iterate through a page of invoices at a time
|
28
|
-
# opts = {
|
29
|
-
# order: :desc,
|
30
|
-
# state: :collected
|
31
|
-
# }
|
32
|
-
# invoices = Recurly::Invoice.paginate(opts)
|
33
|
-
# begin
|
34
|
-
# invoices.each do |invoice|
|
35
|
-
# puts invoice.invoice_number
|
36
|
-
# end
|
37
|
-
# puts "fetching next page..."
|
38
|
-
# end while invoices.next
|
39
|
-
# @example Passing sorting and filtering parameters
|
40
|
-
# opts = {
|
41
|
-
# begin_time: DateTime.new(2016,1,1),
|
42
|
-
# end_time: DateTime.new(2017,1,1),
|
43
|
-
# sort: :updated_at,
|
44
|
-
# order: :desc,
|
45
|
-
# state: :collected
|
46
|
-
# }
|
47
|
-
# Recurly::Invoice.find_each(opts) do |invoice|
|
48
|
-
# puts invoice
|
49
|
-
# end
|
50
|
-
#
|
51
|
-
class Pager
|
52
|
-
include Enumerable
|
53
|
-
|
54
|
-
# @return [Resource] The resource class of the pager.
|
55
|
-
attr_reader :resource_class
|
56
|
-
|
57
|
-
# @return [Hash, nil] A hash of links to which the pager can page.
|
58
|
-
attr_reader :links
|
59
|
-
|
60
|
-
# @return [String, nil] An ETag for the current page.
|
61
|
-
attr_reader :etag
|
62
|
-
|
63
|
-
# A pager for paginating through resource records.
|
64
|
-
#
|
65
|
-
# @param resource_class [Resource] The resource to be paginated.
|
66
|
-
# @param options [Hash] A hash of pagination options.
|
67
|
-
# @option options [Integer] :per_page The number of records returned per
|
68
|
-
# page.
|
69
|
-
# @option options [DateTime, Time, Integer] :cursor A timestamp that the
|
70
|
-
# pager will skim back to and return records created before it.
|
71
|
-
# @option options [String] :etag When set, will raise {API::NotModified}
|
72
|
-
# if the loaded page content has not changed.
|
73
|
-
# @option options [String] :uri The default location the pager will
|
74
|
-
# request.
|
75
|
-
# @option options [String, Symbol] :sort The attribute that will be used to order
|
76
|
-
# records: <tt>created_at</tt>, <tt>updated_at</tt>. Defaults to <tt>created_at</tt>.
|
77
|
-
# @option options [String, Symbol] :order The order in which records will be
|
78
|
-
# returned: <tt>asc</tt> for ascending order, <tt>desc</tt> for descending order.
|
79
|
-
# Defaults to <tt>desc</tt>.
|
80
|
-
# @option options [DateTime, String] :begin_time Operates on the attribute specified by the
|
81
|
-
# <tt>sort</tt> parameter. Filters records to only include those with datetimes
|
82
|
-
# greater than or equal to the supplied datetime. Accepts an ISO 8601
|
83
|
-
# date or date and time.
|
84
|
-
# @option options [DateTime, String] :end_time Operates on the attribute specified by
|
85
|
-
# the <tt>sort</tt> parameter. Filters records to only include those with
|
86
|
-
# datetimes less than or equal to the supplied datetime. Accepts an
|
87
|
-
# ISO 8601 date or date and time.
|
88
|
-
# @raise [API::NotModified] If the <tt>:etag</tt> option is set and
|
89
|
-
# matches the server's.
|
90
|
-
def initialize resource_class, options = {}
|
91
|
-
@parent = options.delete :parent
|
92
|
-
@uri = options.delete :uri
|
93
|
-
@etag = options.delete :etag
|
94
|
-
@resource_class, @options = resource_class, options
|
95
|
-
@collection = nil
|
96
|
-
end
|
97
|
-
|
98
|
-
# This will tell you if there are any associated resources
|
99
|
-
# on the server by checking the presence of a link in the xml
|
100
|
-
#
|
101
|
-
# @example
|
102
|
-
# # if <invoices href="..." /> is present, will return true
|
103
|
-
# account.invoices.any?
|
104
|
-
# #=> true
|
105
|
-
# @return [Boolean] whether or not the xml element is present
|
106
|
-
def any?
|
107
|
-
!@uri.nil?
|
108
|
-
end
|
109
|
-
|
110
|
-
# @return [String] The URI of the paginated resource.
|
111
|
-
def uri
|
112
|
-
@uri ||= resource_class.collection_path
|
113
|
-
end
|
114
|
-
|
115
|
-
# Calls the server to get the count of server side resources.
|
116
|
-
#
|
117
|
-
# @example Count collected invoices in 2016
|
118
|
-
# opts = {
|
119
|
-
# begin_time: DateTime.new(2016,1,1),
|
120
|
-
# end_time: DateTime.new(2017,1,1),
|
121
|
-
# state: :collected
|
122
|
-
# }
|
123
|
-
# count = Recurly::Invoice.paginate(opts).count
|
124
|
-
# #=> 42
|
125
|
-
#
|
126
|
-
# @return [Integer] The total record count of the resource in question.
|
127
|
-
# @see Resource.count
|
128
|
-
def count
|
129
|
-
API.head(uri, @options)['X-Records'].to_i
|
130
|
-
end
|
131
|
-
|
132
|
-
# @return [Array] Iterates through the current page of records.
|
133
|
-
# @yield [record]
|
134
|
-
def each
|
135
|
-
return enum_for :each unless block_given?
|
136
|
-
load! unless @collection
|
137
|
-
@collection.each { |record| yield record }
|
138
|
-
end
|
139
|
-
|
140
|
-
# @return [nil]
|
141
|
-
# @see Resource.find_each
|
142
|
-
# @yield [record]
|
143
|
-
def find_each
|
144
|
-
return enum_for :find_each unless block_given?
|
145
|
-
begin
|
146
|
-
each { |record| yield record }
|
147
|
-
end while self.next
|
148
|
-
end
|
149
|
-
|
150
|
-
# @return [Array, nil] Refreshes the pager's collection of records with
|
151
|
-
# the next page.
|
152
|
-
def next
|
153
|
-
load_from links['next'], nil if links.key? 'next'
|
154
|
-
end
|
155
|
-
|
156
|
-
# @return [Array, nil] Refreshes the pager's collection of records with
|
157
|
-
# the previous page.
|
158
|
-
def prev
|
159
|
-
load_from links['prev'], nil if links.key? 'prev'
|
160
|
-
end
|
161
|
-
|
162
|
-
# @return [Array, nil] Refreshes the pager's collection of records with
|
163
|
-
# the first page.
|
164
|
-
def start
|
165
|
-
load_from links['start'], nil if links.key? 'start'
|
166
|
-
end
|
167
|
-
|
168
|
-
# @return [Array, nil] Load (or reload) the pager's collection from the
|
169
|
-
# original, supplied options.
|
170
|
-
def load!
|
171
|
-
load_from uri, @options
|
172
|
-
end
|
173
|
-
alias reload load!
|
174
|
-
|
175
|
-
|
176
|
-
# @return [Pager] Duplicates the pager, updating it with the options
|
177
|
-
# supplied. Useful for resource scopes.
|
178
|
-
# @option options [String, Symbol] :sort The attribute that will be used to order
|
179
|
-
# records: <tt>created_at</tt>, <tt>updated_at</tt>. Defaults to <tt>created_at</tt>.
|
180
|
-
# @option options [String, Symbol] :order The order in which records will be
|
181
|
-
# returned: <tt>asc</tt> for ascending order, <tt>desc</tt> for descending order.
|
182
|
-
# Defaults to <tt>desc</tt>.
|
183
|
-
# @option options [DateTime, String] :begin_time Operates on the attribute specified by the
|
184
|
-
# <tt>sort</tt> parameter. Filters records to only include those with datetimes
|
185
|
-
# greater than or equal to the supplied datetime. Accepts an ISO 8601
|
186
|
-
# date or date and time.
|
187
|
-
# @option options [DateTime, String] :end_time Operates on the attribute specified by
|
188
|
-
# the <tt>sort</tt> parameter. Filters records to only include those with
|
189
|
-
# datetimes less than or equal to the supplied datetime. Accepts an
|
190
|
-
# ISO 8601 date or date and time.
|
191
|
-
# @example
|
192
|
-
# Recurly::Account.paginate(sort: :updated_at, per_page: 20)
|
193
|
-
def paginate(options = {})
|
194
|
-
dup.instance_eval {
|
195
|
-
@collection = @etag = nil
|
196
|
-
@options = @options.merge options
|
197
|
-
self
|
198
|
-
}
|
199
|
-
end
|
200
|
-
alias scoped paginate
|
201
|
-
alias where paginate
|
202
|
-
|
203
|
-
def all options = {}
|
204
|
-
paginate(options).to_a
|
205
|
-
end
|
206
|
-
|
207
|
-
# Instantiates a new record in the scope of the pager.
|
208
|
-
#
|
209
|
-
# @return [Resource] A new record.
|
210
|
-
# @example
|
211
|
-
# account = Recurly::Account.find 'schrader'
|
212
|
-
# subscription = account.subscriptions.new attributes
|
213
|
-
# @see Resource.new
|
214
|
-
def new attributes = {}
|
215
|
-
record = resource_class.send(:new, attributes) { |r|
|
216
|
-
r.attributes[@parent.class.member_name] ||= @parent if @parent
|
217
|
-
r.uri = uri
|
218
|
-
}
|
219
|
-
yield record if block_given?
|
220
|
-
record
|
221
|
-
end
|
222
|
-
|
223
|
-
# Instantiates and saves a record in the scope of the pager.
|
224
|
-
#
|
225
|
-
# @return [Resource] The record.
|
226
|
-
# @raise [Transaction::Error] A monetary transaction failed.
|
227
|
-
# @example
|
228
|
-
# account = Recurly::Account.find 'schrader'
|
229
|
-
# subscription = account.subscriptions.create attributes
|
230
|
-
# @see Resource.create
|
231
|
-
def create attributes = {}
|
232
|
-
new(attributes) { |record| record.save }
|
233
|
-
end
|
234
|
-
|
235
|
-
# Instantiates a record in the scope of the pager.
|
236
|
-
#
|
237
|
-
# @return [Resource] The record.
|
238
|
-
# @example
|
239
|
-
# account = Recurly::Account.find 'schrader'
|
240
|
-
# subscription = account.subscriptions.build attributes
|
241
|
-
# @see Resource.new
|
242
|
-
def build attributes = {}
|
243
|
-
new(attributes)
|
244
|
-
end
|
245
|
-
|
246
|
-
# Instantiates and saves a record in the scope of the pager.
|
247
|
-
#
|
248
|
-
# @return [Resource] The saved record.
|
249
|
-
# @raise [Invalid] The record is invalid.
|
250
|
-
# @raise [Transaction::Error] A monetary transaction failed.
|
251
|
-
# @example
|
252
|
-
# account = Recurly::Account.find 'schrader'
|
253
|
-
# subscription = account.subscriptions.create! attributes
|
254
|
-
# @see Resource.create!
|
255
|
-
def create! attributes = {}
|
256
|
-
new(attributes) { |record| record.save! }
|
257
|
-
end
|
258
|
-
|
259
|
-
def find uuid
|
260
|
-
if resource_class.respond_to? :find
|
261
|
-
raise NoMethodError, "#find must be called on #{resource_class} directly"
|
262
|
-
end
|
263
|
-
|
264
|
-
resource_class.from_response API.get("#{uri}/#{ERB::Util.url_encode(uuid)}")
|
265
|
-
end
|
266
|
-
|
267
|
-
# @return [true, false]
|
268
|
-
# @see Object#respond_to?
|
269
|
-
def respond_to? method_name, include_private = false
|
270
|
-
super || [].respond_to?(method_name, include_private)
|
271
|
-
end
|
272
|
-
|
273
|
-
private
|
274
|
-
|
275
|
-
def load_from uri, params
|
276
|
-
options = {}
|
277
|
-
options[:head] = { 'If-None-Match' => etag } if etag
|
278
|
-
response = API.get uri, params, options
|
279
|
-
|
280
|
-
@etag = response['ETag']
|
281
|
-
@links = {}
|
282
|
-
if links = response['Link']
|
283
|
-
links.scan(/<([^>]+)>; rel="([^"]+)"/).each do |link, rel|
|
284
|
-
@links[rel] = link.freeze
|
285
|
-
end
|
286
|
-
end
|
287
|
-
@links.freeze
|
288
|
-
|
289
|
-
@collection = []
|
290
|
-
document = XML.new response.body
|
291
|
-
document.each_element(resource_class.member_name) do |el|
|
292
|
-
record = resource_class.from_xml el
|
293
|
-
record.attributes[@parent.class.member_name] = @parent if @parent
|
294
|
-
@collection << record
|
295
|
-
end
|
296
|
-
@collection.freeze
|
297
|
-
rescue API::NotModified
|
298
|
-
@collection and @collection or raise
|
299
|
-
end
|
300
|
-
|
301
|
-
def method_missing name, *args, &block
|
302
|
-
scope = resource_class.scopes[name] and return paginate scope
|
303
|
-
|
304
|
-
if [].respond_to? name
|
305
|
-
load! unless @collection
|
306
|
-
return @collection.send name, *args, &block
|
307
|
-
end
|
308
|
-
|
309
|
-
super
|
310
|
-
end
|
311
|
-
end
|
312
|
-
end
|
313
|
-
end
|
data/lib/recurly/rev_rec.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
module Recurly
|
2
|
-
module RevRec
|
3
|
-
POB_ATTRIBUTE = %i(performance_obligation_id).freeze
|
4
|
-
POB_NATIVE_ATTRIBUTE = %i(performance_obligation_identifier).freeze
|
5
|
-
|
6
|
-
GLA_ID_ATTRIBUTES = %i(liability_gl_account_id revenue_gl_account_id).freeze
|
7
|
-
GLA_CODE_ATTRIBUTES = %i(liability_gl_account_code revenue_gl_account_code).freeze
|
8
|
-
|
9
|
-
PRODUCT_NATIVE_ATTRS = (POB_NATIVE_ATTRIBUTE + GLA_ID_ATTRIBUTES).freeze
|
10
|
-
PRODUCT_ATTRIBUTES = (POB_ATTRIBUTE + GLA_ID_ATTRIBUTES).freeze
|
11
|
-
|
12
|
-
LINE_ITEM_ATTRIBUTES = (POB_ATTRIBUTE + GLA_CODE_ATTRIBUTES).freeze
|
13
|
-
ALL_ATTRIBUTES = (PRODUCT_ATTRIBUTES + LINE_ITEM_ATTRIBUTES).uniq.freeze
|
14
|
-
|
15
|
-
SETUP_FEE_ATTRIBUTES = PRODUCT_ATTRIBUTES.map { |key| :"setup_fee_#{key}" }.freeze
|
16
|
-
PLAN_ATTRIBUTES = [*PRODUCT_ATTRIBUTES, *SETUP_FEE_ATTRIBUTES].freeze
|
17
|
-
end
|
18
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
module Recurly
|
2
|
-
# Recurly Documentation: https://dev.recurly.com/docs/list-accounts-shipping-address
|
3
|
-
class ShippingAddress < Resource
|
4
|
-
define_attribute_methods %w(
|
5
|
-
id
|
6
|
-
address1
|
7
|
-
address2
|
8
|
-
first_name
|
9
|
-
last_name
|
10
|
-
city
|
11
|
-
state
|
12
|
-
zip
|
13
|
-
country
|
14
|
-
phone
|
15
|
-
nickname
|
16
|
-
company
|
17
|
-
company_name
|
18
|
-
email
|
19
|
-
geo_code
|
20
|
-
vat_number
|
21
|
-
street1
|
22
|
-
street2
|
23
|
-
)
|
24
|
-
alias to_param address1
|
25
|
-
end
|
26
|
-
end
|
data/lib/recurly/shipping_fee.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
module Recurly
|
2
|
-
class ShippingFee < Resource
|
3
|
-
# @return [ShippingAddress, nil]
|
4
|
-
has_one :shipping_address, class_name: :ShippingAddress, readonly: false
|
5
|
-
|
6
|
-
define_attribute_methods %w(
|
7
|
-
shipping_method_code
|
8
|
-
shipping_amount_in_cents,
|
9
|
-
shipping_address_id
|
10
|
-
)
|
11
|
-
|
12
|
-
# shipping_amount_in_cents should just be a number rather than a currency
|
13
|
-
# See https://github.com/recurly/recurly-client-ruby/blob/3726114fdf584ba50982e0ee28fd219136043fbc/lib/recurly/resource.rb#L751-L753
|
14
|
-
def currency
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
module Recurly
|
2
|
-
class SubAddOnPercentageTier < Resource
|
3
|
-
|
4
|
-
belongs_to :subscription_add_on
|
5
|
-
|
6
|
-
define_attribute_methods %w(
|
7
|
-
ending_amount_in_cents
|
8
|
-
usage_percentage
|
9
|
-
)
|
10
|
-
|
11
|
-
def xml_keys
|
12
|
-
attributes.keys
|
13
|
-
end
|
14
|
-
|
15
|
-
embedded! true
|
16
|
-
end
|
17
|
-
end
|
@@ -1,82 +0,0 @@
|
|
1
|
-
module Recurly
|
2
|
-
class Subscription < Resource
|
3
|
-
class AddOns
|
4
|
-
instance_methods.each do |method|
|
5
|
-
undef_method method if method !~ /^__|^(object_id|respond_to\?|send)$/
|
6
|
-
end
|
7
|
-
|
8
|
-
# @param subscription [Subscription]
|
9
|
-
# @param add_ons [Array, nil]
|
10
|
-
def initialize subscription, add_ons = []
|
11
|
-
@subscription, @add_ons = subscription, []
|
12
|
-
add_ons and add_ons.each { |a| self << a }
|
13
|
-
end
|
14
|
-
|
15
|
-
# @return [self]
|
16
|
-
# @param add_on [AddOn, String, Symbol, Hash] A {Plan} add-on,
|
17
|
-
# +add_on_code+, or hash with optional <tt>:quantity</tt> and
|
18
|
-
# <tt>:unit_amount_in_cents</tt> keys.
|
19
|
-
# @example
|
20
|
-
# pp subscription.add_ons << '1YEARWAR' << '1YEARWAR' << :BONUS
|
21
|
-
# [
|
22
|
-
# {:add_on_code => "1YEARWAR", :quantity => 2},
|
23
|
-
# {:add_on_code => "BONUS"}
|
24
|
-
# ]
|
25
|
-
def << add_on
|
26
|
-
add_on = SubscriptionAddOn.new(add_on, @subscription)
|
27
|
-
|
28
|
-
exist = @add_ons.find do |a|
|
29
|
-
source1 = a.add_on_source || "plan_add_on"
|
30
|
-
source2 = add_on.add_on_source || "plan_add_on"
|
31
|
-
a.add_on_code == add_on.add_on_code && source1 == source2
|
32
|
-
end
|
33
|
-
|
34
|
-
if exist
|
35
|
-
exist.quantity ||= 1
|
36
|
-
exist.quantity += add_on.quantity || 1
|
37
|
-
|
38
|
-
if add_on.unit_amount_in_cents
|
39
|
-
exist.unit_amount_in_cents = add_on.unit_amount_in_cents
|
40
|
-
end
|
41
|
-
else
|
42
|
-
@add_ons << add_on
|
43
|
-
end
|
44
|
-
|
45
|
-
self
|
46
|
-
end
|
47
|
-
|
48
|
-
def to_a
|
49
|
-
@add_ons.dup
|
50
|
-
end
|
51
|
-
|
52
|
-
def errors
|
53
|
-
@add_ons.map { |add_on| add_on.errors }
|
54
|
-
end
|
55
|
-
|
56
|
-
def to_xml options = {}
|
57
|
-
builder = options[:builder] || XML.new('<subscription_add_ons/>')
|
58
|
-
@add_ons.each do |add_on|
|
59
|
-
node = builder.add_element 'subscription_add_on'
|
60
|
-
add_on.attributes.each_pair do |k, v|
|
61
|
-
node.add_element k.to_s, v if v
|
62
|
-
end
|
63
|
-
end
|
64
|
-
builder.to_s
|
65
|
-
end
|
66
|
-
|
67
|
-
def respond_to? method_name, include_private = false
|
68
|
-
super || @add_ons.respond_to?(method_name, include_private)
|
69
|
-
end
|
70
|
-
|
71
|
-
private
|
72
|
-
|
73
|
-
def method_missing name, *args, &block
|
74
|
-
if @add_ons.respond_to? name
|
75
|
-
return @add_ons.send name, *args, &block
|
76
|
-
end
|
77
|
-
|
78
|
-
super
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|