Replace default_value_for with Rails attributes API
The current version of default_value_for
does not support Rails 7 and it looks almost unmaintained: https://github.com/FooBarWidget/default_value_for/issues/92
In Rails 6 we can use the attributes API to set default values:
diff --git a/app/models/commit_status.rb b/app/models/commit_status.rb
index 05a258e6e26..ae16cb1edf3 100644
--- a/app/models/commit_status.rb
+++ b/app/models/commit_status.rb
@@ -102,7 +102,7 @@ class CommitStatus < Ci::ApplicationRecord
# extend this `Hash` with new values.
enum_with_nil failure_reason: Enums::Ci::CommitStatus.failure_reasons
- default_value_for :retried, false
+ attribute :retried, default: false
##
# We still create some CommitStatuses outside of CreatePipelineService.
diff --git a/app/models/deploy_token.rb b/app/models/deploy_token.rb
index 20d19ec9541..39baf159c15 100644
--- a/app/models/deploy_token.rb
+++ b/app/models/deploy_token.rb
@@ -13,7 +13,7 @@ class DeployToken < ApplicationRecord
GITLAB_DEPLOY_TOKEN_NAME = 'gitlab-deploy-token'
REQUIRED_DEPENDENCY_PROXY_SCOPES = %i[read_registry write_registry].freeze
- default_value_for(:expires_at) { Forever.date }
+ attribute :expires_at, default: -> { Forever.date }
# Do NOT use this `user` for the authentication/authorization of the deploy tokens.
# It's for the auditing purpose on Credential Inventory, only.
Previous discussion: &7875 (comment 1131452313)
Models that use this gem:
-
AlertManagement::HttpIntegration
-
Appearance
-
ApplicationSetting
-
ApprovalProjectRule
-
BroadcastMessage
-
Ci::Build
-
Ci::BuildTraceChunk
-
Ci::SecureFile
-
Clusters::Applications::CertManager
-
Clusters::Applications::Crossplane
-
Clusters::Applications::Helm
-
Clusters::Applications::Ingress
-
Clusters::Applications::Jupyter
-
Clusters::Applications::Knative
-
Clusters::Applications::Prometheus
-
Clusters::Applications::Runner
-
Clusters::Cluster
-
Clusters::Integrations::Prometheus
-
Clusters::Platforms::Kubernetes
-
Clusters::Providers::Aws
-
Clusters::Providers::Gcp
-
CommitStatus
-
DependencyProxy::Blob
-
DependencyProxy::GroupSetting
-
DependencyProxy::Manifest
-
DeployToken
-
Epic
-
GitlabSubscription
-
Groups::FeatureSetting
-
Groups::RepositoryStorageMove
-
Integration
-
Issue
-
Label
-
Member
-
MergeRequest
-
Ml::Candidate
-
Note
-
NotificationSetting
-
Operations::FeatureFlag
-
PagesDomain
-
Project
-
ProjectCiCdSetting
-
ProjectFeature
-
ProjectSetting
-
ProjectStatistics
-
Projects::RepositoryStorageMove
-
Serverless::DomainCluster
-
Snippets::RepositoryStorageMove
-
Terraform::State
-
Terraform::StateVersion
-
TimeTracking::TimelogCategory
-
User
-
UserPreference
You can use _default: :mystring
for enum and after_initialize if: :new_record?
for attr_encrypted
attribute.
ApplicationRecord.descendants.reject(&:abstract_class?).select {|klass| klass.try(:_default_attribute_values?) && !(!klass.superclass.abstract_class? && klass._default_attributes.keys == klass.superclass._default_attributes.keys)}.map(&:name).sort.map { |model| " - [ ] `#{model}`" }.join("\n")
Edited by Igor Drozdov