From e6bd3253521e639814a4c75949555536145253a8 Mon Sep 17 00:00:00 2001
From: Alexander Olofsson <alexander.olofsson@liu.se>
Date: Mon, 10 Jul 2023 08:55:01 +0200
Subject: [PATCH] Handle inherited fields correctly

---
 lib/liudesk_cmdb.rb                     |  2 +-
 lib/liudesk_cmdb/model.rb               | 13 +++++++++++--
 lib/liudesk_cmdb/models/hardware.rb     |  4 +---
 lib/liudesk_cmdb/models/linux_client.rb |  3 ---
 lib/liudesk_cmdb/models/server.rb       |  3 ---
 5 files changed, 13 insertions(+), 12 deletions(-)

diff --git a/lib/liudesk_cmdb.rb b/lib/liudesk_cmdb.rb
index 98fbfd1..3e0ad14 100644
--- a/lib/liudesk_cmdb.rb
+++ b/lib/liudesk_cmdb.rb
@@ -6,9 +6,9 @@ require "net/http"
 require "time"
 
 require_relative "liudesk_cmdb/version"
+require_relative "liudesk_cmdb/util"
 require_relative "liudesk_cmdb/client"
 require_relative "liudesk_cmdb/model"
-require_relative "liudesk_cmdb/util"
 
 # Base module for Liudesk CMDB
 module LiudeskCMDB
diff --git a/lib/liudesk_cmdb/model.rb b/lib/liudesk_cmdb/model.rb
index 972822d..371ec36 100644
--- a/lib/liudesk_cmdb/model.rb
+++ b/lib/liudesk_cmdb/model.rb
@@ -56,8 +56,6 @@ module LiudeskCMDB
     end
 
     class << self
-      attr_reader :fields
-
       def create(client, **data)
         new(client, **data).create
       end
@@ -115,6 +113,12 @@ module LiudeskCMDB
         @identifier
       end
 
+      def fields
+        return @fields || {} unless superclass <= Model
+
+        superclass.fields.merge(@fields || {})
+      end
+
       protected
 
       def read_fields(*fields)
@@ -157,6 +161,11 @@ module LiudeskCMDB
       end
     end
 
+    read_fields :created_date, :updated_date, :archived
+
+    field_attributes :created_date, convert: Time
+    field_attributes :updated_date, convert: Time
+
     def create
       data = client.post(self.class.api_url, self.class.model_version, data_for_write(all: true))
       load_data(JSON.parse(data))
diff --git a/lib/liudesk_cmdb/models/hardware.rb b/lib/liudesk_cmdb/models/hardware.rb
index 3fd3ac4..4335f0a 100644
--- a/lib/liudesk_cmdb/models/hardware.rb
+++ b/lib/liudesk_cmdb/models/hardware.rb
@@ -9,7 +9,7 @@ module LiudeskCMDB::Models
     identifier :guid
     supports_search
 
-    read_fields :guid, :created_date, :updated_date, :name, :archived
+    read_fields :guid, :name
     access_fields \
       :division, :asset_owner, :status, :stolen,
       :capital_equipment_id, :capital_object_id, :supplier, :supplier_article_number,
@@ -19,8 +19,6 @@ module LiudeskCMDB::Models
       :bios_uuid, :external_documentation_link, :group_or_lab, :contact_information, :misc_information
 
     field_attributes :hostname, name: "hostName"
-    field_attributes :created_date, convert: Time
-    field_attributes :updated_date, convert: Time
     field_attributes :purchase_date, convert: Time
     field_attributes :delivery_date, convert: Time
     field_attributes :warranty_enddate, convert: Time
diff --git a/lib/liudesk_cmdb/models/linux_client.rb b/lib/liudesk_cmdb/models/linux_client.rb
index d2e5d58..8ced5f5 100644
--- a/lib/liudesk_cmdb/models/linux_client.rb
+++ b/lib/liudesk_cmdb/models/linux_client.rb
@@ -20,7 +20,6 @@ module LiudeskCMDB::Models
 
     identifier :hostname
 
-    read_fields :created_date, :updated_date, :archived
     access_fields \
       :hostname, :division, :asset_owner, :certificate_information,
       :network_access_role, :hardware_id,
@@ -31,8 +30,6 @@ module LiudeskCMDB::Models
     field_attributes :hostname, name: "hostName"
     field_attributes :hardware_id, name: "hardwareID"
     field_attributes :active_directory_ou, name: "activeDirectoryOU"
-    field_attributes :created_date, convert: Time
-    field_attributes :updated_date, convert: Time
     field_attributes :operating_system_install_date, convert: Time
     field_attributes :ad_creation_date, convert: Time
 
diff --git a/lib/liudesk_cmdb/models/server.rb b/lib/liudesk_cmdb/models/server.rb
index 9a8ac46..78f21ea 100644
--- a/lib/liudesk_cmdb/models/server.rb
+++ b/lib/liudesk_cmdb/models/server.rb
@@ -8,7 +8,6 @@ module LiudeskCMDB::Models
 
     identifier :hostname
 
-    read_fields :created_date, :updated_date, :archived
     access_fields \
       :hostname, :division, :asset_owner, :certificate_information,
       :network_access_role, :hardware_id,
@@ -19,8 +18,6 @@ module LiudeskCMDB::Models
     field_attributes :hostname, name: "hostName"
     field_attributes :hardware_id, name: "hardwareID"
     field_attributes :active_directory_ou, name: "activeDirectoryOU"
-    field_attributes :created_date, convert: Time
-    field_attributes :updated_date, convert: Time
     field_attributes :operating_system_install_date, convert: Time
     field_attributes :ad_creation_date, convert: Time
 
-- 
GitLab