Class: Pvectl::Repositories::Base Abstract

Inherits:
Object
  • Object
show all
Defined in:
lib/pvectl/repositories/base.rb

Overview

This class is abstract.

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.).

Examples:

Implementing a repository

class Vm < Base
  def list(node: nil)
    response = connection.client["cluster/resources"].get(params: { type: "vm" })
    response.map { |data| build_model(data) }
  end

  def get(vmid)
    list.find { |vm| vm.vmid == vmid.to_i }
  end

  protected

  def build_model(data)
    Models::Vm.new(data)
  end
end

See Also:

Instance Method Summary collapse

Constructor Details

#initialize(connection) ⇒ Base

Creates repository with connection.

Parameters:

  • connection (Connection)

    Proxmox API connection



38
39
40
# File 'lib/pvectl/repositories/base.rb', line 38

def initialize(connection)
  @connection = connection
end

Instance Method Details

#get(id) ⇒ Models::Base?

Gets a single resource by ID.

Parameters:

  • id (String, Integer)

    resource identifier

Returns:

Raises:

  • (NotImplementedError)

    if not implemented by subclass



55
56
57
# File 'lib/pvectl/repositories/base.rb', line 55

def get(id)
  raise NotImplementedError, "#{self.class}#get must be implemented"
end

#listArray<Models::Base>

Lists all resources.

Returns:

Raises:

  • (NotImplementedError)

    if not implemented by subclass



46
47
48
# File 'lib/pvectl/repositories/base.rb', line 46

def list
  raise NotImplementedError, "#{self.class}#list must be implemented"
end