listo-delivery 0.1.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 (77) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +152 -0
  4. data/lib/listo_delivery/client.rb +170 -0
  5. data/lib/listo_delivery/errors.rb +53 -0
  6. data/lib/listo_delivery/generated/api_version.rb +12 -0
  7. data/lib/listo_delivery/generated/client_operations.rb +82 -0
  8. data/lib/listo_delivery/generated/loader.rb +69 -0
  9. data/lib/listo_delivery/generated/models/balance.rb +48 -0
  10. data/lib/listo_delivery/generated/models/cancel_delivery_request.rb +29 -0
  11. data/lib/listo_delivery/generated/models/card_onboarding_link.rb +21 -0
  12. data/lib/listo_delivery/generated/models/card_status.rb +22 -0
  13. data/lib/listo_delivery/generated/models/connect_request.rb +28 -0
  14. data/lib/listo_delivery/generated/models/courier_ping.rb +58 -0
  15. data/lib/listo_delivery/generated/models/create_connect_request_request.rb +35 -0
  16. data/lib/listo_delivery/generated/models/create_connection_request.rb +21 -0
  17. data/lib/listo_delivery/generated/models/create_delivery_request.rb +189 -0
  18. data/lib/listo_delivery/generated/models/create_quote_request.rb +111 -0
  19. data/lib/listo_delivery/generated/models/create_store_owner_request.rb +26 -0
  20. data/lib/listo_delivery/generated/models/create_store_request.rb +104 -0
  21. data/lib/listo_delivery/generated/models/create_withdrawal_request.rb +29 -0
  22. data/lib/listo_delivery/generated/models/delivery.rb +879 -0
  23. data/lib/listo_delivery/generated/models/delivery_courier_location_event.rb +23 -0
  24. data/lib/listo_delivery/generated/models/delivery_list.rb +34 -0
  25. data/lib/listo_delivery/generated/models/delivery_message_skipped.rb +37 -0
  26. data/lib/listo_delivery/generated/models/delivery_message_skipped_event.rb +23 -0
  27. data/lib/listo_delivery/generated/models/delivery_status_changed_event.rb +23 -0
  28. data/lib/listo_delivery/generated/models/delivery_updated_event.rb +23 -0
  29. data/lib/listo_delivery/generated/models/error.rb +56 -0
  30. data/lib/listo_delivery/generated/models/error_response.rb +20 -0
  31. data/lib/listo_delivery/generated/models/event_list.rb +34 -0
  32. data/lib/listo_delivery/generated/models/ledger_entry.rb +62 -0
  33. data/lib/listo_delivery/generated/models/ledger_entry_list.rb +34 -0
  34. data/lib/listo_delivery/generated/models/manifest.rb +20 -0
  35. data/lib/listo_delivery/generated/models/manifest_item.rb +36 -0
  36. data/lib/listo_delivery/generated/models/owner_invitation.rb +27 -0
  37. data/lib/listo_delivery/generated/models/ping.rb +56 -0
  38. data/lib/listo_delivery/generated/models/quote.rb +99 -0
  39. data/lib/listo_delivery/generated/models/refund_delivery_request.rb +28 -0
  40. data/lib/listo_delivery/generated/models/request_log.rb +91 -0
  41. data/lib/listo_delivery/generated/models/request_log_detail.rb +105 -0
  42. data/lib/listo_delivery/generated/models/request_log_list.rb +34 -0
  43. data/lib/listo_delivery/generated/models/reschedule_delivery_request.rb +41 -0
  44. data/lib/listo_delivery/generated/models/same_day_terms.rb +106 -0
  45. data/lib/listo_delivery/generated/models/send_test_webhook_request.rb +22 -0
  46. data/lib/listo_delivery/generated/models/store.rb +235 -0
  47. data/lib/listo_delivery/generated/models/store_balance.rb +48 -0
  48. data/lib/listo_delivery/generated/models/store_connected_event.rb +23 -0
  49. data/lib/listo_delivery/generated/models/store_list.rb +34 -0
  50. data/lib/listo_delivery/generated/models/store_updated_event.rb +23 -0
  51. data/lib/listo_delivery/generated/models/update_store_request.rb +94 -0
  52. data/lib/listo_delivery/generated/models/webhook_delivery.rb +99 -0
  53. data/lib/listo_delivery/generated/models/webhook_delivery_list.rb +34 -0
  54. data/lib/listo_delivery/generated/models/webhook_event.rb +69 -0
  55. data/lib/listo_delivery/generated/models/webhook_event_envelope.rb +35 -0
  56. data/lib/listo_delivery/generated/models/withdrawal.rb +91 -0
  57. data/lib/listo_delivery/generated/models/withdrawal_list.rb +34 -0
  58. data/lib/listo_delivery/generated/models/withdrawal_updated_event.rb +23 -0
  59. data/lib/listo_delivery/generated/resources/balance.rb +43 -0
  60. data/lib/listo_delivery/generated/resources/card_onboarding.rb +70 -0
  61. data/lib/listo_delivery/generated/resources/connect_requests.rb +31 -0
  62. data/lib/listo_delivery/generated/resources/connections.rb +31 -0
  63. data/lib/listo_delivery/generated/resources/deliveries.rb +128 -0
  64. data/lib/listo_delivery/generated/resources/events.rb +59 -0
  65. data/lib/listo_delivery/generated/resources/ledger.rb +47 -0
  66. data/lib/listo_delivery/generated/resources/quotes.rb +31 -0
  67. data/lib/listo_delivery/generated/resources/request_logs.rb +45 -0
  68. data/lib/listo_delivery/generated/resources/stores.rb +143 -0
  69. data/lib/listo_delivery/generated/resources/webhooks.rb +46 -0
  70. data/lib/listo_delivery/generated/resources/withdrawals.rb +60 -0
  71. data/lib/listo_delivery/model.rb +69 -0
  72. data/lib/listo_delivery/util.rb +76 -0
  73. data/lib/listo_delivery/version.rb +7 -0
  74. data/lib/listo_delivery/webhooks.rb +98 -0
  75. data/lib/listo_delivery.rb +16 -0
  76. data/listo_delivery.gemspec +27 -0
  77. metadata +120 -0
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ # GENERATED from Listo's API definition (API 1.37.0). Do not edit by hand:
4
+ # this file is rewritten whenever the SDK is regenerated.
5
+
6
+ module ListoDelivery
7
+ module Resources
8
+ # Operations under "connections".
9
+ class Connections
10
+ # @api private
11
+ def initialize(client)
12
+ @client = client
13
+ end
14
+
15
+ # Exchange an approval for the store.
16
+ #
17
+ # POST /v1/connections
18
+ # @param body [Hash, nil] request body (also accepted as keywords)
19
+ # @return [Models::Store]
20
+ # @raise [ListoDelivery::Error]
21
+ def create(body = nil, **fields)
22
+ @client.execute(
23
+ "POST",
24
+ "/v1/connections",
25
+ body: Util.body(body, fields, required: "createConnection"),
26
+ model: Models::Store
27
+ )
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,128 @@
1
+ # frozen_string_literal: true
2
+
3
+ # GENERATED from Listo's API definition (API 1.37.0). Do not edit by hand:
4
+ # this file is rewritten whenever the SDK is regenerated.
5
+
6
+ module ListoDelivery
7
+ module Resources
8
+ # Operations under "deliveries".
9
+ class Deliveries
10
+ # @api private
11
+ def initialize(client)
12
+ @client = client
13
+ end
14
+
15
+ # Cancel a delivery.
16
+ #
17
+ # POST /v1/deliveries/{delivery_id}/cancellations
18
+ # @param delivery_id [String]
19
+ # @param body [Hash, nil] request body (also accepted as keywords)
20
+ # @return [Models::Delivery]
21
+ # @raise [ListoDelivery::Error]
22
+ def cancel(delivery_id, body = nil, **fields)
23
+ @client.execute(
24
+ "POST",
25
+ "/v1/deliveries/#{Util.segment(delivery_id)}/cancellations",
26
+ body: Util.body(body, fields, required: "cancelDelivery"),
27
+ model: Models::Delivery
28
+ )
29
+ end
30
+
31
+ # Create a delivery.
32
+ #
33
+ # POST /v1/deliveries
34
+ # @param body [Hash, nil] request body (also accepted as keywords)
35
+ # @param idempotency_key [String, nil] your own key; a fresh UUID is sent when omitted
36
+ # @return [Models::Delivery]
37
+ # @raise [ListoDelivery::Error]
38
+ def create(body = nil, idempotency_key: nil, **fields)
39
+ @client.execute(
40
+ "POST",
41
+ "/v1/deliveries",
42
+ body: Util.body(body, fields, required: "createDelivery"),
43
+ idempotent: true,
44
+ idempotency_key: idempotency_key,
45
+ model: Models::Delivery
46
+ )
47
+ end
48
+
49
+ # List deliveries.
50
+ #
51
+ # GET /v1/deliveries
52
+ # @param query [Hash, nil] query parameters (also accepted as keywords)
53
+ # @return [Models::DeliveryList]
54
+ # @raise [ListoDelivery::Error]
55
+ def list(query = nil, **fields)
56
+ @client.execute(
57
+ "GET",
58
+ "/v1/deliveries",
59
+ query: Util.query(query, fields),
60
+ model: Models::DeliveryList
61
+ )
62
+ end
63
+
64
+ # Refund a delivery.
65
+ #
66
+ # POST /v1/deliveries/{delivery_id}/refunds
67
+ # @param delivery_id [String]
68
+ # @param body [Hash, nil] request body (also accepted as keywords)
69
+ # @param idempotency_key [String, nil] your own key; a fresh UUID is sent when omitted
70
+ # @return [Models::Delivery]
71
+ # @raise [ListoDelivery::Error]
72
+ def refund(delivery_id, body = nil, idempotency_key: nil, **fields)
73
+ @client.execute(
74
+ "POST",
75
+ "/v1/deliveries/#{Util.segment(delivery_id)}/refunds",
76
+ body: Util.body(body, fields),
77
+ idempotent: true,
78
+ idempotency_key: idempotency_key,
79
+ model: Models::Delivery
80
+ )
81
+ end
82
+
83
+ # Update a delivery.
84
+ #
85
+ # PATCH /v1/deliveries/{id}
86
+ # @param id [String]
87
+ # @param body [Hash, nil] request body (also accepted as keywords)
88
+ # @return [Models::Delivery]
89
+ # @raise [ListoDelivery::Error]
90
+ def reschedule(id, body = nil, **fields)
91
+ @client.execute(
92
+ "PATCH",
93
+ "/v1/deliveries/#{Util.segment(id)}",
94
+ body: Util.body(body, fields, required: "rescheduleDelivery"),
95
+ model: Models::Delivery
96
+ )
97
+ end
98
+
99
+ # Fetch a delivery.
100
+ #
101
+ # GET /v1/deliveries/{id}
102
+ # @param id [String]
103
+ # @return [Models::Delivery]
104
+ # @raise [ListoDelivery::Error]
105
+ def retrieve(id)
106
+ @client.execute(
107
+ "GET",
108
+ "/v1/deliveries/#{Util.segment(id)}",
109
+ model: Models::Delivery
110
+ )
111
+ end
112
+
113
+ # Retry a failed dispatch.
114
+ #
115
+ # POST /v1/deliveries/{delivery_id}/retries
116
+ # @param delivery_id [String]
117
+ # @return [Models::Delivery]
118
+ # @raise [ListoDelivery::Error]
119
+ def retry(delivery_id)
120
+ @client.execute(
121
+ "POST",
122
+ "/v1/deliveries/#{Util.segment(delivery_id)}/retries",
123
+ model: Models::Delivery
124
+ )
125
+ end
126
+ end
127
+ end
128
+ end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ # GENERATED from Listo's API definition (API 1.37.0). Do not edit by hand:
4
+ # this file is rewritten whenever the SDK is regenerated.
5
+
6
+ module ListoDelivery
7
+ module Resources
8
+ # Operations under "events".
9
+ class Events
10
+ # @api private
11
+ def initialize(client)
12
+ @client = client
13
+ end
14
+
15
+ # List your webhook events.
16
+ #
17
+ # GET /v1/events
18
+ # @param query [Hash, nil] query parameters (also accepted as keywords)
19
+ # @return [Models::EventList]
20
+ # @raise [ListoDelivery::Error]
21
+ def list(query = nil, **fields)
22
+ @client.execute(
23
+ "GET",
24
+ "/v1/events",
25
+ query: Util.query(query, fields),
26
+ model: Models::EventList
27
+ )
28
+ end
29
+
30
+ # Send a webhook event again.
31
+ #
32
+ # POST /v1/events/{event_id}/resend
33
+ # @param event_id [String]
34
+ # @return [Models::WebhookEvent]
35
+ # @raise [ListoDelivery::Error]
36
+ def resend(event_id)
37
+ @client.execute(
38
+ "POST",
39
+ "/v1/events/#{Util.segment(event_id)}/resend",
40
+ model: Models::WebhookEvent
41
+ )
42
+ end
43
+
44
+ # Retrieve a webhook event.
45
+ #
46
+ # GET /v1/events/{id}
47
+ # @param id [String]
48
+ # @return [Models::WebhookEvent]
49
+ # @raise [ListoDelivery::Error]
50
+ def retrieve(id)
51
+ @client.execute(
52
+ "GET",
53
+ "/v1/events/#{Util.segment(id)}",
54
+ model: Models::WebhookEvent
55
+ )
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ # GENERATED from Listo's API definition (API 1.37.0). Do not edit by hand:
4
+ # this file is rewritten whenever the SDK is regenerated.
5
+
6
+ module ListoDelivery
7
+ module Resources
8
+ # Operations under "ledger".
9
+ class Ledger
10
+ # @api private
11
+ def initialize(client)
12
+ @client = client
13
+ end
14
+
15
+ # List your ledger entries.
16
+ #
17
+ # GET /v1/ledger
18
+ # @param query [Hash, nil] query parameters (also accepted as keywords)
19
+ # @return [Models::LedgerEntryList]
20
+ # @raise [ListoDelivery::Error]
21
+ def list(query = nil, **fields)
22
+ @client.execute(
23
+ "GET",
24
+ "/v1/ledger",
25
+ query: Util.query(query, fields),
26
+ model: Models::LedgerEntryList
27
+ )
28
+ end
29
+
30
+ # List a store's ledger entries.
31
+ #
32
+ # GET /v1/stores/{store_id}/ledger
33
+ # @param store_id [String]
34
+ # @param query [Hash, nil] query parameters (also accepted as keywords)
35
+ # @return [Models::LedgerEntryList]
36
+ # @raise [ListoDelivery::Error]
37
+ def list_for_store(store_id, query = nil, **fields)
38
+ @client.execute(
39
+ "GET",
40
+ "/v1/stores/#{Util.segment(store_id)}/ledger",
41
+ query: Util.query(query, fields),
42
+ model: Models::LedgerEntryList
43
+ )
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ # GENERATED from Listo's API definition (API 1.37.0). Do not edit by hand:
4
+ # this file is rewritten whenever the SDK is regenerated.
5
+
6
+ module ListoDelivery
7
+ module Resources
8
+ # Operations under "quotes".
9
+ class Quotes
10
+ # @api private
11
+ def initialize(client)
12
+ @client = client
13
+ end
14
+
15
+ # Price a delivery.
16
+ #
17
+ # POST /v1/quotes
18
+ # @param body [Hash, nil] request body (also accepted as keywords)
19
+ # @return [Models::Quote]
20
+ # @raise [ListoDelivery::Error]
21
+ def create(body = nil, **fields)
22
+ @client.execute(
23
+ "POST",
24
+ "/v1/quotes",
25
+ body: Util.body(body, fields, required: "createQuote"),
26
+ model: Models::Quote
27
+ )
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ # GENERATED from Listo's API definition (API 1.37.0). Do not edit by hand:
4
+ # this file is rewritten whenever the SDK is regenerated.
5
+
6
+ module ListoDelivery
7
+ module Resources
8
+ # Operations under "request_logs".
9
+ class RequestLogs
10
+ # @api private
11
+ def initialize(client)
12
+ @client = client
13
+ end
14
+
15
+ # List your request log.
16
+ #
17
+ # GET /v1/request_logs
18
+ # @param query [Hash, nil] query parameters (also accepted as keywords)
19
+ # @return [Models::RequestLogList]
20
+ # @raise [ListoDelivery::Error]
21
+ def list(query = nil, **fields)
22
+ @client.execute(
23
+ "GET",
24
+ "/v1/request_logs",
25
+ query: Util.query(query, fields),
26
+ model: Models::RequestLogList
27
+ )
28
+ end
29
+
30
+ # Retrieve a request log entry.
31
+ #
32
+ # GET /v1/request_logs/{id}
33
+ # @param id [String]
34
+ # @return [Models::RequestLogDetail]
35
+ # @raise [ListoDelivery::Error]
36
+ def retrieve(id)
37
+ @client.execute(
38
+ "GET",
39
+ "/v1/request_logs/#{Util.segment(id)}",
40
+ model: Models::RequestLogDetail
41
+ )
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,143 @@
1
+ # frozen_string_literal: true
2
+
3
+ # GENERATED from Listo's API definition (API 1.37.0). Do not edit by hand:
4
+ # this file is rewritten whenever the SDK is regenerated.
5
+
6
+ module ListoDelivery
7
+ module Resources
8
+ # Operations under "stores".
9
+ class Stores
10
+ # @api private
11
+ def initialize(client)
12
+ @client = client
13
+ end
14
+
15
+ # Cancel a store's plan.
16
+ #
17
+ # POST /v1/stores/{store_id}/plan_cancellation
18
+ # @param store_id [String]
19
+ # @param idempotency_key [String, nil] your own key; a fresh UUID is sent when omitted
20
+ # @return [Models::Store]
21
+ # @raise [ListoDelivery::Error]
22
+ def cancel_plan(store_id, idempotency_key: nil)
23
+ @client.execute(
24
+ "POST",
25
+ "/v1/stores/#{Util.segment(store_id)}/plan_cancellation",
26
+ idempotent: true,
27
+ idempotency_key: idempotency_key,
28
+ model: Models::Store
29
+ )
30
+ end
31
+
32
+ # Create a store.
33
+ #
34
+ # POST /v1/stores
35
+ # @param body [Hash, nil] request body (also accepted as keywords)
36
+ # @param idempotency_key [String, nil] your own key; a fresh UUID is sent when omitted
37
+ # @return [Models::Store]
38
+ # @raise [ListoDelivery::Error]
39
+ def create(body = nil, idempotency_key: nil, **fields)
40
+ @client.execute(
41
+ "POST",
42
+ "/v1/stores",
43
+ body: Util.body(body, fields, required: "createStore"),
44
+ idempotent: true,
45
+ idempotency_key: idempotency_key,
46
+ model: Models::Store
47
+ )
48
+ end
49
+
50
+ # Invite a store owner.
51
+ #
52
+ # POST /v1/stores/{store_id}/owner
53
+ # @param store_id [String]
54
+ # @param body [Hash, nil] request body (also accepted as keywords)
55
+ # @return [Models::OwnerInvitation]
56
+ # @raise [ListoDelivery::Error]
57
+ def create_owner(store_id, body = nil, **fields)
58
+ @client.execute(
59
+ "POST",
60
+ "/v1/stores/#{Util.segment(store_id)}/owner",
61
+ body: Util.body(body, fields, required: "createStoreOwner"),
62
+ model: Models::OwnerInvitation
63
+ )
64
+ end
65
+
66
+ # List your stores.
67
+ #
68
+ # GET /v1/stores
69
+ # @param query [Hash, nil] query parameters (also accepted as keywords)
70
+ # @return [Models::StoreList]
71
+ # @raise [ListoDelivery::Error]
72
+ def list(query = nil, **fields)
73
+ @client.execute(
74
+ "GET",
75
+ "/v1/stores",
76
+ query: Util.query(query, fields),
77
+ model: Models::StoreList
78
+ )
79
+ end
80
+
81
+ # Reactivate a store's plan.
82
+ #
83
+ # POST /v1/stores/{store_id}/plan
84
+ # @param store_id [String]
85
+ # @param idempotency_key [String, nil] your own key; a fresh UUID is sent when omitted
86
+ # @return [Models::Store]
87
+ # @raise [ListoDelivery::Error]
88
+ def reactivate_plan(store_id, idempotency_key: nil)
89
+ @client.execute(
90
+ "POST",
91
+ "/v1/stores/#{Util.segment(store_id)}/plan",
92
+ idempotent: true,
93
+ idempotency_key: idempotency_key,
94
+ model: Models::Store
95
+ )
96
+ end
97
+
98
+ # Fetch a store.
99
+ #
100
+ # GET /v1/stores/{id}
101
+ # @param id [String]
102
+ # @return [Models::Store]
103
+ # @raise [ListoDelivery::Error]
104
+ def retrieve(id)
105
+ @client.execute(
106
+ "GET",
107
+ "/v1/stores/#{Util.segment(id)}",
108
+ model: Models::Store
109
+ )
110
+ end
111
+
112
+ # Undo a store's plan cancellation.
113
+ #
114
+ # DELETE /v1/stores/{store_id}/plan_cancellation
115
+ # @param store_id [String]
116
+ # @return [Models::Store]
117
+ # @raise [ListoDelivery::Error]
118
+ def undo_plan_cancellation(store_id)
119
+ @client.execute(
120
+ "DELETE",
121
+ "/v1/stores/#{Util.segment(store_id)}/plan_cancellation",
122
+ model: Models::Store
123
+ )
124
+ end
125
+
126
+ # Update a store.
127
+ #
128
+ # PATCH /v1/stores/{id}
129
+ # @param id [String]
130
+ # @param body [Hash, nil] request body (also accepted as keywords)
131
+ # @return [Models::Store]
132
+ # @raise [ListoDelivery::Error]
133
+ def update(id, body = nil, **fields)
134
+ @client.execute(
135
+ "PATCH",
136
+ "/v1/stores/#{Util.segment(id)}",
137
+ body: Util.body(body, fields),
138
+ model: Models::Store
139
+ )
140
+ end
141
+ end
142
+ end
143
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ # GENERATED from Listo's API definition (API 1.37.0). Do not edit by hand:
4
+ # this file is rewritten whenever the SDK is regenerated.
5
+
6
+ module ListoDelivery
7
+ module Resources
8
+ # Operations under "webhooks".
9
+ class Webhooks
10
+ # @api private
11
+ def initialize(client)
12
+ @client = client
13
+ end
14
+
15
+ # List webhook delivery attempts.
16
+ #
17
+ # GET /v1/webhook_deliveries
18
+ # @param query [Hash, nil] query parameters (also accepted as keywords)
19
+ # @return [Models::WebhookDeliveryList]
20
+ # @raise [ListoDelivery::Error]
21
+ def list_deliveries(query = nil, **fields)
22
+ @client.execute(
23
+ "GET",
24
+ "/v1/webhook_deliveries",
25
+ query: Util.query(query, fields),
26
+ model: Models::WebhookDeliveryList
27
+ )
28
+ end
29
+
30
+ # Send a test webhook.
31
+ #
32
+ # POST /v1/test_webhooks
33
+ # @param body [Hash, nil] request body (also accepted as keywords)
34
+ # @return [Models::WebhookEvent]
35
+ # @raise [ListoDelivery::Error]
36
+ def send_test(body = nil, **fields)
37
+ @client.execute(
38
+ "POST",
39
+ "/v1/test_webhooks",
40
+ body: Util.body(body, fields, required: "sendTestWebhook"),
41
+ model: Models::WebhookEvent
42
+ )
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ # GENERATED from Listo's API definition (API 1.37.0). Do not edit by hand:
4
+ # this file is rewritten whenever the SDK is regenerated.
5
+
6
+ module ListoDelivery
7
+ module Resources
8
+ # Operations under "withdrawals".
9
+ class Withdrawals
10
+ # @api private
11
+ def initialize(client)
12
+ @client = client
13
+ end
14
+
15
+ # Request a withdrawal.
16
+ #
17
+ # POST /v1/withdrawals
18
+ # @param body [Hash, nil] request body (also accepted as keywords)
19
+ # @return [Models::Withdrawal]
20
+ # @raise [ListoDelivery::Error]
21
+ def create(body = nil, **fields)
22
+ @client.execute(
23
+ "POST",
24
+ "/v1/withdrawals",
25
+ body: Util.body(body, fields, required: "createWithdrawal"),
26
+ model: Models::Withdrawal
27
+ )
28
+ end
29
+
30
+ # List your withdrawals.
31
+ #
32
+ # GET /v1/withdrawals
33
+ # @param query [Hash, nil] query parameters (also accepted as keywords)
34
+ # @return [Models::WithdrawalList]
35
+ # @raise [ListoDelivery::Error]
36
+ def list(query = nil, **fields)
37
+ @client.execute(
38
+ "GET",
39
+ "/v1/withdrawals",
40
+ query: Util.query(query, fields),
41
+ model: Models::WithdrawalList
42
+ )
43
+ end
44
+
45
+ # Fetch a withdrawal.
46
+ #
47
+ # GET /v1/withdrawals/{id}
48
+ # @param id [String]
49
+ # @return [Models::Withdrawal]
50
+ # @raise [ListoDelivery::Error]
51
+ def retrieve(id)
52
+ @client.execute(
53
+ "GET",
54
+ "/v1/withdrawals/#{Util.segment(id)}",
55
+ model: Models::Withdrawal
56
+ )
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ListoDelivery
4
+ # Base of every generated model. A model wraps the JSON object as received:
5
+ # a reader per documented field (by wire name), `#to_h` and `#[]`, and any
6
+ # field the server adds later stays in `#to_h` instead of breaking parsing.
7
+ class Model
8
+ # Field name => how to convert it (nil for a plain JSON value). Each
9
+ # generated class replaces this.
10
+ TYPES = {}.freeze
11
+
12
+ # Turns a parsed JSON value into this model; anything that is not an
13
+ # object comes back untouched.
14
+ def self.build(value)
15
+ value.is_a?(Hash) ? new(value) : value
16
+ end
17
+
18
+ # @param data [Hash] the JSON object, string or symbol keys
19
+ def initialize(data = {})
20
+ @raw = Util.plain(data)
21
+ @cache = {}
22
+ end
23
+
24
+ # The JSON object, unknown keys included. A copy: changing it changes nothing here.
25
+ def to_h
26
+ Util.plain(@raw)
27
+ end
28
+
29
+ # The field named as on the wire, converted like its reader.
30
+ def [](key)
31
+ read(key.to_s)
32
+ end
33
+
34
+ def ==(other)
35
+ other.class == self.class && other.to_h == to_h
36
+ end
37
+ alias_method :eql?, :==
38
+
39
+ def hash
40
+ [self.class, @raw].hash
41
+ end
42
+
43
+ def inspect
44
+ "#<#{self.class.name} #{@raw.inspect}>"
45
+ end
46
+
47
+ def to_json(*args)
48
+ @raw.to_json(*args)
49
+ end
50
+
51
+ private
52
+
53
+ def read(name)
54
+ return @cache[name] if @cache.key?(name)
55
+
56
+ @cache[name] = convert(self.class::TYPES[name], @raw[name])
57
+ end
58
+
59
+ def convert(descriptor, value)
60
+ return value if descriptor.nil? || value.nil?
61
+
62
+ case descriptor.first
63
+ when "model" then Models.const_get(descriptor.last).build(value)
64
+ when "array" then value.is_a?(Array) ? value.map { |v| convert(descriptor.last, v) } : value
65
+ else value
66
+ end
67
+ end
68
+ end
69
+ end