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

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