get_around_owner 1.0.0 → 1.0.3

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 (198) hide show
  1. checksums.yaml +4 -4
  2. data/Owner API v1.json +2938 -0
  3. data/README.md +338 -181
  4. data/Rakefile +0 -2
  5. data/docs/Car.md +12 -0
  6. data/docs/CarId.md +6 -0
  7. data/docs/CarIdUnavailabilitiesJsonBody.md +9 -0
  8. data/docs/CarsApi.md +38 -79
  9. data/docs/CarsIndex.md +6 -0
  10. data/docs/Checkin.md +10 -0
  11. data/docs/CheckinsApi.md +76 -33
  12. data/docs/CheckinsIndex.md +6 -0
  13. data/docs/Checkout.md +11 -0
  14. data/docs/CheckoutsApi.md +76 -33
  15. data/docs/CheckoutsIndex.md +6 -0
  16. data/docs/EndsAt.md +6 -0
  17. data/docs/Invoice.md +15 -0
  18. data/docs/InvoicesApi.md +62 -124
  19. data/docs/InvoicesIndex.md +6 -0
  20. data/docs/Message.md +11 -0
  21. data/docs/MessagesApi.md +122 -31
  22. data/docs/MessagesSent.md +6 -0
  23. data/docs/Payout.md +12 -0
  24. data/docs/PayoutsApi.md +42 -83
  25. data/docs/PayoutsIndex.md +6 -0
  26. data/docs/Rental.md +14 -0
  27. data/docs/RentalIdMessagesJsonBody.md +7 -0
  28. data/docs/RentalInvoicesIndex.md +6 -0
  29. data/docs/RentalMessagesIndex.md +6 -0
  30. data/docs/RentalsApi.md +54 -203
  31. data/docs/RentalsBooked.md +6 -0
  32. data/docs/RentalsCanceled.md +6 -0
  33. data/docs/RentalsCarCheckedIn.md +6 -0
  34. data/docs/RentalsCarCheckedOut.md +6 -0
  35. data/docs/RentalsCarSwitched.md +6 -0
  36. data/docs/RentalsIndex.md +6 -0
  37. data/docs/RentalsTimesChanged.md +6 -0
  38. data/docs/StartsAt.md +6 -0
  39. data/docs/UnavailabilitiesApi.md +100 -68
  40. data/docs/UnavailabilitiesCreated.md +6 -0
  41. data/docs/UnavailabilitiesDeleted.md +6 -0
  42. data/docs/UnavailabilitiesIndex.md +6 -0
  43. data/docs/Unavailability.md +10 -0
  44. data/docs/User.md +19 -0
  45. data/docs/UsersApi.md +27 -41
  46. data/docs/UsersUpdated.md +6 -0
  47. data/docs/Webhook.md +9 -0
  48. data/get_around_owner-1.0.0.gem +0 -0
  49. data/get_around_owner-1.0.1.gem +0 -0
  50. data/get_around_owner.gemspec +16 -3
  51. data/getaround-api.gemspec +38 -0
  52. data/git_push.sh +9 -11
  53. data/lib/{get_around_owner → getaround-api}/api/cars_api.rb +25 -41
  54. data/lib/getaround-api/api/checkins_api.rb +146 -0
  55. data/lib/getaround-api/api/checkouts_api.rb +146 -0
  56. data/lib/{get_around_owner → getaround-api}/api/invoices_api.rb +43 -66
  57. data/lib/getaround-api/api/messages_api.rb +198 -0
  58. data/lib/{get_around_owner → getaround-api}/api/payouts_api.rb +29 -45
  59. data/lib/getaround-api/api/rentals_api.rb +146 -0
  60. data/lib/getaround-api/api/unavailabilities_api.rb +208 -0
  61. data/lib/{get_around_owner/api/messages_api.rb → getaround-api/api/users_api.rb} +31 -37
  62. data/lib/{get_around_owner → getaround-api}/api_client.rb +71 -77
  63. data/lib/{get_around_owner → getaround-api}/api_error.rb +5 -6
  64. data/lib/{get_around_owner → getaround-api}/configuration.rb +13 -106
  65. data/lib/{get_around_owner/models/getaround_car.rb → getaround-api/models/car.rb} +36 -56
  66. data/lib/{get_around_owner/models/getaround_users_updated_all_of_data.rb → getaround-api/models/car_id.rb} +33 -50
  67. data/lib/{get_around_owner/models/getaround_destroy_unavailability_request.rb → getaround-api/models/car_id_unavailabilities_json_body.rb} +45 -47
  68. data/lib/{get_around_owner/models/getaround_rentals_booked_all_of_data.rb → getaround-api/models/cars_index.rb} +33 -50
  69. data/lib/{get_around_owner/models/getaround_checkin.rb → getaround-api/models/checkin.rb} +34 -65
  70. data/lib/{get_around_owner/models/getaround_rentals_index_inner.rb → getaround-api/models/checkins_index.rb} +32 -58
  71. data/lib/{get_around_owner/models/getaround_checkout.rb → getaround-api/models/checkout.rb} +35 -70
  72. data/lib/getaround-api/models/checkouts_index.rb +197 -0
  73. data/lib/getaround-api/models/ends_at.rb +198 -0
  74. data/lib/{get_around_owner/models/getaround_invoice.rb → getaround-api/models/invoice.rb} +45 -113
  75. data/lib/getaround-api/models/invoices_index.rb +198 -0
  76. data/lib/{get_around_owner/models/getaround_message.rb → getaround-api/models/message.rb} +35 -53
  77. data/lib/getaround-api/models/messages_sent.rb +197 -0
  78. data/lib/{get_around_owner/models/getaround_payout.rb → getaround-api/models/payout.rb} +37 -101
  79. data/lib/getaround-api/models/payouts_index.rb +198 -0
  80. data/lib/{get_around_owner/models/getaround_rental.rb → getaround-api/models/rental.rb} +38 -100
  81. data/lib/{get_around_owner/models/getaround_create_messages_request.rb → getaround-api/models/rental_id_messages_json_body.rb} +31 -41
  82. data/lib/getaround-api/models/rental_invoices_index.rb +198 -0
  83. data/lib/getaround-api/models/rental_messages_index.rb +198 -0
  84. data/lib/getaround-api/models/rentals_booked.rb +197 -0
  85. data/lib/getaround-api/models/rentals_canceled.rb +197 -0
  86. data/lib/getaround-api/models/rentals_car_checked_in.rb +197 -0
  87. data/lib/getaround-api/models/rentals_car_checked_out.rb +197 -0
  88. data/lib/getaround-api/models/rentals_car_switched.rb +197 -0
  89. data/lib/getaround-api/models/rentals_index.rb +198 -0
  90. data/lib/getaround-api/models/rentals_times_changed.rb +197 -0
  91. data/lib/getaround-api/models/starts_at.rb +198 -0
  92. data/lib/{get_around_owner/models/getaround_cars_index_inner.rb → getaround-api/models/unavailabilities_created.rb} +32 -58
  93. data/lib/getaround-api/models/unavailabilities_deleted.rb +197 -0
  94. data/lib/getaround-api/models/unavailabilities_index.rb +198 -0
  95. data/lib/{get_around_owner/models/getaround_unavailabilities_created_all_of_data.rb → getaround-api/models/unavailability.rb} +51 -65
  96. data/lib/{get_around_owner/models/getaround_user.rb → getaround-api/models/user.rb} +43 -75
  97. data/lib/getaround-api/models/users_updated.rb +197 -0
  98. data/lib/{get_around_owner/models/getaround_webhook.rb → getaround-api/models/webhook.rb} +38 -47
  99. data/lib/{get_around_owner → getaround-api}/version.rb +5 -6
  100. data/lib/getaround-api.rb +81 -0
  101. data/openapi.yml +2298 -0
  102. data/spec/api/cars_api_spec.rb +13 -14
  103. data/spec/api/checkins_api_spec.rb +13 -14
  104. data/spec/api/checkouts_api_spec.rb +13 -14
  105. data/spec/api/invoices_api_spec.rb +19 -20
  106. data/spec/api/messages_api_spec.rb +14 -15
  107. data/spec/api/payouts_api_spec.rb +13 -14
  108. data/spec/api/rentals_api_spec.rb +13 -14
  109. data/spec/api/unavailabilities_api_spec.rb +14 -16
  110. data/spec/api/users_api_spec.rb +9 -10
  111. data/spec/api_client_spec.rb +225 -0
  112. data/spec/base_object_spec.rb +109 -0
  113. data/spec/{models/getaround_checkins_index_inner_spec.rb → configuration_spec.rb} +26 -21
  114. data/spec/models/{getaround_reason_spec.rb → car_id_spec.rb} +18 -14
  115. data/spec/models/{getaround_unavailabilities_deleted_all_of_data_spec.rb → car_id_unavailabilities_json_body_spec.rb} +24 -20
  116. data/spec/models/{getaround_car_spec.rb → car_spec.rb} +24 -20
  117. data/spec/models/cars_index_spec.rb +34 -0
  118. data/spec/models/{getaround_checkin_spec.rb → checkin_spec.rb} +22 -18
  119. data/spec/models/checkins_index_spec.rb +34 -0
  120. data/spec/models/{getaround_checkout_spec.rb → checkout_spec.rb} +23 -19
  121. data/spec/models/checkouts_index_spec.rb +34 -0
  122. data/spec/models/ends_at_spec.rb +34 -0
  123. data/spec/models/{getaround_invoice_spec.rb → invoice_spec.rb} +27 -31
  124. data/spec/models/invoices_index_spec.rb +34 -0
  125. data/spec/models/{getaround_message_spec.rb → message_spec.rb} +23 -19
  126. data/spec/models/messages_sent_spec.rb +34 -0
  127. data/spec/models/{getaround_payout_spec.rb → payout_spec.rb} +24 -24
  128. data/spec/models/payouts_index_spec.rb +34 -0
  129. data/spec/models/{getaround_create_messages_request_spec.rb → rental_id_messages_json_body_spec.rb} +19 -15
  130. data/spec/models/{getaround_rentals_index_inner_spec.rb → rental_invoices_index_spec.rb} +16 -18
  131. data/spec/models/rental_messages_index_spec.rb +34 -0
  132. data/spec/models/{getaround_rental_spec.rb → rental_spec.rb} +26 -22
  133. data/spec/models/rentals_booked_spec.rb +34 -0
  134. data/spec/models/rentals_canceled_spec.rb +34 -0
  135. data/spec/models/rentals_car_checked_in_spec.rb +34 -0
  136. data/spec/models/rentals_car_checked_out_spec.rb +34 -0
  137. data/spec/models/rentals_car_switched_spec.rb +34 -0
  138. data/spec/models/rentals_index_spec.rb +34 -0
  139. data/spec/models/rentals_times_changed_spec.rb +34 -0
  140. data/spec/models/starts_at_spec.rb +34 -0
  141. data/spec/models/{getaround_cars_index_inner_spec.rb → unavailabilities_created_spec.rb} +16 -18
  142. data/spec/models/{getaround_payouts_index_inner_spec.rb → unavailabilities_deleted_spec.rb} +16 -18
  143. data/spec/models/unavailabilities_index_spec.rb +34 -0
  144. data/spec/models/{getaround_unavailabilities_created_all_of_data_spec.rb → unavailability_spec.rb} +22 -18
  145. data/spec/models/{getaround_user_spec.rb → user_spec.rb} +31 -27
  146. data/spec/models/users_updated_spec.rb +34 -0
  147. data/spec/models/{getaround_webhook_spec.rb → webhook_spec.rb} +21 -17
  148. data/spec/spec_helper.rb +5 -6
  149. metadata +237 -132
  150. data/lib/get_around_owner/api/checkins_api.rb +0 -82
  151. data/lib/get_around_owner/api/checkouts_api.rb +0 -82
  152. data/lib/get_around_owner/api/rentals_api.rb +0 -262
  153. data/lib/get_around_owner/api/unavailabilities_api.rb +0 -142
  154. data/lib/get_around_owner/api/users_api.rb +0 -82
  155. data/lib/get_around_owner/models/getaround_checkins_index_inner.rb +0 -222
  156. data/lib/get_around_owner/models/getaround_create_unavailabilities_request.rb +0 -283
  157. data/lib/get_around_owner/models/getaround_invoice_charges_inner.rb +0 -225
  158. data/lib/get_around_owner/models/getaround_invoices_index_inner.rb +0 -223
  159. data/lib/get_around_owner/models/getaround_messages_sent.rb +0 -257
  160. data/lib/get_around_owner/models/getaround_messages_sent_all_of_data.rb +0 -225
  161. data/lib/get_around_owner/models/getaround_payout_invoices_inner.rb +0 -223
  162. data/lib/get_around_owner/models/getaround_payouts_index_inner.rb +0 -223
  163. data/lib/get_around_owner/models/getaround_reason.rb +0 -45
  164. data/lib/get_around_owner/models/getaround_rental_invoices_index_inner.rb +0 -223
  165. data/lib/get_around_owner/models/getaround_rental_messages_index_inner.rb +0 -223
  166. data/lib/get_around_owner/models/getaround_rentals_booked.rb +0 -257
  167. data/lib/get_around_owner/models/getaround_rentals_canceled.rb +0 -257
  168. data/lib/get_around_owner/models/getaround_rentals_car_checked_in.rb +0 -257
  169. data/lib/get_around_owner/models/getaround_rentals_car_checked_out.rb +0 -257
  170. data/lib/get_around_owner/models/getaround_rentals_car_switched.rb +0 -257
  171. data/lib/get_around_owner/models/getaround_rentals_times_changed.rb +0 -257
  172. data/lib/get_around_owner/models/getaround_unavailabilities_created.rb +0 -257
  173. data/lib/get_around_owner/models/getaround_unavailabilities_deleted.rb +0 -257
  174. data/lib/get_around_owner/models/getaround_unavailabilities_deleted_all_of_data.rb +0 -235
  175. data/lib/get_around_owner/models/getaround_unavailability.rb +0 -302
  176. data/lib/get_around_owner/models/getaround_users_updated.rb +0 -257
  177. data/lib/get_around_owner.rb +0 -86
  178. data/spec/models/getaround_create_unavailabilities_request_spec.rb +0 -52
  179. data/spec/models/getaround_destroy_unavailability_request_spec.rb +0 -42
  180. data/spec/models/getaround_invoice_charges_inner_spec.rb +0 -42
  181. data/spec/models/getaround_invoices_index_inner_spec.rb +0 -36
  182. data/spec/models/getaround_messages_sent_all_of_data_spec.rb +0 -42
  183. data/spec/models/getaround_messages_sent_spec.rb +0 -48
  184. data/spec/models/getaround_payout_invoices_inner_spec.rb +0 -36
  185. data/spec/models/getaround_rental_invoices_index_inner_spec.rb +0 -36
  186. data/spec/models/getaround_rental_messages_index_inner_spec.rb +0 -36
  187. data/spec/models/getaround_rentals_booked_all_of_data_spec.rb +0 -36
  188. data/spec/models/getaround_rentals_booked_spec.rb +0 -48
  189. data/spec/models/getaround_rentals_canceled_spec.rb +0 -48
  190. data/spec/models/getaround_rentals_car_checked_in_spec.rb +0 -48
  191. data/spec/models/getaround_rentals_car_checked_out_spec.rb +0 -48
  192. data/spec/models/getaround_rentals_car_switched_spec.rb +0 -48
  193. data/spec/models/getaround_rentals_times_changed_spec.rb +0 -48
  194. data/spec/models/getaround_unavailabilities_created_spec.rb +0 -48
  195. data/spec/models/getaround_unavailabilities_deleted_spec.rb +0 -48
  196. data/spec/models/getaround_unavailability_spec.rb +0 -58
  197. data/spec/models/getaround_users_updated_all_of_data_spec.rb +0 -36
  198. data/spec/models/getaround_users_updated_spec.rb +0 -48
@@ -1,21 +1,19 @@
1
1
  =begin
2
2
  #Getaround Owner API
3
3
 
4
- ## Quick Start The Owner API uses the JSON format, and must be accessed over a [secure connection](https://en.wikipedia.org/wiki/HTTPS). Let’s assume that the access token provided by your account manager is “TOKEN”. Here’s how to get the list of ids of all your invoices from the first week of August with a shell script: ```bash query=\"end_date=2018-08-08T00%3A00%3A00%2B00%3A00&start_date=2018-08-01T00%3A00%3A00%2B00%3A00\" curl -i \"https://api-eu.getaround.com/owner/v1/invoices?${query}\" \\ -H \"Authorization: Bearer TOKEN\" \\ -H \"Accept:application/json\" \\ -H \"Content-Type:application/json\" ``` And here’s how to get the invoice with the id 12345: ```bash curl -i \"https://api-eu.getaround.com/owner/v1/invoices/12345\" \\ -H \"Authorization: Bearer TOKEN\" \\ -H \"Accept: application/json\" \\ -H \"Content-Type: application/json\"\" ``` See the [endpoints section](#tag/Invoices) of this guide for details about the response format. Dates in request params should follow the ISO 8601 standard. # Authentication All requests must be authenticated with a [bearer token header](https://tools.ietf.org/html/rfc6750#section-2.1). You token will be sent to you by your account manager. Unauthenticated requests will return a 401 status. # Pagination The page number and the number of items per page can be set with the “page” and “per_page” params. For example, this request will return the second page of invoices, and 50 invoices per page: `https://api-eu.getaround.com/owner/v1/invoices?page=2&per_page=50` Both of these params are optional. The default page size is 30 items. The Getaround Owner API follows the [RFC 8288 convention](https://datatracker.ietf.org/doc/html/rfc8288) of using the `Link` header to provide the `next` page URL. Please don't build the pagination URLs yourself. The `next` page will be missing when you are requesting the last available page. Here's an example response header from requesting the second page of invoices `https://api-eu.getaround.com/owner/v1/invoices?page=2&per_page=50` ``` Link: <https://api-eu.getaround.com/owner/v1/invoices?page=3&per_page=50>; rel=\"next\" ``` # Throttling policy and Date range limitation We have throttling policy that prevents you to perform more than 100 requests per min from the same IP. Also, there is a limitation on the size of the range of dates given in params in some requests. All requests that need start_date and end_date, do not accept a range bigger than 30 days. # Webhooks Getaround can send webhook events that notify your application when certain events happen on your account. This is especially useful to follow the lifecycle of rentals, tracking for example bookings or cancellations. ### Setup To set up an endpoint, you need to define a route on your server for receiving events, and then <a href=\"mailto:owner-api@getaround.com\">ask Getaround</a> to add this URL to your account. To acknowledge receipt of a event, your endpoint must: - Return a `2xx` HTTP status code. - Be a secure `https` endpoint with a valid SSL certificate. ### Testing Once Getaround has set up the endpoint, and it is properly configured as described above, a test `ping` event can be sent by clicking the button below: <form action=\"/docs/api/owner/fire_ping_webhook\" method=\"post\"><input type=\"submit\" value=\"Send Ping Event\"></form> You should receive the following JSON payload: ```json { \"data\": { \"ping\": \"pong\" }, \"type\": \"ping\", \"occurred_at\": \"2019-04-18T08:30:05Z\" } ``` ### Retries Webhook deliveries will be attempted for up to three days with an exponential back off. After that point the delivery will be abandoned. ### Verifying Signatures Getaround will also provide you with a secret token, which is used to create a hash signature with each payload. This hash signature is passed along with each request in the headers as `X-Drivy-Signature`. Suppose you have a basic server listening to webhooks that looks like this: ```ruby require 'sinatra' require 'json' post '/payload' do push = JSON.parse(params[:payload]) \"I got some JSON: \#{push.inspect}\" end ``` The goal is to compute a hash using your secret token, and ensure that the hash from Getaround matches. Getaround uses an HMAC hexdigest to compute the hash, so you could change your server to look a little like this: ```ruby post '/payload' do request.body.rewind payload_body = request.body.read verify_signature(payload_body) push = JSON.parse(params[:payload]) \"I got some JSON: \#{push.inspect}\" end def verify_signature(payload_body) signature = 'sha1=' + OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha1'), ENV['SECRET_TOKEN'], payload_body) return halt 500, \"Signatures didn't match!\" unless Rack::Utils.secure_compare(signature, request.env['HTTP_X_DRIVY_SIGNATURE']) end ``` Obviously, your language and server implementations may differ from this code. There are a couple of important things to point out, however: No matter which implementation you use, the hash signature starts with `sha1=`, using the key of your secret token and your payload body. Using a plain `==` operator is not advised. A method like secure_compare performs a \"constant time\" string comparison, which renders it safe from certain timing attacks against regular equality operators. ### Best Practices - **Acknowledge events immediately**. If your webhook script performs complex logic, or makes network calls, it’s possible that the script would time out before Getaround sees its complete execution. Ideally, your webhook handler code (acknowledging receipt of an event by returning a `2xx` status code) is separate of any other logic you do for that event. - **Handle duplicate events**. Webhook endpoints might occasionally receive the same event more than once. We advise you to guard against duplicated event receipts by making your event processing idempotent. One way of doing this is logging the events you’ve processed, and then not processing already-logged events. - **Do not expect events in order**. Getaround does not guarantee delivery of events in the order in which they are generated. Your endpoint should therefore handle this accordingly. We do provide an `occurred_at` timestamp for each event, though, to help reconcile ordering.
4
+ ## Quick Start The Owner API uses the JSON format, and must be accessed over a [secure connection](https://en.wikipedia.org/wiki/HTTPS). Let’s assume that the access token provided by your account manager is “TOKEN”. Here’s how to get the list of ids of all your invoices from the first week of August with a shell script: ```bash query=\"end_date=2018-08-08T00%3A00%3A00%2B00%3A00&start_date=2018-08-01T00%3A00%3A00%2B00%3A00\" curl -i \"https://api-eu.getaround.com/owner/v1/invoices?${query}\" \\ -H \"Authorization: Bearer TOKEN\" \\ -H \"Accept:application/json\" \\ -H \"Content-Type:application/json\" ``` And here’s how to get the invoice with the id 12345: ```bash curl -i \"https://api-eu.getaround.com/owner/v1/invoices/12345\" \\ -H \"Authorization: Bearer TOKEN\" \\ -H \"Accept: application/json\" \\ -H \"Content-Type: application/json\"\" ``` See the [endpoints section](#tag/Invoices) of this guide for details about the response format. Dates in request params should follow the ISO 8601 standard. # Authentication All requests must be authenticated with a [bearer token header](https://tools.ietf.org/html/rfc6750#section-2.1). You token will be sent to you by your account manager. Unauthenticated requests will return a 401 status. # Pagination The page number and the number of items per page can be set with the “page” and “per_page” params. For example, this request will return the second page of invoices, and 50 invoices per page: `https://api-eu.getaround.com/owner/v1/invoices?page=2&per_page=50` Both of these params are optional. The default page size is 30 items. The Getaround Owner API follows the [RFC 8288 convention](https://datatracker.ietf.org/doc/html/rfc8288) of using the `Link` header to provide the `next` page URL. Please don't build the pagination URLs yourself. The `next` page will be missing when you are requesting the last available page. Here's an example response header from requesting the second page of invoices `https://api-eu.getaround.com/owner/v1/invoices?page=2&per_page=50` ``` Link: <https://api-eu.getaround.com/owner/v1/invoices?page=3&per_page=50>; rel=\"next\" ``` # Throttling policy and Date range limitation We have throttling policy that prevents you to perform more than 100 requests per min from the same IP. Also, there is a limitation on the size of the range of dates given in params in some requests. All requests that need start_date and end_date, do not accept a range bigger than 30 days. # Webhooks Getaround can send webhook events that notify your application when certain events happen on your account. This is especially useful to follow the lifecycle of rentals, tracking for example bookings or cancellations. ### Setup To set up an endpoint, you need to define a route on your server for receiving events, and then <a href=\"mailto:owner-api@getaround.com\">ask Getaround</a> to add this URL to your account. To acknowledge receipt of a event, your endpoint must: - Return a `2xx` HTTP status code. - Be a secure `https` endpoint with a valid SSL certificate. ### Testing Once Getaround has set up the endpoint, and it is properly configured as described above, a test `ping` event can be sent by clicking the button below: <form action=\"/docs/api/owner/fire_ping_webhook\" method=\"post\"><input type=\"submit\" value=\"Send Ping Event\"></form> You should receive the following JSON payload: ```json { \"data\": { \"ping\": \"pong\" }, \"type\": \"ping\", \"occurred_at\": \"2019-04-18T08:30:05Z\" } ``` ### Retries Webhook deliveries will be attempted for up to three days with an exponential back off. After that point the delivery will be abandoned. ### Verifying Signatures Getaround will also provide you with a secret token, which is used to create a hash signature with each payload. This hash signature is passed along with each request in the headers as `X-Drivy-Signature`. Suppose you have a basic server listening to webhooks that looks like this: ```ruby require 'sinatra' require 'json' post '/payload' do push = JSON.parse(params[:payload]) \"I got some JSON: #{push.inspect}\" end ``` The goal is to compute a hash using your secret token, and ensure that the hash from Getaround matches. Getaround uses an HMAC hexdigest to compute the hash, so you could change your server to look a little like this: ```ruby post '/payload' do request.body.rewind payload_body = request.body.read verify_signature(payload_body) push = JSON.parse(params[:payload]) \"I got some JSON: #{push.inspect}\" end def verify_signature(payload_body) signature = 'sha1=' + OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha1'), ENV['SECRET_TOKEN'], payload_body) return halt 500, \"Signatures didn't match!\" unless Rack::Utils.secure_compare(signature, request.env['HTTP_X_DRIVY_SIGNATURE']) end ``` Obviously, your language and server implementations may differ from this code. There are a couple of important things to point out, however: No matter which implementation you use, the hash signature starts with `sha1=`, using the key of your secret token and your payload body. Using a plain `==` operator is not advised. A method like secure_compare performs a \"constant time\" string comparison, which renders it safe from certain timing attacks against regular equality operators. ### Best Practices - **Acknowledge events immediately**. If your webhook script performs complex logic, or makes network calls, it’s possible that the script would time out before Getaround sees its complete execution. Ideally, your webhook handler code (acknowledging receipt of an event by returning a `2xx` status code) is separate of any other logic you do for that event. - **Handle duplicate events**. Webhook endpoints might occasionally receive the same event more than once. We advise you to guard against duplicated event receipts by making your event processing idempotent. One way of doing this is logging the events you’ve processed, and then not processing already-logged events. - **Do not expect events in order**. Getaround does not guarantee delivery of events in the order in which they are generated. Your endpoint should therefore handle this accordingly. We do provide an `occurred_at` timestamp for each event, though, to help reconcile ordering.
5
5
 
6
- The version of the OpenAPI document: 1.0.0
6
+ OpenAPI spec version: 1.0.0
7
7
  Contact: owner-api@getaround.com
8
- Generated by: https://openapi-generator.tech
9
- Generator version: 7.6.0
10
-
8
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
9
+ Swagger Codegen version: 3.0.66
11
10
  =end
12
11
 
13
12
  require 'date'
14
- require 'time'
15
13
 
16
14
  module GetAroundOwner
17
15
  # An invoice.
18
- class GetaroundInvoice
16
+ class Invoice
19
17
  # The invoice ID
20
18
  attr_accessor :id
21
19
 
@@ -43,28 +41,6 @@ module GetAroundOwner
43
41
  # Array of charges
44
42
  attr_accessor :charges
45
43
 
46
- class EnumAttributeValidator
47
- attr_reader :datatype
48
- attr_reader :allowable_values
49
-
50
- def initialize(datatype, allowable_values)
51
- @allowable_values = allowable_values.map do |value|
52
- case datatype.to_s
53
- when /Integer/i
54
- value.to_i
55
- when /Float/i
56
- value.to_f
57
- else
58
- value
59
- end
60
- end
61
- end
62
-
63
- def valid?(value)
64
- !value || allowable_values.include?(value)
65
- end
66
- end
67
-
68
44
  # Attribute mapping from ruby-style variable name to JSON key.
69
45
  def self.attribute_map
70
46
  {
@@ -80,112 +56,91 @@ module GetAroundOwner
80
56
  }
81
57
  end
82
58
 
83
- # Returns all the JSON keys this model knows about
84
- def self.acceptable_attributes
85
- attribute_map.values
86
- end
87
-
88
59
  # Attribute type mapping.
89
60
  def self.openapi_types
90
61
  {
91
- :'id' => :'Integer',
92
- :'pdf_url' => :'String',
93
- :'product_type' => :'String',
94
- :'product_id' => :'Integer',
95
- :'emitted_at' => :'Time',
96
- :'total_price' => :'Integer',
97
- :'currency' => :'String',
98
- :'entity_type' => :'String',
99
- :'charges' => :'Array<GetaroundInvoiceChargesInner>'
62
+ :'id' => :'Object',
63
+ :'pdf_url' => :'Object',
64
+ :'product_type' => :'Object',
65
+ :'product_id' => :'Object',
66
+ :'emitted_at' => :'Object',
67
+ :'total_price' => :'Object',
68
+ :'currency' => :'Object',
69
+ :'entity_type' => :'Object',
70
+ :'charges' => :'Object'
100
71
  }
101
72
  end
102
73
 
103
74
  # List of attributes with nullable: true
104
75
  def self.openapi_nullable
105
76
  Set.new([
106
- :'pdf_url',
107
77
  ])
108
78
  end
109
-
79
+
110
80
  # Initializes the object
111
81
  # @param [Hash] attributes Model attributes in the form of hash
112
82
  def initialize(attributes = {})
113
83
  if (!attributes.is_a?(Hash))
114
- fail ArgumentError, "The input argument (attributes) must be a hash in `GetAroundOwner::GetaroundInvoice` initialize method"
84
+ fail ArgumentError, "The input argument (attributes) must be a hash in `GetAroundOwner::Invoice` initialize method"
115
85
  end
116
86
 
117
87
  # check to see if the attribute exists and convert string to symbol for hash key
118
88
  attributes = attributes.each_with_object({}) { |(k, v), h|
119
89
  if (!self.class.attribute_map.key?(k.to_sym))
120
- fail ArgumentError, "`#{k}` is not a valid attribute in `GetAroundOwner::GetaroundInvoice`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
90
+ fail ArgumentError, "`#{k}` is not a valid attribute in `GetAroundOwner::Invoice`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
121
91
  end
122
92
  h[k.to_sym] = v
123
93
  }
124
94
 
125
95
  if attributes.key?(:'id')
126
96
  self.id = attributes[:'id']
127
- else
128
- self.id = nil
129
97
  end
130
98
 
131
99
  if attributes.key?(:'pdf_url')
132
100
  self.pdf_url = attributes[:'pdf_url']
133
- else
134
- self.pdf_url = nil
135
101
  end
136
102
 
137
103
  if attributes.key?(:'product_type')
138
104
  self.product_type = attributes[:'product_type']
139
- else
140
- self.product_type = nil
141
105
  end
142
106
 
143
107
  if attributes.key?(:'product_id')
144
108
  self.product_id = attributes[:'product_id']
145
- else
146
- self.product_id = nil
147
109
  end
148
110
 
149
111
  if attributes.key?(:'emitted_at')
150
112
  self.emitted_at = attributes[:'emitted_at']
151
- else
152
- self.emitted_at = nil
153
113
  end
154
114
 
155
115
  if attributes.key?(:'total_price')
156
116
  self.total_price = attributes[:'total_price']
157
- else
158
- self.total_price = nil
159
117
  end
160
118
 
161
119
  if attributes.key?(:'currency')
162
120
  self.currency = attributes[:'currency']
163
- else
164
- self.currency = nil
165
121
  end
166
122
 
167
123
  if attributes.key?(:'entity_type')
168
124
  self.entity_type = attributes[:'entity_type']
169
- else
170
- self.entity_type = nil
171
125
  end
172
126
 
173
127
  if attributes.key?(:'charges')
174
- if (value = attributes[:'charges']).is_a?(Array)
175
- self.charges = value
176
- end
128
+ self.charges = attributes[:'charges']
177
129
  end
178
130
  end
179
131
 
180
132
  # Show invalid properties with the reasons. Usually used together with valid?
181
133
  # @return Array for valid properties with the reasons
182
134
  def list_invalid_properties
183
- warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
184
135
  invalid_properties = Array.new
185
136
  if @id.nil?
186
137
  invalid_properties.push('invalid value for "id", id cannot be nil.')
187
138
  end
188
139
 
140
+ if @pdf_url.nil?
141
+ invalid_properties.push('invalid value for "pdf_url", pdf_url cannot be nil.')
142
+ end
143
+
189
144
  if @product_type.nil?
190
145
  invalid_properties.push('invalid value for "product_type", product_type cannot be nil.')
191
146
  end
@@ -216,41 +171,17 @@ module GetAroundOwner
216
171
  # Check to see if the all the properties in the model are valid
217
172
  # @return true if the model is valid
218
173
  def valid?
219
- warn '[DEPRECATED] the `valid?` method is obsolete'
220
174
  return false if @id.nil?
175
+ return false if @pdf_url.nil?
221
176
  return false if @product_type.nil?
222
- product_type_validator = EnumAttributeValidator.new('String', ["Rental"])
223
- return false unless product_type_validator.valid?(@product_type)
224
177
  return false if @product_id.nil?
225
178
  return false if @emitted_at.nil?
226
179
  return false if @total_price.nil?
227
180
  return false if @currency.nil?
228
181
  return false if @entity_type.nil?
229
- entity_type_validator = EnumAttributeValidator.new('String', ["Company", "User"])
230
- return false unless entity_type_validator.valid?(@entity_type)
231
182
  true
232
183
  end
233
184
 
234
- # Custom attribute writer method checking allowed values (enum).
235
- # @param [Object] product_type Object to be assigned
236
- def product_type=(product_type)
237
- validator = EnumAttributeValidator.new('String', ["Rental"])
238
- unless validator.valid?(product_type)
239
- fail ArgumentError, "invalid value for \"product_type\", must be one of #{validator.allowable_values}."
240
- end
241
- @product_type = product_type
242
- end
243
-
244
- # Custom attribute writer method checking allowed values (enum).
245
- # @param [Object] entity_type Object to be assigned
246
- def entity_type=(entity_type)
247
- validator = EnumAttributeValidator.new('String', ["Company", "User"])
248
- unless validator.valid?(entity_type)
249
- fail ArgumentError, "invalid value for \"entity_type\", must be one of #{validator.allowable_values}."
250
- end
251
- @entity_type = entity_type
252
- end
253
-
254
185
  # Checks equality by comparing each attribute.
255
186
  # @param [Object] Object to be compared
256
187
  def ==(o)
@@ -283,33 +214,39 @@ module GetAroundOwner
283
214
  # @param [Hash] attributes Model attributes in the form of hash
284
215
  # @return [Object] Returns the model itself
285
216
  def self.build_from_hash(attributes)
217
+ new.build_from_hash(attributes)
218
+ end
219
+
220
+ # Builds the object from hash
221
+ # @param [Hash] attributes Model attributes in the form of hash
222
+ # @return [Object] Returns the model itself
223
+ def build_from_hash(attributes)
286
224
  return nil unless attributes.is_a?(Hash)
287
- attributes = attributes.transform_keys(&:to_sym)
288
- transformed_hash = {}
289
- openapi_types.each_pair do |key, type|
290
- if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
291
- transformed_hash["#{key}"] = nil
292
- elsif type =~ /\AArray<(.*)>/i
225
+ self.class.openapi_types.each_pair do |key, type|
226
+ if type =~ /\AArray<(.*)>/i
293
227
  # check to ensure the input is an array given that the attribute
294
228
  # is documented as an array but the input is not
295
- if attributes[attribute_map[key]].is_a?(Array)
296
- transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
229
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
230
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
297
231
  end
298
- elsif !attributes[attribute_map[key]].nil?
299
- transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
232
+ elsif !attributes[self.class.attribute_map[key]].nil?
233
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
234
+ elsif attributes[self.class.attribute_map[key]].nil? && self.class.openapi_nullable.include?(key)
235
+ self.send("#{key}=", nil)
300
236
  end
301
237
  end
302
- new(transformed_hash)
238
+
239
+ self
303
240
  end
304
241
 
305
242
  # Deserializes the data based on type
306
243
  # @param string type Data type
307
244
  # @param string value Value to be deserialized
308
245
  # @return [Object] Deserialized data
309
- def self._deserialize(type, value)
246
+ def _deserialize(type, value)
310
247
  case type.to_sym
311
- when :Time
312
- Time.parse(value)
248
+ when :DateTime
249
+ DateTime.parse(value)
313
250
  when :Date
314
251
  Date.parse(value)
315
252
  when :String
@@ -339,9 +276,7 @@ module GetAroundOwner
339
276
  end
340
277
  end
341
278
  else # model
342
- # models (e.g. Pet) or oneOf
343
- klass = GetAroundOwner.const_get(type)
344
- klass.respond_to?(:openapi_any_of) || klass.respond_to?(:openapi_one_of) ? klass.build(value) : klass.build_from_hash(value)
279
+ GetAroundOwner.const_get(type).build_from_hash(value)
345
280
  end
346
281
  end
347
282
 
@@ -389,8 +324,5 @@ module GetAroundOwner
389
324
  else
390
325
  value
391
326
  end
392
- end
393
-
394
- end
395
-
327
+ end end
396
328
  end
@@ -0,0 +1,198 @@
1
+ =begin
2
+ #Getaround Owner API
3
+
4
+ ## Quick Start The Owner API uses the JSON format, and must be accessed over a [secure connection](https://en.wikipedia.org/wiki/HTTPS). Let’s assume that the access token provided by your account manager is “TOKEN”. Here’s how to get the list of ids of all your invoices from the first week of August with a shell script: ```bash query=\"end_date=2018-08-08T00%3A00%3A00%2B00%3A00&start_date=2018-08-01T00%3A00%3A00%2B00%3A00\" curl -i \"https://api-eu.getaround.com/owner/v1/invoices?${query}\" \\ -H \"Authorization: Bearer TOKEN\" \\ -H \"Accept:application/json\" \\ -H \"Content-Type:application/json\" ``` And here’s how to get the invoice with the id 12345: ```bash curl -i \"https://api-eu.getaround.com/owner/v1/invoices/12345\" \\ -H \"Authorization: Bearer TOKEN\" \\ -H \"Accept: application/json\" \\ -H \"Content-Type: application/json\"\" ``` See the [endpoints section](#tag/Invoices) of this guide for details about the response format. Dates in request params should follow the ISO 8601 standard. # Authentication All requests must be authenticated with a [bearer token header](https://tools.ietf.org/html/rfc6750#section-2.1). You token will be sent to you by your account manager. Unauthenticated requests will return a 401 status. # Pagination The page number and the number of items per page can be set with the “page” and “per_page” params. For example, this request will return the second page of invoices, and 50 invoices per page: `https://api-eu.getaround.com/owner/v1/invoices?page=2&per_page=50` Both of these params are optional. The default page size is 30 items. The Getaround Owner API follows the [RFC 8288 convention](https://datatracker.ietf.org/doc/html/rfc8288) of using the `Link` header to provide the `next` page URL. Please don't build the pagination URLs yourself. The `next` page will be missing when you are requesting the last available page. Here's an example response header from requesting the second page of invoices `https://api-eu.getaround.com/owner/v1/invoices?page=2&per_page=50` ``` Link: <https://api-eu.getaround.com/owner/v1/invoices?page=3&per_page=50>; rel=\"next\" ``` # Throttling policy and Date range limitation We have throttling policy that prevents you to perform more than 100 requests per min from the same IP. Also, there is a limitation on the size of the range of dates given in params in some requests. All requests that need start_date and end_date, do not accept a range bigger than 30 days. # Webhooks Getaround can send webhook events that notify your application when certain events happen on your account. This is especially useful to follow the lifecycle of rentals, tracking for example bookings or cancellations. ### Setup To set up an endpoint, you need to define a route on your server for receiving events, and then <a href=\"mailto:owner-api@getaround.com\">ask Getaround</a> to add this URL to your account. To acknowledge receipt of a event, your endpoint must: - Return a `2xx` HTTP status code. - Be a secure `https` endpoint with a valid SSL certificate. ### Testing Once Getaround has set up the endpoint, and it is properly configured as described above, a test `ping` event can be sent by clicking the button below: <form action=\"/docs/api/owner/fire_ping_webhook\" method=\"post\"><input type=\"submit\" value=\"Send Ping Event\"></form> You should receive the following JSON payload: ```json { \"data\": { \"ping\": \"pong\" }, \"type\": \"ping\", \"occurred_at\": \"2019-04-18T08:30:05Z\" } ``` ### Retries Webhook deliveries will be attempted for up to three days with an exponential back off. After that point the delivery will be abandoned. ### Verifying Signatures Getaround will also provide you with a secret token, which is used to create a hash signature with each payload. This hash signature is passed along with each request in the headers as `X-Drivy-Signature`. Suppose you have a basic server listening to webhooks that looks like this: ```ruby require 'sinatra' require 'json' post '/payload' do push = JSON.parse(params[:payload]) \"I got some JSON: #{push.inspect}\" end ``` The goal is to compute a hash using your secret token, and ensure that the hash from Getaround matches. Getaround uses an HMAC hexdigest to compute the hash, so you could change your server to look a little like this: ```ruby post '/payload' do request.body.rewind payload_body = request.body.read verify_signature(payload_body) push = JSON.parse(params[:payload]) \"I got some JSON: #{push.inspect}\" end def verify_signature(payload_body) signature = 'sha1=' + OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha1'), ENV['SECRET_TOKEN'], payload_body) return halt 500, \"Signatures didn't match!\" unless Rack::Utils.secure_compare(signature, request.env['HTTP_X_DRIVY_SIGNATURE']) end ``` Obviously, your language and server implementations may differ from this code. There are a couple of important things to point out, however: No matter which implementation you use, the hash signature starts with `sha1=`, using the key of your secret token and your payload body. Using a plain `==` operator is not advised. A method like secure_compare performs a \"constant time\" string comparison, which renders it safe from certain timing attacks against regular equality operators. ### Best Practices - **Acknowledge events immediately**. If your webhook script performs complex logic, or makes network calls, it’s possible that the script would time out before Getaround sees its complete execution. Ideally, your webhook handler code (acknowledging receipt of an event by returning a `2xx` status code) is separate of any other logic you do for that event. - **Handle duplicate events**. Webhook endpoints might occasionally receive the same event more than once. We advise you to guard against duplicated event receipts by making your event processing idempotent. One way of doing this is logging the events you’ve processed, and then not processing already-logged events. - **Do not expect events in order**. Getaround does not guarantee delivery of events in the order in which they are generated. Your endpoint should therefore handle this accordingly. We do provide an `occurred_at` timestamp for each event, though, to help reconcile ordering.
5
+
6
+ OpenAPI spec version: 1.0.0
7
+ Contact: owner-api@getaround.com
8
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
9
+ Swagger Codegen version: 3.0.66
10
+ =end
11
+
12
+ require 'date'
13
+
14
+ module GetAroundOwner
15
+ # An array of invoices
16
+ class InvoicesIndex
17
+ # Attribute mapping from ruby-style variable name to JSON key.
18
+ def self.attribute_map
19
+ {
20
+ }
21
+ end
22
+
23
+ # Attribute type mapping.
24
+ def self.openapi_types
25
+ {
26
+ }
27
+ end
28
+
29
+ # List of attributes with nullable: true
30
+ def self.openapi_nullable
31
+ Set.new([
32
+ ])
33
+ end
34
+
35
+ # Initializes the object
36
+ # @param [Hash] attributes Model attributes in the form of hash
37
+ def initialize(attributes = {})
38
+ if (!attributes.is_a?(Hash))
39
+ fail ArgumentError, "The input argument (attributes) must be a hash in `GetAroundOwner::InvoicesIndex` initialize method"
40
+ end
41
+
42
+ # check to see if the attribute exists and convert string to symbol for hash key
43
+ attributes = attributes.each_with_object({}) { |(k, v), h|
44
+ if (!self.class.attribute_map.key?(k.to_sym))
45
+ fail ArgumentError, "`#{k}` is not a valid attribute in `GetAroundOwner::InvoicesIndex`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
46
+ end
47
+ h[k.to_sym] = v
48
+ }
49
+ end
50
+
51
+ # Show invalid properties with the reasons. Usually used together with valid?
52
+ # @return Array for valid properties with the reasons
53
+ def list_invalid_properties
54
+ invalid_properties = Array.new
55
+ invalid_properties
56
+ end
57
+
58
+ # Check to see if the all the properties in the model are valid
59
+ # @return true if the model is valid
60
+ def valid?
61
+ true
62
+ end
63
+
64
+ # Checks equality by comparing each attribute.
65
+ # @param [Object] Object to be compared
66
+ def ==(o)
67
+ return true if self.equal?(o)
68
+ self.class == o.class
69
+ end
70
+
71
+ # @see the `==` method
72
+ # @param [Object] Object to be compared
73
+ def eql?(o)
74
+ self == o
75
+ end
76
+
77
+ # Calculates hash code according to all attributes.
78
+ # @return [Integer] Hash code
79
+ def hash
80
+ [].hash
81
+ end
82
+
83
+ # Builds the object from hash
84
+ # @param [Hash] attributes Model attributes in the form of hash
85
+ # @return [Object] Returns the model itself
86
+ def self.build_from_hash(attributes)
87
+ new.build_from_hash(attributes)
88
+ end
89
+
90
+ # Builds the object from hash
91
+ # @param [Hash] attributes Model attributes in the form of hash
92
+ # @return [Object] Returns the model itself
93
+ def build_from_hash(attributes)
94
+ return nil unless attributes.is_a?(Hash)
95
+ self.class.openapi_types.each_pair do |key, type|
96
+ if type =~ /\AArray<(.*)>/i
97
+ # check to ensure the input is an array given that the attribute
98
+ # is documented as an array but the input is not
99
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
100
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
101
+ end
102
+ elsif !attributes[self.class.attribute_map[key]].nil?
103
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
104
+ elsif attributes[self.class.attribute_map[key]].nil? && self.class.openapi_nullable.include?(key)
105
+ self.send("#{key}=", nil)
106
+ end
107
+ end
108
+
109
+ self
110
+ end
111
+
112
+ # Deserializes the data based on type
113
+ # @param string type Data type
114
+ # @param string value Value to be deserialized
115
+ # @return [Object] Deserialized data
116
+ def _deserialize(type, value)
117
+ case type.to_sym
118
+ when :DateTime
119
+ DateTime.parse(value)
120
+ when :Date
121
+ Date.parse(value)
122
+ when :String
123
+ value.to_s
124
+ when :Integer
125
+ value.to_i
126
+ when :Float
127
+ value.to_f
128
+ when :Boolean
129
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
130
+ true
131
+ else
132
+ false
133
+ end
134
+ when :Object
135
+ # generic object (usually a Hash), return directly
136
+ value
137
+ when /\AArray<(?<inner_type>.+)>\z/
138
+ inner_type = Regexp.last_match[:inner_type]
139
+ value.map { |v| _deserialize(inner_type, v) }
140
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
141
+ k_type = Regexp.last_match[:k_type]
142
+ v_type = Regexp.last_match[:v_type]
143
+ {}.tap do |hash|
144
+ value.each do |k, v|
145
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
146
+ end
147
+ end
148
+ else # model
149
+ GetAroundOwner.const_get(type).build_from_hash(value)
150
+ end
151
+ end
152
+
153
+ # Returns the string representation of the object
154
+ # @return [String] String presentation of the object
155
+ def to_s
156
+ to_hash.to_s
157
+ end
158
+
159
+ # to_body is an alias to to_hash (backward compatibility)
160
+ # @return [Hash] Returns the object in the form of hash
161
+ def to_body
162
+ to_hash
163
+ end
164
+
165
+ # Returns the object in the form of hash
166
+ # @return [Hash] Returns the object in the form of hash
167
+ def to_hash
168
+ hash = {}
169
+ self.class.attribute_map.each_pair do |attr, param|
170
+ value = self.send(attr)
171
+ if value.nil?
172
+ is_nullable = self.class.openapi_nullable.include?(attr)
173
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
174
+ end
175
+
176
+ hash[param] = _to_hash(value)
177
+ end
178
+ hash
179
+ end
180
+
181
+ # Outputs non-array value in the form of hash
182
+ # For object, use to_hash. Otherwise, just return the value
183
+ # @param [Object] value Any valid value
184
+ # @return [Hash] Returns the value in the form of hash
185
+ def _to_hash(value)
186
+ if value.is_a?(Array)
187
+ value.compact.map { |v| _to_hash(v) }
188
+ elsif value.is_a?(Hash)
189
+ {}.tap do |hash|
190
+ value.each { |k, v| hash[k] = _to_hash(v) }
191
+ end
192
+ elsif value.respond_to? :to_hash
193
+ value.to_hash
194
+ else
195
+ value
196
+ end
197
+ end end
198
+ end