Class: PetstoreApiClient::Clients::PetClient
- Inherits:
-
PetstoreApiClient::Client
- Object
- PetstoreApiClient::Client
- PetstoreApiClient::Clients::PetClient
- Includes:
- Concerns::Pagination, Concerns::ResourceOperations
- Defined in:
- lib/petstore_api_client/clients/pet_client.rb
Overview
Client for Pet-related API endpoints Handles creation, retrieval, updating, and deletion of pets
Refactored to use ResourceOperations concern (Template Method pattern) which eliminates ~50 lines of duplication with StoreClient
Constant Summary
Constants included from Concerns::Pagination
Concerns::Pagination::DEFAULT_PAGE, Concerns::Pagination::DEFAULT_PER_PAGE, Concerns::Pagination::MAX_PER_PAGE
Instance Attribute Summary
Attributes inherited from PetstoreApiClient::Client
Instance Method Summary collapse
-
#find_by_status(status, options = {}) ⇒ PaginatedCollection<Pet>
Find pets by status with optional pagination.
-
#find_by_tags(tags, options = {}) ⇒ PaginatedCollection<Pet>
Find pets by tags with optional pagination.
Methods included from Concerns::ResourceOperations
#create_resource, #delete_resource, #get_resource, #update_resource
Methods inherited from PetstoreApiClient::Client
Methods included from Request
Constructor Details
This class inherits a constructor from PetstoreApiClient::Client
Instance Method Details
#find_by_status(status, options = {}) ⇒ PaginatedCollection<Pet>
Find pets by status with optional pagination
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/petstore_api_client/clients/pet_client.rb', line 43 def find_by_status(status, = {}) # Validate status values statuses = Array(status) validate_statuses!(statuses) # Make API request (returns all matching pets) params = { status: statuses.join(",") } resp = get("pet/findByStatus", params: params) # Parse response into Pet objects pets = Array(resp.body).map { |pet_data| Models::Pet.from_response(pet_data) } # Apply client-side pagination (API doesn't support server-side pagination) apply_client_side_pagination(pets, ) end |
#find_by_tags(tags, options = {}) ⇒ PaginatedCollection<Pet>
Find pets by tags with optional pagination
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/petstore_api_client/clients/pet_client.rb', line 73 def (, = {}) # Ensure tags is an array tag_array = Array() raise ValidationError, "Tags cannot be empty" if tag_array.empty? # Make API request params = { tags: tag_array.join(",") } resp = get("pet/findByTags", params: params) # Parse response into Pet objects pets = Array(resp.body).map { |pet_data| Models::Pet.from_response(pet_data) } # Apply client-side pagination apply_client_side_pagination(pets, ) end |