recurly 2.18.21 → 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 (211) 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 -1103
  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 -145
  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 -173
  93. data/lib/recurly/account.rb +0 -209
  94. data/lib/recurly/account_acquisition.rb +0 -27
  95. data/lib/recurly/account_balance.rb +0 -21
  96. data/lib/recurly/add_on.rb +0 -46
  97. data/lib/recurly/address.rb +0 -25
  98. data/lib/recurly/adjustment.rb +0 -81
  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 -113
  103. data/lib/recurly/coupon.rb +0 -136
  104. data/lib/recurly/credit_payment.rb +0 -32
  105. data/lib/recurly/custom_field.rb +0 -15
  106. data/lib/recurly/delivery.rb +0 -19
  107. data/lib/recurly/error.rb +0 -13
  108. data/lib/recurly/gift_card.rb +0 -85
  109. data/lib/recurly/helper.rb +0 -51
  110. data/lib/recurly/invoice.rb +0 -304
  111. data/lib/recurly/invoice_collection.rb +0 -14
  112. data/lib/recurly/item.rb +0 -36
  113. data/lib/recurly/js.rb +0 -14
  114. data/lib/recurly/juris_detail.rb +0 -15
  115. data/lib/recurly/measured_unit.rb +0 -16
  116. data/lib/recurly/money.rb +0 -120
  117. data/lib/recurly/note.rb +0 -14
  118. data/lib/recurly/plan.rb +0 -43
  119. data/lib/recurly/purchase.rb +0 -238
  120. data/lib/recurly/redemption.rb +0 -46
  121. data/lib/recurly/resource/association.rb +0 -16
  122. data/lib/recurly/resource/errors.rb +0 -20
  123. data/lib/recurly/resource/pager.rb +0 -313
  124. data/lib/recurly/shipping_address.rb +0 -26
  125. data/lib/recurly/shipping_fee.rb +0 -17
  126. data/lib/recurly/shipping_method.rb +0 -13
  127. data/lib/recurly/subscription/add_ons.rb +0 -82
  128. data/lib/recurly/subscription.rb +0 -366
  129. data/lib/recurly/subscription_add_on.rb +0 -58
  130. data/lib/recurly/tax_detail.rb +0 -18
  131. data/lib/recurly/tax_type.rb +0 -13
  132. data/lib/recurly/tier.rb +0 -18
  133. data/lib/recurly/transaction/errors.rb +0 -115
  134. data/lib/recurly/transaction.rb +0 -131
  135. data/lib/recurly/usage.rb +0 -28
  136. data/lib/recurly/verify.rb +0 -12
  137. data/lib/recurly/webhook/account_notification.rb +0 -13
  138. data/lib/recurly/webhook/billing_info_update_failed_notification.rb +0 -6
  139. data/lib/recurly/webhook/billing_info_updated_notification.rb +0 -6
  140. data/lib/recurly/webhook/canceled_account_notification.rb +0 -6
  141. data/lib/recurly/webhook/canceled_gift_card_notification.rb +0 -6
  142. data/lib/recurly/webhook/canceled_subscription_notification.rb +0 -6
  143. data/lib/recurly/webhook/closed_credit_invoice_notification.rb +0 -6
  144. data/lib/recurly/webhook/closed_invoice_notification.rb +0 -6
  145. data/lib/recurly/webhook/credit_payment_notification.rb +0 -12
  146. data/lib/recurly/webhook/deactivated_item_notification.rb +0 -6
  147. data/lib/recurly/webhook/deleted_shipping_address_notification.rb +0 -6
  148. data/lib/recurly/webhook/dunning_notification.rb +0 -14
  149. data/lib/recurly/webhook/expired_subscription_notification.rb +0 -6
  150. data/lib/recurly/webhook/failed_charge_invoice_notification.rb +0 -6
  151. data/lib/recurly/webhook/failed_payment_notification.rb +0 -6
  152. data/lib/recurly/webhook/fraud_info_updated_notification.rb +0 -6
  153. data/lib/recurly/webhook/gift_card_notification.rb +0 -8
  154. data/lib/recurly/webhook/invoice_notification.rb +0 -12
  155. data/lib/recurly/webhook/item_notification.rb +0 -7
  156. data/lib/recurly/webhook/low_balance_gift_card_notification.rb +0 -6
  157. data/lib/recurly/webhook/new_account_notification.rb +0 -6
  158. data/lib/recurly/webhook/new_charge_invoice_notification.rb +0 -6
  159. data/lib/recurly/webhook/new_credit_invoice_notification.rb +0 -6
  160. data/lib/recurly/webhook/new_credit_payment_notification.rb +0 -6
  161. data/lib/recurly/webhook/new_dunning_event_notification.rb +0 -6
  162. data/lib/recurly/webhook/new_invoice_notification.rb +0 -6
  163. data/lib/recurly/webhook/new_item_notification.rb +0 -6
  164. data/lib/recurly/webhook/new_shipping_address_notification.rb +0 -6
  165. data/lib/recurly/webhook/new_subscription_notification.rb +0 -6
  166. data/lib/recurly/webhook/new_usage_notification.rb +0 -8
  167. data/lib/recurly/webhook/notification.rb +0 -18
  168. data/lib/recurly/webhook/paid_charge_invoice_notification.rb +0 -6
  169. data/lib/recurly/webhook/past_due_charge_invoice_notification.rb +0 -6
  170. data/lib/recurly/webhook/past_due_invoice_notification.rb +0 -6
  171. data/lib/recurly/webhook/paused_subscription_renewal_notification.rb +0 -6
  172. data/lib/recurly/webhook/prerenewal_notification.rb +0 -6
  173. data/lib/recurly/webhook/processing_charge_invoice_notification.rb +0 -6
  174. data/lib/recurly/webhook/processing_credit_invoice_notification.rb +0 -6
  175. data/lib/recurly/webhook/processing_invoice_notification.rb +0 -6
  176. data/lib/recurly/webhook/processing_payment_notification.rb +0 -6
  177. data/lib/recurly/webhook/purchased_gift_card_notification.rb +0 -7
  178. data/lib/recurly/webhook/reactivated_account_notification.rb +0 -6
  179. data/lib/recurly/webhook/reactivated_item_notification.rb +0 -6
  180. data/lib/recurly/webhook/redeemed_gift_card_notification.rb +0 -7
  181. data/lib/recurly/webhook/regenerated_gift_card_notification.rb +0 -6
  182. data/lib/recurly/webhook/renewed_subscription_notification.rb +0 -6
  183. data/lib/recurly/webhook/reopened_charge_invoice_notification.rb +0 -6
  184. data/lib/recurly/webhook/reopened_credit_invoice_notification.rb +0 -6
  185. data/lib/recurly/webhook/scheduled_payment_notification.rb +0 -6
  186. data/lib/recurly/webhook/scheduled_subscription_pause_notification.rb +0 -6
  187. data/lib/recurly/webhook/scheduled_subscription_update_notification.rb +0 -6
  188. data/lib/recurly/webhook/subscription_notification.rb +0 -12
  189. data/lib/recurly/webhook/subscription_pause_canceled_notification.rb +0 -6
  190. data/lib/recurly/webhook/subscription_pause_modified_notification.rb +0 -6
  191. data/lib/recurly/webhook/subscription_paused_notification.rb +0 -6
  192. data/lib/recurly/webhook/subscription_resumed_notification.rb +0 -6
  193. data/lib/recurly/webhook/successful_payment_notification.rb +0 -6
  194. data/lib/recurly/webhook/successful_refund_notification.rb +0 -6
  195. data/lib/recurly/webhook/transaction_authorized_notification.rb +0 -6
  196. data/lib/recurly/webhook/transaction_notification.rb +0 -12
  197. data/lib/recurly/webhook/transaction_status_updated_notification.rb +0 -6
  198. data/lib/recurly/webhook/updated_account_notification.rb +0 -6
  199. data/lib/recurly/webhook/updated_balance_gift_card_notification.rb +0 -7
  200. data/lib/recurly/webhook/updated_gift_card_notification.rb +0 -6
  201. data/lib/recurly/webhook/updated_invoice_notification.rb +0 -6
  202. data/lib/recurly/webhook/updated_item_notification.rb +0 -6
  203. data/lib/recurly/webhook/updated_shipping_address_notification.rb +0 -6
  204. data/lib/recurly/webhook/updated_subscription_notification.rb +0 -6
  205. data/lib/recurly/webhook/void_payment_notification.rb +0 -6
  206. data/lib/recurly/webhook/voided_credit_invoice_notification.rb +0 -6
  207. data/lib/recurly/webhook/voided_credit_payment_notification.rb +0 -6
  208. data/lib/recurly/webhook.rb +0 -113
  209. data/lib/recurly/xml/nokogiri.rb +0 -60
  210. data/lib/recurly/xml/rexml.rb +0 -52
  211. data/lib/recurly/xml.rb +0 -122
@@ -1,46 +0,0 @@
1
- module Recurly
2
- # Redemptions are not top-level resources, but they can be accessed (and
3
- # created) through {Coupon} instances.
4
- #
5
- # @example
6
- # coupon = Coupon.find("summer2011")
7
- # coupon.redemptions.each { |r| p r }
8
- # coupon.redeem Account.find("groupon_lover")
9
- class Redemption < Resource
10
- # @return [Coupon]
11
- belongs_to :coupon
12
-
13
- # @return [Account]
14
- belongs_to :account, :readonly => false
15
-
16
- # @return [Subscription]
17
- belongs_to :subscription
18
-
19
- # @return [Invoice]
20
- belongs_to :invoice
21
-
22
- define_attribute_methods %w(
23
- uuid
24
- single_use
25
- total_discounted_in_cents
26
- currency
27
- state
28
- coupon_code
29
- subscription_uuid
30
- created_at
31
- updated_at
32
- )
33
-
34
- def save
35
- return false if persisted?
36
- copy_from coupon.redeem account, currency
37
- true
38
- rescue Recurly::API::UnprocessableEntity => e
39
- apply_errors e
40
- false
41
- end
42
-
43
- # Redemptions are only writeable through {Coupon} instances.
44
- embedded!
45
- end
46
- end
@@ -1,16 +0,0 @@
1
- module Recurly
2
- class Resource
3
- class Association
4
- attr_reader :relation, :resource_class
5
-
6
- def initialize relation, resource_class, options = {}
7
- @relation, @resource_class, @options = relation, resource_class, options
8
- end
9
-
10
- def class_name
11
- return @class_name if defined? @class_name
12
- @class_name = @options[:class_name]
13
- end
14
- end
15
- end
16
- end
@@ -1,20 +0,0 @@
1
- module Recurly
2
- class Resource
3
- class Errors < Hash
4
- def [] key
5
- super key.to_s
6
- end
7
-
8
- def []= key, value
9
- super key.to_s, value
10
- end
11
-
12
- def full_messages
13
- map { |attribute, messages|
14
- attribute_name = attribute.capitalize.gsub('_', ' ')
15
- messages.map { |message| "#{attribute_name} #{message}." }
16
- }.flatten
17
- end
18
- end
19
- end
20
- end
@@ -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,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
- )
11
- alias to_param code
12
- end
13
- end