fsdk-2237-ruby-e2e 0.1.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 (76) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +107 -0
  3. data/lib/petstore/client.rb +45 -0
  4. data/lib/petstore/config.rb +54 -0
  5. data/lib/petstore/environment.rb +7 -0
  6. data/lib/petstore/error.rb +40 -0
  7. data/lib/petstore/errors/api_error.rb +9 -0
  8. data/lib/petstore/errors/client_error.rb +43 -0
  9. data/lib/petstore/errors/connection_error.rb +11 -0
  10. data/lib/petstore/errors/redirect_error.rb +9 -0
  11. data/lib/petstore/errors/response_error.rb +92 -0
  12. data/lib/petstore/errors/server_error.rb +25 -0
  13. data/lib/petstore/errors/timeout_error.rb +9 -0
  14. data/lib/petstore/http/auth.rb +19 -0
  15. data/lib/petstore/http/oauth_token_manager.rb +91 -0
  16. data/lib/petstore/internal/errors/constraint_error.rb +10 -0
  17. data/lib/petstore/internal/errors/type_error.rb +10 -0
  18. data/lib/petstore/internal/form/request.rb +110 -0
  19. data/lib/petstore/internal/http/base_request.rb +64 -0
  20. data/lib/petstore/internal/http/event_stream.rb +106 -0
  21. data/lib/petstore/internal/http/raw_client.rb +426 -0
  22. data/lib/petstore/internal/http/response_body.rb +35 -0
  23. data/lib/petstore/internal/iterators/cursor_item_iterator.rb +28 -0
  24. data/lib/petstore/internal/iterators/cursor_page_iterator.rb +72 -0
  25. data/lib/petstore/internal/iterators/item_iterator.rb +72 -0
  26. data/lib/petstore/internal/iterators/offset_item_iterator.rb +30 -0
  27. data/lib/petstore/internal/iterators/offset_page_iterator.rb +110 -0
  28. data/lib/petstore/internal/json/request.rb +61 -0
  29. data/lib/petstore/internal/json/serializable.rb +25 -0
  30. data/lib/petstore/internal/multipart/multipart_encoder.rb +141 -0
  31. data/lib/petstore/internal/multipart/multipart_form_data.rb +78 -0
  32. data/lib/petstore/internal/multipart/multipart_form_data_part.rb +51 -0
  33. data/lib/petstore/internal/multipart/multipart_request.rb +49 -0
  34. data/lib/petstore/internal/raw/request.rb +88 -0
  35. data/lib/petstore/internal/types/array.rb +47 -0
  36. data/lib/petstore/internal/types/boolean.rb +34 -0
  37. data/lib/petstore/internal/types/enum.rb +56 -0
  38. data/lib/petstore/internal/types/hash.rb +36 -0
  39. data/lib/petstore/internal/types/model/field.rb +38 -0
  40. data/lib/petstore/internal/types/model.rb +246 -0
  41. data/lib/petstore/internal/types/type.rb +35 -0
  42. data/lib/petstore/internal/types/union.rb +193 -0
  43. data/lib/petstore/internal/types/unknown.rb +15 -0
  44. data/lib/petstore/internal/types/utils.rb +137 -0
  45. data/lib/petstore/models/open_model.rb +30 -0
  46. data/lib/petstore/models/serializable.rb +63 -0
  47. data/lib/petstore/models/union_type.rb +12 -0
  48. data/lib/petstore/pet/client.rb +196 -0
  49. data/lib/petstore/pet/types/delete_pet_request.rb +13 -0
  50. data/lib/petstore/pet/types/find_pets_by_status_request.rb +11 -0
  51. data/lib/petstore/pet/types/find_pets_by_status_request_status.rb +24 -0
  52. data/lib/petstore/pet/types/find_pets_by_tags_request.rb +11 -0
  53. data/lib/petstore/pet/types/get_pet_by_id_request.rb +11 -0
  54. data/lib/petstore/pet/types/pet.rb +25 -0
  55. data/lib/petstore/pet/types/update_pet_with_form_request.rb +15 -0
  56. data/lib/petstore/serializers/form_serializer.rb +41 -0
  57. data/lib/petstore/serializers/json_serializer.rb +41 -0
  58. data/lib/petstore/serializers/xml_serializer.rb +56 -0
  59. data/lib/petstore/store/client.rb +89 -0
  60. data/lib/petstore/store/types/delete_order_request.rb +11 -0
  61. data/lib/petstore/store/types/get_order_by_id_request.rb +11 -0
  62. data/lib/petstore/store/types/order.rb +25 -0
  63. data/lib/petstore/types/api_response.rb +20 -0
  64. data/lib/petstore/types/category.rb +19 -0
  65. data/lib/petstore/types/order_status.rb +22 -0
  66. data/lib/petstore/types/pet_status.rb +22 -0
  67. data/lib/petstore/types/tag.rb +19 -0
  68. data/lib/petstore/user/client.rb +149 -0
  69. data/lib/petstore/user/types/delete_user_request.rb +11 -0
  70. data/lib/petstore/user/types/get_user_by_name_request.rb +11 -0
  71. data/lib/petstore/user/types/login_user_request.rb +13 -0
  72. data/lib/petstore/user/types/user.rb +27 -0
  73. data/lib/petstore/validator.rb +42 -0
  74. data/lib/petstore/version.rb +5 -0
  75. data/lib/petstore.rb +78 -0
  76. metadata +236 -0
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rexml/document'
4
+
5
+ module Petstore
6
+ module Serializers
7
+ # Serializes models to XML strings and deserializes XML strings back to models.
8
+ # Uses Ruby's stdlib REXML.
9
+ module Xml
10
+ # Converts a model or primitive to an XML string.
11
+ # root: the name of the wrapping XML element (defaults to 'root').
12
+ def self.serialize(value, root: 'root')
13
+ doc = REXML::Document.new
14
+ doc << REXML::XMLDecl.new('1.0', 'UTF-8')
15
+ build_element(doc.add_element(root.to_s), value)
16
+ doc.to_s
17
+ end
18
+
19
+ # Builds a model instance from an XML string.
20
+ # Returns the raw string unchanged when no model class is provided.
21
+ def self.deserialize(xml_string, model_class = nil, root: nil)
22
+ return xml_string unless model_class
23
+ return unless xml_string
24
+
25
+ doc = REXML::Document.new(xml_string)
26
+ el = root ? (doc.root.elements[root.to_s] || doc.root) : doc.root
27
+ hash = element_to_hash(el, model_class)
28
+ model_class.from_hash(hash)
29
+ end
30
+
31
+ private_class_method def self.build_element(parent, value)
32
+ case value
33
+ when Models::UnionType
34
+ build_element(parent, value.value)
35
+ when Models::Serializable
36
+ value.class.wire_keys.each do |attr, key|
37
+ build_element(parent.add_element(key.to_s), value.attributes[attr])
38
+ end
39
+ when Array
40
+ value.each { |item| build_element(parent.add_element('item'), item) }
41
+ when nil
42
+ nil
43
+ else
44
+ parent.text = value.to_s
45
+ end
46
+ end
47
+
48
+ private_class_method def self.element_to_hash(element, model_class)
49
+ model_class.wire_keys.each_with_object({}) do |(_attr, key), hash|
50
+ child = element.elements[key.to_s]
51
+ hash[key] = child&.text
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,89 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'uri'
4
+
5
+ module Petstore
6
+ module Store
7
+ class Client
8
+ def initialize(client:)
9
+ @client = client
10
+ end
11
+
12
+ def get_inventory(request_options: {}, **params)
13
+ request = ::Petstore::Internal::JSON::Request.new(
14
+ base_url: request_options[:base_url],
15
+ method: 'GET',
16
+ path: 'store/inventory',
17
+ request_options: request_options,
18
+ )
19
+ response = @client.send(request)
20
+ code = response.code.to_i
21
+ if code.between?(200, 299)
22
+ ::Petstore::Internal::Http::ResponseBody.decode(response) { |body| ::Petstore::Internal::Types::Hash[String, Integer].coerce(::JSON.parse(body, symbolize_names: false)) }
23
+ else
24
+ error_class = ::Petstore::Errors::ResponseError.subclass_for_code(code)
25
+ raise error_class.new(response.body, code: code)
26
+ end
27
+ end
28
+
29
+ def place_order(request_options: {}, **params)
30
+ params = ::Petstore::Internal::Types::Utils.normalize_keys(params)
31
+ request_body = ::Petstore::Store::Types::Order.new(params)
32
+ request_body.validate! if request_body.respond_to?(:validate!)
33
+ request = ::Petstore::Internal::JSON::Request.new(
34
+ base_url: request_options[:base_url],
35
+ method: 'POST',
36
+ path: 'store/order',
37
+ body: request_body.to_h,
38
+ request_options: request_options,
39
+ )
40
+ response = @client.send(request)
41
+ code = response.code.to_i
42
+ if code.between?(200, 299)
43
+ result = ::Petstore::Internal::Http::ResponseBody.decode(response) { |body| ::Petstore::Store::Types::Order.load(body) }
44
+ result.validate! if result.respond_to?(:validate!)
45
+ result
46
+ else
47
+ error_class = ::Petstore::Errors::ResponseError.subclass_for_code(code)
48
+ raise error_class.new(response.body, code: code)
49
+ end
50
+ end
51
+
52
+ def get_order_by_id(request_options: {}, **params)
53
+ params = ::Petstore::Internal::Types::Utils.normalize_keys(params)
54
+ request = ::Petstore::Internal::JSON::Request.new(
55
+ base_url: request_options[:base_url],
56
+ method: 'GET',
57
+ path: "store/order/#{URI.encode_uri_component(params[:order_id].to_s)}",
58
+ request_options: request_options,
59
+ )
60
+ response = @client.send(request)
61
+ code = response.code.to_i
62
+ if code.between?(200, 299)
63
+ result = ::Petstore::Internal::Http::ResponseBody.decode(response) { |body| ::Petstore::Store::Types::Order.load(body) }
64
+ result.validate! if result.respond_to?(:validate!)
65
+ result
66
+ else
67
+ error_class = ::Petstore::Errors::ResponseError.subclass_for_code(code)
68
+ raise error_class.new(response.body, code: code)
69
+ end
70
+ end
71
+
72
+ def delete_order(request_options: {}, **params)
73
+ params = ::Petstore::Internal::Types::Utils.normalize_keys(params)
74
+ request = ::Petstore::Internal::JSON::Request.new(
75
+ base_url: request_options[:base_url],
76
+ method: 'DELETE',
77
+ path: "store/order/#{URI.encode_uri_component(params[:order_id].to_s)}",
78
+ request_options: request_options,
79
+ )
80
+ response = @client.send(request)
81
+ code = response.code.to_i
82
+ return if code.between?(200, 299)
83
+
84
+ error_class = ::Petstore::Errors::ResponseError.subclass_for_code(code)
85
+ raise error_class.new(response.body, code: code)
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Petstore
4
+ module Store
5
+ module Types
6
+ class DeleteOrderRequest < ::Petstore::Internal::Types::Model
7
+ field :order_id, -> { Integer }, optional: false, nullable: false, api_name: 'orderId'
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Petstore
4
+ module Store
5
+ module Types
6
+ class GetOrderByIDRequest < ::Petstore::Internal::Types::Model
7
+ field :order_id, -> { Integer }, optional: false, nullable: false, api_name: 'orderId'
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Petstore
4
+ module Store
5
+ module Types
6
+ class Order < ::Petstore::Internal::Types::Model
7
+ field :id, -> { Integer }, optional: true, nullable: false
8
+ field :pet_id, -> { Integer }, optional: true, nullable: false, api_name: 'petId'
9
+ field :quantity, -> { Integer }, optional: true, nullable: false
10
+ field :ship_date, -> { String }, optional: true, nullable: false, api_name: 'shipDate'
11
+ field :status, -> { ::Petstore::Types::OrderStatus }, optional: true, nullable: false
12
+ field :complete, -> { ::Petstore::Internal::Types::Boolean }, optional: true, nullable: false
13
+
14
+ def self.load(str)
15
+ coerce(::JSON.parse(str, symbolize_names: true))
16
+ end
17
+
18
+ def self.dump(value)
19
+ coerced = coerce(value)
20
+ ::JSON.generate(coerced.nil? || !coerced.respond_to?(:to_h) ? coerced : coerced.to_h)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Petstore
4
+ module Types
5
+ class APIResponse < ::Petstore::Internal::Types::Model
6
+ field :code, -> { Integer }, optional: true, nullable: false
7
+ field :type, -> { String }, optional: true, nullable: false
8
+ field :message, -> { String }, optional: true, nullable: false
9
+
10
+ def self.load(str)
11
+ coerce(::JSON.parse(str, symbolize_names: true))
12
+ end
13
+
14
+ def self.dump(value)
15
+ coerced = coerce(value)
16
+ ::JSON.generate(coerced.nil? || !coerced.respond_to?(:to_h) ? coerced : coerced.to_h)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Petstore
4
+ module Types
5
+ class Category < ::Petstore::Internal::Types::Model
6
+ field :id, -> { Integer }, optional: true, nullable: false
7
+ field :name, -> { String }, optional: true, nullable: false
8
+
9
+ def self.load(str)
10
+ coerce(::JSON.parse(str, symbolize_names: true))
11
+ end
12
+
13
+ def self.dump(value)
14
+ coerced = coerce(value)
15
+ ::JSON.generate(coerced.nil? || !coerced.respond_to?(:to_h) ? coerced : coerced.to_h)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Petstore
4
+ module Types
5
+ module OrderStatus
6
+ extend ::Petstore::Internal::Types::Enum
7
+
8
+ PLACED = :placed
9
+ APPROVED = :approved
10
+ DELIVERED = :delivered
11
+
12
+ def self.load(str)
13
+ coerce(::JSON.parse(str, symbolize_names: true))
14
+ end
15
+
16
+ def self.dump(value)
17
+ coerced = coerce(value)
18
+ ::JSON.generate(coerced.nil? || !coerced.respond_to?(:to_h) ? coerced : coerced.to_h)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Petstore
4
+ module Types
5
+ module PetStatus
6
+ extend ::Petstore::Internal::Types::Enum
7
+
8
+ AVAILABLE = :available
9
+ PENDING = :pending
10
+ SOLD = :sold
11
+
12
+ def self.load(str)
13
+ coerce(::JSON.parse(str, symbolize_names: true))
14
+ end
15
+
16
+ def self.dump(value)
17
+ coerced = coerce(value)
18
+ ::JSON.generate(coerced.nil? || !coerced.respond_to?(:to_h) ? coerced : coerced.to_h)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Petstore
4
+ module Types
5
+ class Tag < ::Petstore::Internal::Types::Model
6
+ field :id, -> { Integer }, optional: true, nullable: false
7
+ field :name, -> { String }, optional: true, nullable: false
8
+
9
+ def self.load(str)
10
+ coerce(::JSON.parse(str, symbolize_names: true))
11
+ end
12
+
13
+ def self.dump(value)
14
+ coerced = coerce(value)
15
+ ::JSON.generate(coerced.nil? || !coerced.respond_to?(:to_h) ? coerced : coerced.to_h)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,149 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'uri'
4
+
5
+ module Petstore
6
+ module User
7
+ class Client
8
+ def initialize(client:)
9
+ @client = client
10
+ end
11
+
12
+ def create_user(request_options: {}, **params)
13
+ params = ::Petstore::Internal::Types::Utils.normalize_keys(params)
14
+ request_body = ::Petstore::User::Types::User.new(params)
15
+ request_body.validate! if request_body.respond_to?(:validate!)
16
+ request = ::Petstore::Internal::JSON::Request.new(
17
+ base_url: request_options[:base_url],
18
+ method: 'POST',
19
+ path: 'user',
20
+ body: request_body.to_h,
21
+ request_options: request_options,
22
+ )
23
+ response = @client.send(request)
24
+ code = response.code.to_i
25
+ if code.between?(200, 299)
26
+ result = ::Petstore::Internal::Http::ResponseBody.decode(response) { |body| ::Petstore::User::Types::User.load(body) }
27
+ result.validate! if result.respond_to?(:validate!)
28
+ result
29
+ else
30
+ error_class = ::Petstore::Errors::ResponseError.subclass_for_code(code)
31
+ raise error_class.new(response.body, code: code)
32
+ end
33
+ end
34
+
35
+ def create_users_with_list_input(request_options: {}, **params)
36
+ params = ::Petstore::Internal::Types::Utils.normalize_keys(params)
37
+ request = ::Petstore::Internal::JSON::Request.new(
38
+ base_url: request_options[:base_url],
39
+ method: 'POST',
40
+ path: 'user/createWithList',
41
+ body: params,
42
+ request_options: request_options,
43
+ )
44
+ response = @client.send(request)
45
+ code = response.code.to_i
46
+ if code.between?(200, 299)
47
+ result = ::Petstore::Internal::Http::ResponseBody.decode(response) { |body| ::Petstore::User::Types::User.load(body) }
48
+ result.validate! if result.respond_to?(:validate!)
49
+ result
50
+ else
51
+ error_class = ::Petstore::Errors::ResponseError.subclass_for_code(code)
52
+ raise error_class.new(response.body, code: code)
53
+ end
54
+ end
55
+
56
+ def login_user(request_options: {}, **params)
57
+ params = ::Petstore::Internal::Types::Utils.normalize_keys(params)
58
+ query_params = {}
59
+ query_params['username'] = params[:username] if params.key?(:username)
60
+ query_params['password'] = params[:password] if params.key?(:password)
61
+ request = ::Petstore::Internal::JSON::Request.new(
62
+ base_url: request_options[:base_url],
63
+ method: 'GET',
64
+ path: 'user/login',
65
+ query: query_params,
66
+ request_options: request_options,
67
+ )
68
+ response = @client.send(request)
69
+ code = response.code.to_i
70
+ if code.between?(200, 299)
71
+ ::Petstore::Internal::Http::ResponseBody.decode(response) { |body| ::JSON.parse(body) }
72
+ else
73
+ error_class = ::Petstore::Errors::ResponseError.subclass_for_code(code)
74
+ raise error_class.new(response.body, code: code)
75
+ end
76
+ end
77
+
78
+ def logout_user(request_options: {}, **params)
79
+ request = ::Petstore::Internal::JSON::Request.new(
80
+ base_url: request_options[:base_url],
81
+ method: 'GET',
82
+ path: 'user/logout',
83
+ request_options: request_options,
84
+ )
85
+ response = @client.send(request)
86
+ code = response.code.to_i
87
+ return if code.between?(200, 299)
88
+
89
+ error_class = ::Petstore::Errors::ResponseError.subclass_for_code(code)
90
+ raise error_class.new(response.body, code: code)
91
+ end
92
+
93
+ def get_user_by_name(request_options: {}, **params)
94
+ params = ::Petstore::Internal::Types::Utils.normalize_keys(params)
95
+ request = ::Petstore::Internal::JSON::Request.new(
96
+ base_url: request_options[:base_url],
97
+ method: 'GET',
98
+ path: "user/#{URI.encode_uri_component(params[:username].to_s)}",
99
+ request_options: request_options,
100
+ )
101
+ response = @client.send(request)
102
+ code = response.code.to_i
103
+ if code.between?(200, 299)
104
+ result = ::Petstore::Internal::Http::ResponseBody.decode(response) { |body| ::Petstore::User::Types::User.load(body) }
105
+ result.validate! if result.respond_to?(:validate!)
106
+ result
107
+ else
108
+ error_class = ::Petstore::Errors::ResponseError.subclass_for_code(code)
109
+ raise error_class.new(response.body, code: code)
110
+ end
111
+ end
112
+
113
+ def update_user(request_options: {}, **params)
114
+ params = ::Petstore::Internal::Types::Utils.normalize_keys(params)
115
+ request_body = ::Petstore::User::Types::User.new(params.except(:username))
116
+ request_body.validate! if request_body.respond_to?(:validate!)
117
+ request = ::Petstore::Internal::JSON::Request.new(
118
+ base_url: request_options[:base_url],
119
+ method: 'PUT',
120
+ path: "user/#{URI.encode_uri_component(params[:username].to_s)}",
121
+ body: request_body.to_h,
122
+ request_options: request_options,
123
+ )
124
+ response = @client.send(request)
125
+ code = response.code.to_i
126
+ return if code.between?(200, 299)
127
+
128
+ error_class = ::Petstore::Errors::ResponseError.subclass_for_code(code)
129
+ raise error_class.new(response.body, code: code)
130
+ end
131
+
132
+ def delete_user(request_options: {}, **params)
133
+ params = ::Petstore::Internal::Types::Utils.normalize_keys(params)
134
+ request = ::Petstore::Internal::JSON::Request.new(
135
+ base_url: request_options[:base_url],
136
+ method: 'DELETE',
137
+ path: "user/#{URI.encode_uri_component(params[:username].to_s)}",
138
+ request_options: request_options,
139
+ )
140
+ response = @client.send(request)
141
+ code = response.code.to_i
142
+ return if code.between?(200, 299)
143
+
144
+ error_class = ::Petstore::Errors::ResponseError.subclass_for_code(code)
145
+ raise error_class.new(response.body, code: code)
146
+ end
147
+ end
148
+ end
149
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Petstore
4
+ module User
5
+ module Types
6
+ class DeleteUserRequest < ::Petstore::Internal::Types::Model
7
+ field :username, -> { String }, optional: false, nullable: false
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Petstore
4
+ module User
5
+ module Types
6
+ class GetUserByNameRequest < ::Petstore::Internal::Types::Model
7
+ field :username, -> { String }, optional: false, nullable: false
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Petstore
4
+ module User
5
+ module Types
6
+ class LoginUserRequest < ::Petstore::Internal::Types::Model
7
+ field :username, -> { String }, optional: true, nullable: false
8
+
9
+ field :password, -> { String }, optional: true, nullable: false
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Petstore
4
+ module User
5
+ module Types
6
+ class User < ::Petstore::Internal::Types::Model
7
+ field :id, -> { Integer }, optional: true, nullable: false
8
+ field :username, -> { String }, optional: true, nullable: false
9
+ field :first_name, -> { String }, optional: true, nullable: false, api_name: 'firstName'
10
+ field :last_name, -> { String }, optional: true, nullable: false, api_name: 'lastName'
11
+ field :email, -> { String }, optional: true, nullable: false
12
+ field :password, -> { String }, optional: true, nullable: false
13
+ field :phone, -> { String }, optional: true, nullable: false
14
+ field :user_status, -> { Integer }, optional: true, nullable: false, api_name: 'userStatus'
15
+
16
+ def self.load(str)
17
+ coerce(::JSON.parse(str, symbolize_names: true))
18
+ end
19
+
20
+ def self.dump(value)
21
+ coerced = coerce(value)
22
+ ::JSON.generate(coerced.nil? || !coerced.respond_to?(:to_h) ? coerced : coerced.to_h)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Petstore
4
+ module Validator
5
+ class << self
6
+ def validate_string!(value, field, min_length: nil, max_length: nil, pattern: nil)
7
+ return if value.nil?
8
+
9
+ raise ValidationError.new(field, "must be at least #{min_length} characters long") if min_length && value.to_s.length < min_length
10
+ raise ValidationError.new(field, "must be at most #{max_length} characters long") if max_length && value.to_s.length > max_length
11
+ return unless pattern && !value.to_s.match?(pattern)
12
+
13
+ raise ValidationError.new(field, "must match pattern #{pattern.source}")
14
+ end
15
+
16
+ def validate_number!(value, field, min: nil, min_exclusive: nil, max: nil, max_exclusive: nil,
17
+ multiple_of: nil)
18
+ return if value.nil?
19
+
20
+ raise ValidationError.new(field, "must be >= #{min}") if min && value < min
21
+ raise ValidationError.new(field, "must be > #{min_exclusive}") if min_exclusive && value <= min_exclusive
22
+ raise ValidationError.new(field, "must be <= #{max}") if max && value > max
23
+ raise ValidationError.new(field, "must be < #{max_exclusive}") if max_exclusive && value >= max_exclusive
24
+ return unless multiple_of && (value % multiple_of).abs > Float::EPSILON * multiple_of.abs
25
+
26
+ raise ValidationError.new(field, "must be a multiple of #{multiple_of}")
27
+ end
28
+
29
+ alias validate_integer! validate_number!
30
+
31
+ def validate_array!(value, field, min_items: nil, max_items: nil, unique_items: false)
32
+ return if value.nil?
33
+
34
+ raise ValidationError.new(field, "must have at least #{min_items} items") if min_items && value.length < min_items
35
+ raise ValidationError.new(field, "must have at most #{max_items} items") if max_items && value.length > max_items
36
+ return unless unique_items && value.length != value.uniq.length
37
+
38
+ raise ValidationError.new(field, 'must contain unique items')
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Petstore
4
+ VERSION = '0.1.0'
5
+ end
data/lib/petstore.rb ADDED
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'petstore/version'
4
+ require 'json'
5
+ require_relative 'petstore/internal/json/serializable'
6
+ require_relative 'petstore/internal/types/type'
7
+ require_relative 'petstore/internal/types/utils'
8
+ require_relative 'petstore/internal/types/union'
9
+ require_relative 'petstore/internal/errors/constraint_error'
10
+ require_relative 'petstore/internal/errors/type_error'
11
+ require_relative 'petstore/internal/http/base_request'
12
+ require_relative 'petstore/internal/json/request'
13
+ require_relative 'petstore/internal/raw/request'
14
+ require_relative 'petstore/internal/form/request'
15
+ require_relative 'petstore/internal/http/raw_client'
16
+ require_relative 'petstore/internal/http/response_body'
17
+ require_relative 'petstore/internal/http/event_stream'
18
+ require_relative 'petstore/internal/multipart/multipart_encoder'
19
+ require_relative 'petstore/internal/multipart/multipart_form_data_part'
20
+ require_relative 'petstore/internal/multipart/multipart_form_data'
21
+ require_relative 'petstore/internal/multipart/multipart_request'
22
+ require_relative 'petstore/internal/types/model/field'
23
+ require_relative 'petstore/internal/types/model'
24
+ require_relative 'petstore/internal/types/array'
25
+ require_relative 'petstore/internal/types/boolean'
26
+ require_relative 'petstore/internal/types/enum'
27
+ require_relative 'petstore/internal/types/hash'
28
+ require_relative 'petstore/internal/types/unknown'
29
+ require_relative 'petstore/internal/iterators/item_iterator'
30
+ require_relative 'petstore/internal/iterators/cursor_item_iterator'
31
+ require_relative 'petstore/internal/iterators/offset_item_iterator'
32
+ require_relative 'petstore/internal/iterators/cursor_page_iterator'
33
+ require_relative 'petstore/internal/iterators/offset_page_iterator'
34
+ require_relative 'petstore/errors/api_error'
35
+ require_relative 'petstore/errors/response_error'
36
+ require_relative 'petstore/errors/client_error'
37
+ require_relative 'petstore/errors/redirect_error'
38
+ require_relative 'petstore/errors/server_error'
39
+ require_relative 'petstore/errors/timeout_error'
40
+ require_relative 'petstore/errors/connection_error'
41
+ require_relative 'petstore/error'
42
+ require_relative 'petstore/models/serializable'
43
+ require_relative 'petstore/models/union_type'
44
+ require_relative 'petstore/models/open_model'
45
+ require_relative 'petstore/serializers/json_serializer'
46
+ require_relative 'petstore/serializers/xml_serializer'
47
+ require_relative 'petstore/serializers/form_serializer'
48
+ require_relative 'petstore/http/auth'
49
+ require_relative 'petstore/http/oauth_token_manager'
50
+ require_relative 'petstore/environment'
51
+ require_relative 'petstore/config'
52
+ require_relative 'petstore/validator'
53
+ require_relative 'petstore/pet/types/pet'
54
+ require_relative 'petstore/types/category'
55
+ require_relative 'petstore/types/tag'
56
+ require_relative 'petstore/types/pet_status'
57
+ require_relative 'petstore/pet/types/find_pets_by_status_request_status'
58
+ require_relative 'petstore/types/api_response'
59
+ require_relative 'petstore/store/types/order'
60
+ require_relative 'petstore/types/order_status'
61
+ require_relative 'petstore/user/types/user'
62
+ require_relative 'petstore/pet/types/find_pets_by_status_request'
63
+ require_relative 'petstore/pet/types/find_pets_by_tags_request'
64
+ require_relative 'petstore/pet/types/get_pet_by_id_request'
65
+ require_relative 'petstore/pet/types/update_pet_with_form_request'
66
+ require_relative 'petstore/pet/types/delete_pet_request'
67
+ require_relative 'petstore/store/types/get_order_by_id_request'
68
+ require_relative 'petstore/store/types/delete_order_request'
69
+ require_relative 'petstore/user/types/login_user_request'
70
+ require_relative 'petstore/user/types/get_user_by_name_request'
71
+ require_relative 'petstore/user/types/delete_user_request'
72
+ require_relative 'petstore/pet/client'
73
+ require_relative 'petstore/store/client'
74
+ require_relative 'petstore/user/client'
75
+ require_relative 'petstore/client'
76
+
77
+ module Petstore
78
+ end