Add conformity in package metadatum associations and validation
If a package is associated with a metadata record from conan_metadata
, maven_metadata
, etc..., it should not be allowed to associate with another package metadata type, and it should be validated that the package.package_type
matches the metadata type:
If package.package_type = 'conan'
, then package.conan_metadatum
should be possible, but package.maven_metadatum
should not.
This was raised in the Composer package manager MR: !22415 (comment 279046917)
We can accomplish this with a where
clause on the association:
belongs_to :package, -> { where(package_type: :composer) }
as well as adding an additional validation to the metadatum table so when a record is created, the parent package record type is checked:
validate :composer_package_type
private
def composer_package_type
unless package && package.composer?
errors.add(:base, 'Package type must be Composer')
end
end
Edited by Steve Abrams