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,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
@@ -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
@@ -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,13 +0,0 @@
1
- module Recurly
2
- class ShippingMethod < Resource
3
- define_attribute_methods %w(
4
- code
5
- name
6
- accounting_code
7
- tax_code
8
- created_at
9
- updated_at
10
- ) + RevRec::PRODUCT_ATTRIBUTES
11
- alias to_param code
12
- end
13
- 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