Module: PetstoreApiClient::Clients::Concerns::ResourceOperations
- Included in:
- PetClient, StoreClient
- Defined in:
- lib/petstore_api_client/clients/concerns/resource_operations.rb
Overview
Shared resource operations using Template Method pattern Eliminates duplication between PetClient and StoreClient
This module provides generic CRUD operations that work for any resource type. Subclasses just need to define:
-
model_class: The model class (e.g., Models::Pet)
-
resource_name: The API path segment (e.g., “pet”, “store/order”)
-
id_field_name: Human-readable name for validation errors (e.g., “Pet ID”)
Instance Method Summary collapse
-
#create_resource(resource_data) ⇒ Object
Template method for creating a resource Pattern: build → validate → POST → parse response.
-
#delete_resource(resource_id) ⇒ Object
Template method for deleting a resource Pattern: validate ID → DELETE → return success.
-
#get_resource(resource_id) ⇒ Object
Template method for getting a resource by ID Pattern: validate ID → GET → parse response.
-
#update_resource(resource_data) ⇒ Object
Template method for updating a resource Pattern: build → validate → PUT → parse response.
Instance Method Details
#create_resource(resource_data) ⇒ Object
Template method for creating a resource Pattern: build → validate → POST → parse response
17 18 19 20 21 22 23 |
# File 'lib/petstore_api_client/clients/concerns/resource_operations.rb', line 17 def create_resource(resource_data) resource = build_resource(resource_data) validate_resource!(resource) resp = post(create_endpoint, body: resource.to_h) model_class.from_response(resp.body) end |
#delete_resource(resource_id) ⇒ Object
Template method for deleting a resource Pattern: validate ID → DELETE → return success
46 47 48 49 50 51 |
# File 'lib/petstore_api_client/clients/concerns/resource_operations.rb', line 46 def delete_resource(resource_id) validate_id!(resource_id, id_field_name) delete("#{resource_name}/#{resource_id}") true end |
#get_resource(resource_id) ⇒ Object
Template method for getting a resource by ID Pattern: validate ID → GET → parse response
37 38 39 40 41 42 |
# File 'lib/petstore_api_client/clients/concerns/resource_operations.rb', line 37 def get_resource(resource_id) validate_id!(resource_id, id_field_name) resp = get("#{resource_name}/#{resource_id}") model_class.from_response(resp.body) end |
#update_resource(resource_data) ⇒ Object
Template method for updating a resource Pattern: build → validate → PUT → parse response
27 28 29 30 31 32 33 |
# File 'lib/petstore_api_client/clients/concerns/resource_operations.rb', line 27 def update_resource(resource_data) resource = build_resource(resource_data) validate_resource!(resource) resp = put(update_endpoint, body: resource.to_h) model_class.from_response(resp.body) end |