yield-sdk 0.5.1 → 0.7.0

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 (66) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +51 -0
  3. data/README.md +25 -10
  4. data/Rakefile +11 -2
  5. data/Steepfile +20 -0
  6. data/docs/index.md +12 -0
  7. data/docs/modules/customer.md +64 -0
  8. data/docs/modules/order.md +93 -0
  9. data/docs/modules/self.md +48 -0
  10. data/lib/yield/sdk/api/api_client.rb +54 -37
  11. data/lib/yield/sdk/api/api_error.rb +39 -0
  12. data/lib/yield/sdk/api/api_error_details.rb +9 -0
  13. data/lib/yield/sdk/api/api_result.rb +23 -6
  14. data/lib/yield/sdk/base_client.rb +6 -3
  15. data/lib/yield/sdk/client.rb +7 -4
  16. data/lib/yield/sdk/modules/customer/customer_base_client.rb +27 -0
  17. data/lib/yield/sdk/modules/customer/customer_client.rb +19 -0
  18. data/lib/yield/sdk/modules/customer/payloads/customer_credit_line_info.rb +22 -0
  19. data/lib/yield/sdk/modules/customer/payloads/customer_list_payload.rb +20 -0
  20. data/lib/yield/sdk/modules/customer/payloads/customer_row.rb +28 -0
  21. data/lib/yield/sdk/modules/order/order_base_client.rb +4 -1
  22. data/lib/yield/sdk/modules/order/payloads/order.rb +21 -11
  23. data/lib/yield/sdk/modules/order/payloads/order_create_payload.rb +1 -1
  24. data/lib/yield/sdk/modules/order/payloads/order_customer_info.rb +11 -5
  25. data/lib/yield/sdk/modules/order/payloads/order_status.rb +1 -1
  26. data/lib/yield/sdk/modules/self/payloads/self_info.rb +9 -5
  27. data/lib/yield/sdk/modules/self/payloads/self_organization_info.rb +9 -5
  28. data/lib/yield/sdk/types/cursor_payload.rb +19 -0
  29. data/lib/yield/sdk/types/money.rb +6 -3
  30. data/lib/yield/sdk/types/money_payload.rb +7 -3
  31. data/lib/yield/sdk/types/page.rb +51 -0
  32. data/lib/yield/sdk/utils/type_utils.rb +71 -0
  33. data/lib/yield/sdk/version.rb +3 -3
  34. data/lib/yield/sdk.rb +2 -1
  35. data/sig/vendor/faraday.rbs +23 -0
  36. data/sig/yield/sdk/api/api_client.rbs +26 -0
  37. data/sig/yield/sdk/api/api_error.rbs +13 -0
  38. data/sig/yield/sdk/api/api_error_details.rbs +14 -0
  39. data/sig/yield/sdk/api/api_result.rbs +19 -0
  40. data/sig/yield/sdk/base_client.rbs +13 -0
  41. data/sig/yield/sdk/client.rbs +13 -0
  42. data/sig/yield/sdk/modules/customer/customer_base_client.rbs +11 -0
  43. data/sig/yield/sdk/modules/customer/customer_client.rbs +11 -0
  44. data/sig/yield/sdk/modules/customer/payloads/customer_credit_line_info.rbs +13 -0
  45. data/sig/yield/sdk/modules/customer/payloads/customer_list_payload.rbs +16 -0
  46. data/sig/yield/sdk/modules/customer/payloads/customer_row.rbs +16 -0
  47. data/sig/yield/sdk/modules/order/payloads/order.rbs +30 -0
  48. data/sig/yield/sdk/modules/order/payloads/order_create_payload.rbs +15 -0
  49. data/sig/yield/sdk/modules/order/payloads/order_customer_info.rbs +15 -0
  50. data/sig/yield/sdk/modules/order/payloads/order_status.rbs +10 -0
  51. data/sig/yield/sdk/modules/order/self_base_client.rbs +12 -0
  52. data/sig/yield/sdk/modules/order/self_client.rbs +12 -0
  53. data/sig/yield/sdk/modules/self/payloads/self_info.rbs +14 -0
  54. data/sig/yield/sdk/modules/self/payloads/self_organization_info.rbs +14 -0
  55. data/sig/yield/sdk/modules/self/self_base_client.rbs +11 -0
  56. data/sig/yield/sdk/modules/self/self_client.rbs +11 -0
  57. data/sig/yield/sdk/types/cursor_payload.rbs +14 -0
  58. data/sig/yield/sdk/types/money.rbs +12 -0
  59. data/sig/yield/sdk/types/money_payload.rbs +15 -0
  60. data/sig/yield/sdk/types/page.rbs +20 -0
  61. data/sig/yield/sdk/utils/type_utils.rbs +26 -0
  62. data/sig/yield/sdk/version.rbs +8 -0
  63. data/sig/yield/sdk.rbs +0 -2
  64. metadata +66 -7
  65. data/.standard.yml +0 -3
  66. data/lib/yield/sdk/utils.rb +0 -36
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "uri"
4
+
5
+ require_relative "../../api/api_client"
6
+ require_relative "../../types/page"
7
+ require_relative "payloads/customer_row"
8
+ require_relative "payloads/customer_list_payload"
9
+
10
+ module Yield
11
+ module SDK
12
+ module Customer
13
+ class BaseClient
14
+ def initialize(api_client)
15
+ @api = api_client
16
+ end
17
+
18
+ def list(params = nil)
19
+ payload = params.nil? ? nil : CustomerListPayload.build(params)
20
+ response = @api.run_query("/customer/list", payload)
21
+
22
+ API::Client.process_response(response, &Page.build_with(&CustomerRow.method(:from_payload)))
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "customer_base_client"
4
+
5
+ module Yield
6
+ module SDK
7
+ module Customer
8
+ class Client
9
+ def initialize(base_client)
10
+ @base = base_client
11
+ end
12
+
13
+ def list(params = nil)
14
+ @base.list(params).data
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../../types/money"
4
+ require_relative "../../../utils/type_utils"
5
+
6
+ module Yield
7
+ module SDK
8
+ module Customer
9
+ CustomerCreditLineInfo = Data.define(
10
+ :credit_limit,
11
+ :amount_available,
12
+ ) do
13
+ def self.from_payload(payload)
14
+ new(
15
+ credit_limit: Money.from_payload(TypeUtils.expect_string(payload[:credit_limit])),
16
+ amount_available: Money.from_payload(TypeUtils.expect_string(payload[:amount_available])),
17
+ )
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../../types/cursor_payload"
4
+
5
+ module Yield
6
+ module SDK
7
+ module Customer
8
+ class CustomerListPayload
9
+ def self.build(params)
10
+ {
11
+ limit: params[:limit],
12
+ after: params[:after].nil? ? nil : CursorPayload.build(params[:after]),
13
+ customer_code: params[:customer_code],
14
+ extra_system_id: params[:extra_system_id],
15
+ }
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../../utils/type_utils"
4
+ require_relative "customer_credit_line_info"
5
+
6
+ module Yield
7
+ module SDK
8
+ module Customer
9
+ CustomerRow = Data.define(
10
+ :id,
11
+ :registered_name,
12
+ :trade_name,
13
+ :customer_code,
14
+ :credit_line,
15
+ ) do
16
+ def self.from_payload(payload)
17
+ new(
18
+ id: TypeUtils.expect_string(payload[:id]),
19
+ registered_name: TypeUtils.expect_string(payload[:registered_name]),
20
+ trade_name: payload[:trade_name].nil? ? nil : TypeUtils.expect_string(payload[:trade_name]),
21
+ customer_code: payload[:customer_code].nil? ? nil : TypeUtils.expect_string(payload[:customer_code]),
22
+ credit_line: payload[:credit_line].nil? ? nil : CustomerCreditLineInfo.from_payload(TypeUtils.expect_record(payload[:credit_line])),
23
+ )
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "uri"
4
+
3
5
  require_relative "../../api/api_client"
4
6
  require_relative "payloads/order"
5
7
  require_relative "payloads/order_create_payload"
@@ -13,7 +15,8 @@ module Yield
13
15
  end
14
16
 
15
17
  def fetch(id)
16
- response = @api.run_query("/order/fetch/#{id}")
18
+ encoded_id = URI.encode_uri_component(id)
19
+ response = @api.run_query("/order/fetch/#{encoded_id}")
17
20
 
18
21
  API::Client.process_response(response, &Order.method(:from_payload))
19
22
  end
@@ -3,25 +3,35 @@
3
3
  require "date"
4
4
 
5
5
  require_relative "../../../types/money"
6
- require_relative "../../../utils"
6
+ require_relative "../../../utils/type_utils"
7
7
  require_relative "order_customer_info"
8
8
  require_relative "order_status"
9
9
 
10
10
  module Yield
11
11
  module SDK
12
12
  module Order
13
- class Order < Data.define(:id, :order_number, :status, :customer, :date, :total_amount, :note, :payment_link, :creation_time)
13
+ Order = Data.define(
14
+ :id,
15
+ :order_number,
16
+ :status,
17
+ :customer,
18
+ :date,
19
+ :total_amount,
20
+ :note,
21
+ :payment_link,
22
+ :creation_time,
23
+ ) do
14
24
  def self.from_payload(payload)
15
25
  new(
16
- id: Utils.assert_string(payload[:id]),
17
- order_number: Utils.assert_string(payload[:order_number]),
18
- status: Utils.assert_variant(OrderStatus::ALL, payload[:status]),
19
- customer: payload[:customer].nil? ? nil : OrderCustomerInfo.from_payload(Utils.assert_hash(payload[:customer])),
20
- date: Date.parse(Utils.assert_string(payload[:date])),
21
- total_amount: Money.from_payload(Utils.assert_string(payload[:total_amount])),
22
- note: payload[:note].nil? ? nil : Utils.assert_string(payload[:note]),
23
- payment_link: payload[:payment_link].nil? ? nil : Utils.assert_string(payload[:payment_link]),
24
- creation_time: Time.parse(Utils.assert_string(payload[:creation_time]))
26
+ id: TypeUtils.expect_string(payload[:id]),
27
+ order_number: TypeUtils.expect_string(payload[:order_number]),
28
+ status: TypeUtils.expect_variant(OrderStatus::ALL, payload[:status]),
29
+ customer: payload[:customer].nil? ? nil : OrderCustomerInfo.from_payload(TypeUtils.expect_record(payload[:customer])),
30
+ date: TypeUtils.expect_date(TypeUtils.expect_string(payload[:date])),
31
+ total_amount: Money.from_payload(TypeUtils.expect_string(payload[:total_amount])),
32
+ note: payload[:note].nil? ? nil : TypeUtils.expect_string(payload[:note]),
33
+ payment_link: payload[:payment_link].nil? ? nil : TypeUtils.expect_string(payload[:payment_link]),
34
+ creation_time: TypeUtils.expect_time(TypeUtils.expect_string(payload[:creation_time])),
25
35
  )
26
36
  end
27
37
  end
@@ -10,7 +10,7 @@ module Yield
10
10
  {
11
11
  customer_id: params[:customer_id],
12
12
  total_amount: MoneyPayload.build(params[:total_amount]),
13
- note: params[:note]
13
+ note: params[:note],
14
14
  }
15
15
  end
16
16
  end
@@ -1,16 +1,22 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "../../../utils"
3
+ require_relative "../../../utils/type_utils"
4
4
 
5
5
  module Yield
6
6
  module SDK
7
7
  module Order
8
- class OrderCustomerInfo < Data.define(:id, :registered_name, :trade_name)
8
+ OrderCustomerInfo = Data.define(
9
+ :id,
10
+ :registered_name,
11
+ :trade_name,
12
+ :customer_code,
13
+ ) do
9
14
  def self.from_payload(payload)
10
15
  new(
11
- id: Utils.assert_string(payload[:id]),
12
- registered_name: Utils.assert_string(payload[:registered_name]),
13
- trade_name: payload[:trade_name].nil? ? nil : Utils.assert_string(payload[:trade_name])
16
+ id: TypeUtils.expect_string(payload[:id]),
17
+ registered_name: TypeUtils.expect_string(payload[:registered_name]),
18
+ trade_name: payload[:trade_name].nil? ? nil : TypeUtils.expect_string(payload[:trade_name]),
19
+ customer_code: payload[:customer_code].nil? ? nil : TypeUtils.expect_string(payload[:customer_code]),
14
20
  )
15
21
  end
16
22
  end
@@ -4,7 +4,7 @@ module Yield
4
4
  module SDK
5
5
  module Order
6
6
  module OrderStatus
7
- ALL = %i[pending confirmed fulfilled cancelled].freeze
7
+ ALL = %i[pending confirmed fulfilled cancelled].freeze # : Array[:pending | :confirmed | :fulfilled | :cancelled]
8
8
  end
9
9
  end
10
10
  end
@@ -1,17 +1,21 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "../../../utils"
3
+ require_relative "../../../utils/type_utils"
4
4
  require_relative "self_organization_info"
5
5
 
6
6
  module Yield
7
7
  module SDK
8
8
  module Self
9
- class SelfInfo < Data.define(:id, :name, :organization)
9
+ SelfInfo = Data.define(
10
+ :id,
11
+ :name,
12
+ :organization,
13
+ ) do
10
14
  def self.from_payload(payload)
11
15
  new(
12
- id: Utils.assert_string(payload[:id]),
13
- name: Utils.assert_string(payload[:name]),
14
- organization: SelfOrganizationInfo.from_payload(Utils.assert_hash(payload[:organization]))
16
+ id: TypeUtils.expect_string(payload[:id]),
17
+ name: TypeUtils.expect_string(payload[:name]),
18
+ organization: SelfOrganizationInfo.from_payload(TypeUtils.expect_record(payload[:organization])),
15
19
  )
16
20
  end
17
21
  end
@@ -1,16 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "../../../utils"
3
+ require_relative "../../../utils/type_utils"
4
4
 
5
5
  module Yield
6
6
  module SDK
7
7
  module Self
8
- class SelfOrganizationInfo < Data.define(:id, :registered_name, :trade_name)
8
+ SelfOrganizationInfo = Data.define(
9
+ :id,
10
+ :registered_name,
11
+ :trade_name,
12
+ ) do
9
13
  def self.from_payload(payload)
10
14
  new(
11
- id: Utils.assert_string(payload[:id]),
12
- registered_name: Utils.assert_string(payload[:registered_name]),
13
- trade_name: payload[:trade_name].nil? ? nil : Utils.assert_string(payload[:trade_name])
15
+ id: TypeUtils.expect_string(payload[:id]),
16
+ registered_name: TypeUtils.expect_string(payload[:registered_name]),
17
+ trade_name: payload[:trade_name].nil? ? nil : TypeUtils.expect_string(payload[:trade_name]),
14
18
  )
15
19
  end
16
20
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "page"
4
+
5
+ module Yield
6
+ module SDK
7
+ class CursorPayload
8
+ def self.build(cursor)
9
+ if cursor.is_a?(String)
10
+ cursor
11
+ elsif cursor.is_a?(Page)
12
+ cursor.last&.id
13
+ else
14
+ cursor.id
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -4,12 +4,15 @@ require "bigdecimal"
4
4
 
5
5
  module Yield
6
6
  module SDK
7
- class Money < Data.define(:currency_code, :value)
7
+ Money = Data.define(:currency_code, :value) do
8
8
  def self.from_payload(payload)
9
9
  m = payload.match(/^([A-Z]{3}) (-?\d+(?:\.\d+)?)$/)
10
- raise ArgumentError, "Invalid money: #{payload}" if m.nil?
10
+ raise ArgumentError, "Invalid money: \"#{payload}\"" if m.nil?
11
11
 
12
- new(currency_code: m[1].to_sym, value: BigDecimal(m[2]))
12
+ # Defined for type-checking reasons
13
+ m1 = m[1] # : String
14
+ m2 = m[2] # : String
15
+ new(currency_code: m1.to_sym, value: BigDecimal(m2))
13
16
  end
14
17
  end
15
18
  end
@@ -4,9 +4,13 @@ module Yield
4
4
  module SDK
5
5
  class MoneyPayload
6
6
  def self.build(money)
7
- return money if money.is_a?(String)
8
-
9
- "#{money.currency_code} #{money.value.to_s("F")}"
7
+ if money.is_a?(String)
8
+ money
9
+ elsif money.is_a?(Array)
10
+ "#{money[0]} #{money[1].to_s("F")}"
11
+ else
12
+ "#{money.currency_code} #{money.value.to_s("F")}"
13
+ end
10
14
  end
11
15
  end
12
16
  end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../utils/type_utils"
4
+
5
+ module Yield
6
+ module SDK
7
+ class Page
8
+ include Enumerable
9
+
10
+ attr_accessor :has_more
11
+
12
+ def initialize(items:, has_more:)
13
+ @items = items
14
+ @has_more = has_more
15
+ end
16
+
17
+ def self.build_with(&from_payload_block)
18
+ lambda { |payload|
19
+ Page.new(
20
+ items: TypeUtils.expect_record_list(payload[:items]).map(&from_payload_block),
21
+ has_more: TypeUtils.expect_boolean(payload[:has_more]),
22
+ )
23
+ }
24
+ end
25
+
26
+ def to_a
27
+ @items.dup
28
+ end
29
+
30
+ def size
31
+ @items.size
32
+ end
33
+
34
+ def length
35
+ size
36
+ end
37
+
38
+ def [](index)
39
+ @items[index]
40
+ end
41
+
42
+ def last
43
+ @items.last
44
+ end
45
+
46
+ def each(&block)
47
+ @items.each(&block)
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,71 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "date"
4
+ require "time"
5
+
6
+ module Yield
7
+ module SDK
8
+ module TypeUtils
9
+ module_function
10
+
11
+ def expect_boolean(data)
12
+ raise TypeError, "Expected bool, got #{data.class}" unless data == true || data == false
13
+
14
+ data # : bool
15
+ end
16
+
17
+ def expect_integer(data)
18
+ raise TypeError, "Expected Integer, got #{data.class}" unless data.is_a?(Integer)
19
+
20
+ data
21
+ end
22
+
23
+ def expect_string(data)
24
+ raise TypeError, "Expected String, got #{data.class}" unless data.is_a?(String)
25
+
26
+ data
27
+ end
28
+
29
+ def expect_date(data)
30
+ raise TypeError, "Expected String, got #{data.class}" unless data.is_a?(String)
31
+
32
+ m = data.match(/^(\d{4})-(\d{2})-(\d{2})$/)
33
+ raise ArgumentError, "Invalid date: \"#{data}\"" if m.nil?
34
+
35
+ Date.new(m[1].to_i, m[2].to_i, m[3].to_i)
36
+ end
37
+
38
+ def expect_time(data)
39
+ raise TypeError, "Expected String, got #{data.class}" unless data.is_a?(String)
40
+
41
+ Time.strptime(data, "%FT%T.%L%Z")
42
+ end
43
+
44
+ def expect_variant(variants, data) # steep:ignore MethodBodyTypeMismatch
45
+ raise TypeError, "Expected String, got #{data.class}" unless data.is_a?(String)
46
+
47
+ symbol = data.downcase.to_sym
48
+
49
+ raise ArgumentError, "Invalid variant: \"#{data}\"" unless variants.include?(symbol) # steep:ignore ArgumentTypeMismatch
50
+
51
+ symbol
52
+ end
53
+
54
+ def expect_record(data)
55
+ raise TypeError, "Expected Hash, got #{data.class}" unless data.is_a?(Hash)
56
+
57
+ data
58
+ end
59
+
60
+ def expect_list(data)
61
+ raise TypeError, "Expected Array, got #{data.class}" unless data.is_a?(Array)
62
+
63
+ data
64
+ end
65
+
66
+ def expect_record_list(data)
67
+ expect_list(data).map(&method(:expect_record))
68
+ end
69
+ end
70
+ end
71
+ end
@@ -2,13 +2,13 @@
2
2
 
3
3
  module Yield
4
4
  module SDK
5
- VERSION = "0.5.1"
5
+ VERSION = "0.7.0"
6
6
 
7
7
  module_function
8
8
 
9
9
  def client_version
10
- runtime_major_version = RUBY_ENGINE_VERSION.match(/^\d+(\.\d+)?/)[0]
11
- runtime_version = "#{RUBY_ENGINE} #{runtime_major_version}"
10
+ m = RUBY_ENGINE_VERSION.match(/^\d+(\.\d+)?/)
11
+ runtime_version = m.nil? ? RUBY_ENGINE : "#{RUBY_ENGINE} #{m[0]}"
12
12
 
13
13
  "Yield-SDK-Ruby/#{VERSION} (#{runtime_version})"
14
14
  end
data/lib/yield/sdk.rb CHANGED
@@ -1,10 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "backports/3.2.0/data" unless defined?(Data)
4
+
3
5
  require_relative "sdk/client"
4
6
  require_relative "sdk/version"
5
7
 
6
8
  module Yield
7
9
  module SDK
8
- class Error < StandardError; end
9
10
  end
10
11
  end
@@ -0,0 +1,23 @@
1
+ # Ideally we should use RBS collections, but it's very incomplete and full of untyped:
2
+ # https://github.com/ruby/gem_rbs_collection/blob/main/gems/faraday/2.5/faraday.rbs
3
+ # Even the yard docs offer better specs:
4
+ # https://gemdocs.org/gems/faraday/2.13.1/
5
+ # We could contribute back, but it's much easier to scope this based on our actual usage.
6
+
7
+ class Faraday::Connection
8
+ def run_request: (:get | :post method, String url, String? body, Hash[String, String]? headers) -> Faraday::Response
9
+ end
10
+
11
+ class Faraday::Response
12
+ attr_reader status: Integer
13
+ attr_reader body: String
14
+ attr_reader headers: Hash[String, String]
15
+
16
+ def success?: () -> bool
17
+ def []: (String) -> String?
18
+ end
19
+
20
+ module Faraday
21
+ def self.new: (?String) -> Faraday::Connection
22
+ | (?String) { (Faraday::Connection) -> void } -> Faraday::Connection
23
+ end
@@ -0,0 +1,26 @@
1
+ module Yield
2
+ module SDK
3
+ module API
4
+ class Client
5
+ def initialize: (String api_key, ?base_url: String?, ?conn: Faraday::Connection?) -> void
6
+
7
+ def self.extract_api_key: (String) -> [String, String]
8
+ def self.build_signature: (String hmac_key, String timestamp, String path, ?String? body) -> String
9
+ def self.process_response: [R] (Faraday::Response response) { (Hash[Symbol, Object]) -> R } -> Result[R]
10
+
11
+ def run_query: (String, ?Hash[Symbol, String | Integer | nil]?) -> Faraday::Response
12
+ def run_command: (String, Object) -> Faraday::Response
13
+
14
+ private
15
+
16
+ @base_url: String
17
+ @api_key_token: String
18
+ @api_key_hmac_key: String
19
+ @conn: Faraday::Connection
20
+ @client_version: String
21
+
22
+ def call_endpoint: (:get | :post, String, Object?) -> Faraday::Response
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,13 @@
1
+ module Yield
2
+ module SDK
3
+ module API
4
+ class Error < StandardError
5
+ attr_reader status_code: Integer
6
+ attr_reader request_id: String?
7
+ attr_reader details: ErrorDetails
8
+
9
+ def initialize: (Integer, String?, ErrorDetails) -> void
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ module Yield
2
+ module SDK
3
+ module API
4
+ class ErrorDetails
5
+ attr_reader type: String
6
+ attr_reader body: Hash[String, Object]?
7
+ attr_reader exception: StandardError?
8
+
9
+ def initialize: (String, Hash[String, Object]?, StandardError?) -> void
10
+ | (type: String, body: Hash[String, Object]?, exception: StandardError?) -> void
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,19 @@
1
+ module Yield
2
+ module SDK
3
+ module API
4
+ class Result[T]
5
+ attr_reader status_code: Integer
6
+ attr_reader request_id: String?
7
+ attr_reader data: T
8
+ attr_reader error: ErrorDetails?
9
+
10
+ def initialize: (status_code: Integer, request_id: String?, data: T, error: ErrorDetails?) -> void
11
+
12
+ def self.success: [D] (Integer, String?, D) -> Result[D]
13
+ def self.failure: (Integer, String?, String, Hash[String, Object]?, StandardError?) -> Result[untyped]
14
+
15
+ def ok?: -> bool
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,13 @@
1
+ module Yield
2
+ module SDK
3
+ class BaseClient
4
+ attr_reader api: API::Client
5
+
6
+ attr_reader customer: Customer::BaseClient
7
+ attr_reader order: Order::BaseClient
8
+ attr_reader self: Self::BaseClient
9
+
10
+ def initialize: (String api_key, ?base_url: String?, ?conn: Faraday::Connection?) -> void
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Yield
2
+ module SDK
3
+ class Client
4
+ attr_reader base: BaseClient
5
+
6
+ attr_reader customer: Customer::Client
7
+ attr_reader order: Order::Client
8
+ attr_reader self: Self::Client
9
+
10
+ def initialize: (String api_key, ?base_url: String?, ?conn: Faraday::Connection?) -> void
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,11 @@
1
+ module Yield
2
+ module SDK
3
+ module Customer
4
+ class BaseClient
5
+ @api: API::Client
6
+ def initialize: (API::Client) -> void
7
+ def list: (?customer_list_params?) -> API::Result[Page[CustomerRow]]
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Yield
2
+ module SDK
3
+ module Customer
4
+ class Client
5
+ @base: BaseClient
6
+ def initialize: (BaseClient) -> void
7
+ def list: (?customer_list_params?) -> Page[CustomerRow]
8
+ end
9
+ end
10
+ end
11
+ end