Skip to content

Commit 77949b6

Browse files
feat(api): api update
1 parent a5590ab commit 77949b6

File tree

154 files changed

+8844
-4121
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

154 files changed

+8844
-4121
lines changed

.stats.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
configured_endpoints: 19
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/hexlet%2Fcloudpayments-21652c2d2e6a5aab678ca435ba09ef698ff34270021f349660b84d5d98bf3923.yml
3-
openapi_spec_hash: 356a7298b2abac3fdf72ad5ee046b952
4-
config_hash: 039ea7c50406040341fca19f6c331be6
1+
configured_endpoints: 6
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/hexlet%2Fcloudpayments-4a7c87f457029686206224a4785cd5e539dd42d905f84a68dbd440f24b3ba055.yml
3+
openapi_spec_hash: ce4157583083d05eaf8e5ec45216c112
4+
config_hash: d26a7d37520b517e14ffae7f7ab0119b

README.md

Lines changed: 61 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,17 @@ gem "cloudpayments", "~> 0.0.2"
2626
require "bundler/setup"
2727
require "cloudpayments"
2828

29-
cloudpayments = Cloudpayments::Client.new(
30-
api_key: ENV["PETSTORE_API_KEY"] # This is the default and can be omitted
29+
cloudpayments = Cloudpayments::Client.new(public_id: "My Public ID", api_secret: "My API Secret")
30+
31+
response = cloudpayments.payments.charge(
32+
amount: 100,
33+
card_cryptogram_packet: "cryptogram_data",
34+
ip_address: "127.0.0.1",
35+
currency: "RUB",
36+
description: "Оплата заказа"
3137
)
3238

33-
order = cloudpayments.store.orders.create(pet_id: 1, quantity: 1, status: "placed")
34-
35-
puts(order.id)
39+
puts(response)
3640
```
3741

3842
### Handling errors
@@ -41,7 +45,12 @@ When the library is unable to connect to the API, or if the API returns a non-su
4145

4246
```ruby
4347
begin
44-
store = cloudpayments.store.list_inventory
48+
payment = cloudpayments.payments.charge(
49+
amount: 100,
50+
card_cryptogram_packet: "cryptogram_data",
51+
ip_address: "127.0.0.1",
52+
currency: "RUB"
53+
)
4554
rescue Cloudpayments::Errors::APIConnectionError => e
4655
puts("The server could not be reached")
4756
puts(e.cause) # an underlying Exception, likely raised within `net/http`
@@ -80,11 +89,19 @@ You can use the `max_retries` option to configure or disable this:
8089
```ruby
8190
# Configure the default for all requests:
8291
cloudpayments = Cloudpayments::Client.new(
83-
max_retries: 0 # default is 2
92+
max_retries: 0, # default is 2
93+
public_id: "My Public ID",
94+
api_secret: "My API Secret"
8495
)
8596

8697
# Or, configure per-request:
87-
cloudpayments.store.list_inventory(request_options: {max_retries: 5})
98+
cloudpayments.payments.charge(
99+
amount: 100,
100+
card_cryptogram_packet: "cryptogram_data",
101+
ip_address: "127.0.0.1",
102+
currency: "RUB",
103+
request_options: {max_retries: 5}
104+
)
88105
```
89106

90107
### Timeouts
@@ -94,11 +111,19 @@ By default, requests will time out after 60 seconds. You can use the timeout opt
94111
```ruby
95112
# Configure the default for all requests:
96113
cloudpayments = Cloudpayments::Client.new(
97-
timeout: nil # default is 60
114+
timeout: nil, # default is 60
115+
public_id: "My Public ID",
116+
api_secret: "My API Secret"
98117
)
99118

100119
# Or, configure per-request:
101-
cloudpayments.store.list_inventory(request_options: {timeout: 5})
120+
cloudpayments.payments.charge(
121+
amount: 100,
122+
card_cryptogram_packet: "cryptogram_data",
123+
ip_address: "127.0.0.1",
124+
currency: "RUB",
125+
request_options: {timeout: 5}
126+
)
102127
```
103128

104129
On timeout, `Cloudpayments::Errors::APITimeoutError` is raised.
@@ -129,7 +154,11 @@ Note: the `extra_` parameters of the same name overrides the documented paramete
129154

130155
```ruby
131156
response =
132-
cloudpayments.store.list_inventory(
157+
cloudpayments.payments.charge(
158+
amount: 100,
159+
card_cryptogram_packet: "cryptogram_data",
160+
ip_address: "127.0.0.1",
161+
currency: "RUB",
133162
request_options: {
134163
extra_query: {my_query_parameter: value},
135164
extra_body: {my_body_parameter: value},
@@ -175,46 +204,36 @@ This library provides comprehensive [RBI](https://sorbet.org/docs/rbi) definitio
175204
You can provide typesafe request parameters like so:
176205

177206
```ruby
178-
cloudpayments.store.orders.create(pet_id: 1, quantity: 1, status: "placed")
207+
cloudpayments.payments.charge(
208+
amount: 100,
209+
card_cryptogram_packet: "cryptogram_data",
210+
ip_address: "127.0.0.1",
211+
currency: "RUB",
212+
description: "Оплата заказа"
213+
)
179214
```
180215

181216
Or, equivalently:
182217

183218
```ruby
184219
# Hashes work, but are not typesafe:
185-
cloudpayments.store.orders.create(pet_id: 1, quantity: 1, status: "placed")
186-
187-
# You can also splat a full Params class:
188-
params = Cloudpayments::Store::OrderCreateParams.new(pet_id: 1, quantity: 1, status: "placed")
189-
cloudpayments.store.orders.create(**params)
190-
```
191-
192-
### Enums
193-
194-
Since this library does not depend on `sorbet-runtime`, it cannot provide [`T::Enum`](https://sorbet.org/docs/tenum) instances. Instead, we provide "tagged symbols" instead, which is always a primitive at runtime:
195-
196-
```ruby
197-
# :available
198-
puts(Cloudpayments::Pet::Status::AVAILABLE)
199-
200-
# Revealed type: `T.all(Cloudpayments::Pet::Status, Symbol)`
201-
T.reveal_type(Cloudpayments::Pet::Status::AVAILABLE)
202-
```
203-
204-
Enum parameters have a "relaxed" type, so you can either pass in enum constants or their literal value:
205-
206-
```ruby
207-
# Using the enum constants preserves the tagged type information:
208-
cloudpayments.pets.create(
209-
status: Cloudpayments::Pet::Status::AVAILABLE,
210-
#
220+
cloudpayments.payments.charge(
221+
amount: 100,
222+
card_cryptogram_packet: "cryptogram_data",
223+
ip_address: "127.0.0.1",
224+
currency: "RUB",
225+
description: "Оплата заказа"
211226
)
212227

213-
# Literal values are also permissible:
214-
cloudpayments.pets.create(
215-
status: :available,
216-
#
228+
# You can also splat a full Params class:
229+
params = Cloudpayments::PaymentChargeParams.new(
230+
amount: 100,
231+
card_cryptogram_packet: "cryptogram_data",
232+
ip_address: "127.0.0.1",
233+
currency: "RUB",
234+
description: "Оплата заказа"
217235
)
236+
cloudpayments.payments.charge(**params)
218237
```
219238

220239
## Versioning

lib/cloudpayments.rb

Lines changed: 13 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -52,36 +52,17 @@
5252
require_relative "cloudpayments/internal/transport/base_client"
5353
require_relative "cloudpayments/internal/transport/pooled_net_requester"
5454
require_relative "cloudpayments/client"
55-
require_relative "cloudpayments/models/pet"
56-
require_relative "cloudpayments/models/order"
57-
require_relative "cloudpayments/models/user"
58-
require_relative "cloudpayments/models/category"
59-
require_relative "cloudpayments/models/pet_create_params"
60-
require_relative "cloudpayments/models/pet_delete_params"
61-
require_relative "cloudpayments/models/pet_find_by_status_params"
62-
require_relative "cloudpayments/models/pet_find_by_status_response"
63-
require_relative "cloudpayments/models/pet_find_by_tags_params"
64-
require_relative "cloudpayments/models/pet_find_by_tags_response"
65-
require_relative "cloudpayments/models/pet_retrieve_params"
66-
require_relative "cloudpayments/models/pet_update_by_id_params"
67-
require_relative "cloudpayments/models/pet_update_params"
68-
require_relative "cloudpayments/models/pet_upload_image_params"
69-
require_relative "cloudpayments/models/pet_upload_image_response"
70-
require_relative "cloudpayments/models/store/order_create_params"
71-
require_relative "cloudpayments/models/store/order_delete_params"
72-
require_relative "cloudpayments/models/store/order_retrieve_params"
73-
require_relative "cloudpayments/models/store_list_inventory_params"
74-
require_relative "cloudpayments/models/store_list_inventory_response"
75-
require_relative "cloudpayments/models/user_create_params"
76-
require_relative "cloudpayments/models/user_create_with_list_params"
77-
require_relative "cloudpayments/models/user_delete_params"
78-
require_relative "cloudpayments/models/user_login_params"
79-
require_relative "cloudpayments/models/user_login_response"
80-
require_relative "cloudpayments/models/user_logout_params"
81-
require_relative "cloudpayments/models/user_retrieve_params"
82-
require_relative "cloudpayments/models/user_update_params"
55+
require_relative "cloudpayments/models/payment_auth_params"
56+
require_relative "cloudpayments/models/payment_auth_response"
57+
require_relative "cloudpayments/models/payment_charge_params"
58+
require_relative "cloudpayments/models/payment_charge_response"
59+
require_relative "cloudpayments/models/payment_confirm_params"
60+
require_relative "cloudpayments/models/payment_confirm_response"
61+
require_relative "cloudpayments/models/payment_post3ds_params"
62+
require_relative "cloudpayments/models/payment_post3ds_response"
63+
require_relative "cloudpayments/models/payment_refund_params"
64+
require_relative "cloudpayments/models/payment_refund_response"
65+
require_relative "cloudpayments/models/payment_void_params"
66+
require_relative "cloudpayments/models/payment_void_response"
8367
require_relative "cloudpayments/models"
84-
require_relative "cloudpayments/resources/pets"
85-
require_relative "cloudpayments/resources/store"
86-
require_relative "cloudpayments/resources/store/orders"
87-
require_relative "cloudpayments/resources/users"
68+
require_relative "cloudpayments/resources/payments"

lib/cloudpayments/client.rb

Lines changed: 19 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -16,27 +16,19 @@ class Client < Cloudpayments::Internal::Transport::BaseClient
1616
DEFAULT_MAX_RETRY_DELAY = 8.0
1717

1818
# @return [String]
19-
attr_reader :api_key
19+
attr_reader :public_id
2020

21-
# @return [Cloudpayments::Resources::Pets]
22-
attr_reader :pets
23-
24-
# @return [Cloudpayments::Resources::Store]
25-
attr_reader :store
21+
# @return [String]
22+
attr_reader :api_secret
2623

27-
# @return [Cloudpayments::Resources::Users]
28-
attr_reader :users
29-
30-
# @api private
31-
#
32-
# @return [Hash{String=>String}]
33-
private def auth_headers
34-
{"api_key" => @api_key}
35-
end
24+
# @return [Cloudpayments::Resources::Payments]
25+
attr_reader :payments
3626

3727
# Creates and returns a new client for interacting with the API.
3828
#
39-
# @param api_key [String, nil] Defaults to `ENV["PETSTORE_API_KEY"]`
29+
# @param public_id [String, nil] Defaults to `ENV["CLOUDPAYMENTS_PUBLIC_ID"]`
30+
#
31+
# @param api_secret [String, nil] Defaults to `ENV["CLOUDPAYMENTS_API_SECRET"]`
4032
#
4133
# @param base_url [String, nil] Override the default base URL for the API, e.g.,
4234
# `"https://api.example.com/v2/"`. Defaults to `ENV["CLOUDPAYMENTS_BASE_URL"]`
@@ -49,20 +41,25 @@ class Client < Cloudpayments::Internal::Transport::BaseClient
4941
#
5042
# @param max_retry_delay [Float]
5143
def initialize(
52-
api_key: ENV["PETSTORE_API_KEY"],
44+
public_id: ENV["CLOUDPAYMENTS_PUBLIC_ID"],
45+
api_secret: ENV["CLOUDPAYMENTS_API_SECRET"],
5346
base_url: ENV["CLOUDPAYMENTS_BASE_URL"],
5447
max_retries: self.class::DEFAULT_MAX_RETRIES,
5548
timeout: self.class::DEFAULT_TIMEOUT_IN_SECONDS,
5649
initial_retry_delay: self.class::DEFAULT_INITIAL_RETRY_DELAY,
5750
max_retry_delay: self.class::DEFAULT_MAX_RETRY_DELAY
5851
)
59-
base_url ||= "https://petstore3.swagger.io/api/v3"
52+
base_url ||= "https://api.cloudpayments.ru"
6053

61-
if api_key.nil?
62-
raise ArgumentError.new("api_key is required, and can be set via environ: \"PETSTORE_API_KEY\"")
54+
if public_id.nil?
55+
raise ArgumentError.new("public_id is required, and can be set via environ: \"CLOUDPAYMENTS_PUBLIC_ID\"")
56+
end
57+
if api_secret.nil?
58+
raise ArgumentError.new("api_secret is required, and can be set via environ: \"CLOUDPAYMENTS_API_SECRET\"")
6359
end
6460

65-
@api_key = api_key.to_s
61+
@public_id = public_id.to_s
62+
@api_secret = api_secret.to_s
6663

6764
super(
6865
base_url: base_url,
@@ -72,9 +69,7 @@ def initialize(
7269
max_retry_delay: max_retry_delay
7370
)
7471

75-
@pets = Cloudpayments::Resources::Pets.new(client: self)
76-
@store = Cloudpayments::Resources::Store.new(client: self)
77-
@users = Cloudpayments::Resources::Users.new(client: self)
72+
@payments = Cloudpayments::Resources::Payments.new(client: self)
7873
end
7974
end
8075
end

lib/cloudpayments/internal/transport/base_client.rb

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -215,11 +215,6 @@ def initialize(
215215
@max_retry_delay = max_retry_delay
216216
end
217217

218-
# @api private
219-
#
220-
# @return [Hash{String=>String}]
221-
private def auth_headers = {}
222-
223218
# @api private
224219
#
225220
# @return [String]
@@ -276,7 +271,6 @@ def initialize(
276271

277272
headers = Cloudpayments::Internal::Util.normalized_headers(
278273
@headers,
279-
auth_headers,
280274
req[:headers].to_h,
281275
opts[:extra_headers].to_h
282276
)

lib/cloudpayments/internal/type/base_model.rb

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -441,11 +441,10 @@ def deep_to_h = self.class.recursively_to_h(@data, convert: false)
441441
# @return [Hash{Symbol=>Object}]
442442
#
443443
# @example
444-
# # `order` is a `Cloudpayments::Order`
445-
# order => {
446-
# id: id,
447-
# complete: complete,
448-
# pet_id: pet_id
444+
# # `payment_confirm_response` is a `Cloudpayments::Models::PaymentConfirmResponse`
445+
# payment_confirm_response => {
446+
# success: success,
447+
# message: message
449448
# }
450449
def deconstruct_keys(keys)
451450
(keys || self.class.known_fields.keys)

lib/cloudpayments/internal/type/union.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,17 @@ module Cloudpayments
44
module Internal
55
module Type
66
# @api private
7+
#
8+
# @example
9+
# # `payment_auth_response` is a `Cloudpayments::Models::PaymentAuthResponse`
10+
# case payment_auth_response
11+
# when Cloudpayments::Models::PaymentAuthResponse::UnionMember0
12+
# puts(payment_auth_response.success)
13+
# when Cloudpayments::Models::PaymentAuthResponse::UnionMember1
14+
# puts(payment_auth_response.message)
15+
# else
16+
# puts(payment_auth_response)
17+
# end
718
module Union
819
include Cloudpayments::Internal::Type::Converter
920
include Cloudpayments::Internal::Util::SorbetRuntimeSupport

0 commit comments

Comments
 (0)