# Posgresql JSONB columns should NOT be declared as serialized, Rails 5
# already know how to properly treat them.
+ attribute :properties, :jsonbHash, default: {}
+ attribute :storage_classes_desired, :jsonbArray, default: ["default"]
+ attribute :storage_classes_confirmed, :jsonbArray, default: []
- before_validation :fill_field_defaults
before_validation :default_empty_manifest
before_validation :default_storage_classes, on: :create
before_validation :check_encoding
self.current_version_uuid ||= self.uuid
true
end
-
- def fill_field_defaults
- self.properties ||= {}
- self.storage_classes_desired ||= []
- self.storage_classes_confirmed ||= []
- end
end
# Posgresql JSONB columns should NOT be declared as serialized, Rails 5
# already know how to properly treat them.
+ attribute :secret_mounts, :jsonbHash, default: {}
+ attribute :runtime_status, :jsonbHash, default: {}
+ attribute :runtime_auth_scopes, :jsonbHash, default: {}
+
serialize :environment, Hash
serialize :mounts, Hash
serialize :runtime_constraints, Hash
# Posgresql JSONB columns should NOT be declared as serialized, Rails 5
# already know how to properly treat them.
+ attribute :properties, :jsonbHash, default: {}
+ attribute :secret_mounts, :jsonbHash, default: {}
+
serialize :environment, Hash
serialize :mounts, Hash
serialize :runtime_constraints, Hash
# Posgresql JSONB columns should NOT be declared as serialized, Rails 5
# already know how to properly treat them.
+ attribute :properties, :jsonbHash, default: {}
after_create :invalidate_permissions_cache
after_update :maybe_invalidate_permissions_cache
end
true
end
-
end
--- /dev/null
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
+class JsonbType
+ # Emulate pre-rails5.0 behavior by having a interpreting NULL/nil as
+ # some other default value.
+ class WithDefault < ActiveModel::Type::Value
+ include ActiveModel::Type::Helpers::Mutable
+ @@default_value = nil
+
+ def deserialize(value)
+ if value.nil?
+ @@default_value
+ elsif value.is_a?(::String)
+ SafeJSON.load(value) rescue @@default_value
+ else
+ value
+ end
+ end
+
+ def serialize(value)
+ if value.nil?
+ @@default_value
+ else
+ SafeJSON.dump(value)
+ end
+ end
+ end
+
+ class Hash < JsonbType::WithDefault
+ @@default_value = {}
+ end
+
+ class Array < JsonbType::WithDefault
+ @@default_value = []
+ end
+end
\ No newline at end of file
# Posgresql JSONB columns should NOT be declared as serialized, Rails 5
# already know how to properly treat them.
+ attribute :properties, :jsonbHash, default: {}
before_create :permission_to_attach_to_objects
before_update :permission_to_attach_to_objects
super
end
end
-
end
# Posgresql JSONB columns should NOT be declared as serialized, Rails 5
# already know how to properly treat them.
+ attribute :properties, :jsonbHash, default: {}
+ attribute :info, :jsonbHash, default: {}
- before_validation :fill_field_defaults
before_validation :ensure_ping_secret
after_update :dns_server_update
protected
- def fill_field_defaults
- self.info ||= {}
- self.properties ||= {}
- end
-
def assign_hostname
if self.hostname.nil? and Rails.configuration.assign_node_hostname
self.hostname = self.class.hostname_for_slot(self.slot_number)
--- /dev/null
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
+# JSONB backed Hash & Array types that default to their empty versions when
+# reading NULL from the database, or get nil passed by parameter.
+ActiveRecord::Type.register(:jsonbHash, JsonbType::Hash)
+ActiveRecord::Type.register(:jsonbArray, JsonbType::Array)