Class: Pvectl::Repositories::Base Abstract
- Inherits:
-
Object
- Object
- Pvectl::Repositories::Base
- Defined in:
- lib/pvectl/repositories/base.rb,
sig/pvectl/repositories/base.rbs
Overview
Subclass and implement #list, #get, and #build_model.
Abstract base class for repositories.
Repositories encapsulate Proxmox API communication and are responsible for converting raw API data to domain models. Each repository handles one resource type (VMs, Containers, Nodes, etc.).
Direct Known Subclasses
Apt, Backup, Capabilities, Container, Disk, Dns, Hosts, Journal, Node, Service, Snapshot, Storage, Subscription, Syslog, Task, TaskList, TaskLog, TimeConfig, Vm, Volume
Instance Attribute Summary collapse
-
#connection ⇒ Connection
readonly
The API connection.
Instance Method Summary collapse
-
#build_model(data) ⇒ Models::Base
Builds model from API response data.
-
#extract_data(response) ⇒ Hash, Object
Extracts data from hash response.
-
#get(id) ⇒ Models::Base?
Gets a single resource by ID.
-
#initialize(connection) ⇒ Base
constructor
Creates repository with connection.
-
#list ⇒ Array<Models::Base>
Lists all resources.
-
#models_from(response, model_class) ⇒ Array
Creates model instances from API response.
-
#unwrap(response) ⇒ Array
Unwraps API response to array format.
Constructor Details
#initialize(connection) ⇒ Base
Creates repository with connection.
38 39 40 |
# File 'lib/pvectl/repositories/base.rb', line 38 def initialize(connection) @connection = connection end |
Instance Attribute Details
#connection ⇒ Connection (readonly)
Returns the API connection.
62 63 64 |
# File 'lib/pvectl/repositories/base.rb', line 62 def connection @connection end |
Instance Method Details
#build_model(data) ⇒ Models::Base
Builds model from API response data.
69 70 71 |
# File 'lib/pvectl/repositories/base.rb', line 69 def build_model(data) raise NotImplementedError, "#{self.class}#build_model must be implemented" end |
#extract_data(response) ⇒ Hash, Object
Extracts data from hash response. If response has :data key, returns its value. Otherwise returns response.
92 93 94 95 96 |
# File 'lib/pvectl/repositories/base.rb', line 92 def extract_data(response) return response unless response.is_a?(Hash) response[:data] || response end |
#get(id) ⇒ Models::Base?
Gets a single resource by ID.
55 56 57 |
# File 'lib/pvectl/repositories/base.rb', line 55 def get(id) raise NotImplementedError, "#{self.class}#get must be implemented" end |
#list ⇒ Array<Models::Base>
Lists all resources.
46 47 48 |
# File 'lib/pvectl/repositories/base.rb', line 46 def list raise NotImplementedError, "#{self.class}#list must be implemented" end |
#models_from(response, model_class) ⇒ Array
Creates model instances from API response.
103 104 105 106 107 |
# File 'lib/pvectl/repositories/base.rb', line 103 def models_from(response, model_class) return [] if response.nil? unwrap(response).map { |data| model_class.new(data) } end |
#unwrap(response) ⇒ Array
Unwraps API response to array format. Handles: Array (passthrough), Hash with :data key, Hash without :data.
78 79 80 81 82 83 84 85 |
# File 'lib/pvectl/repositories/base.rb', line 78 def unwrap(response) case response when Array then response when Hash then response[:data] || response.to_a when nil then [] else response.to_a end end |