diff options
author | Jan Provaznik <jprovaznik@gitlab.com> | 2018-05-31 20:32:36 +0200 |
---|---|---|
committer | Jan Provaznik <jprovaznik@gitlab.com> | 2018-05-31 20:32:36 +0200 |
commit | cf87c3be18a8dfb6c31d549d35d6d2c07517df1d (patch) | |
tree | 2dbd29a579b202fba4c00cb0dc4da709a4a14baa /app/models/ci/pipeline.rb | |
parent | e57ad62d488b15b9e65ea63f4ab78e51336318a5 (diff) | |
download | gitlab-ce-rails5-enum-nil.tar.gz |
Enable mapping to nil in enumsrails5-enum-nil
Enum in Rails 5 does not map nil values - IOW nil value remains nil,
even if there is a key with nil value in the enum definition.
This commit overrides the underlying Enum methods so nil value is
still mapped. This solution is far from being ideal: it uses dynamic
definition of methods which introduces more magic/confusion
into the codebase.
It would be better to get rid of the nil value in enums.
Diffstat (limited to 'app/models/ci/pipeline.rb')
-rw-r--r-- | app/models/ci/pipeline.rb | 16 |
1 files changed, 3 insertions, 13 deletions
diff --git a/app/models/ci/pipeline.rb b/app/models/ci/pipeline.rb index 53af87a271a..bf6fe113cb0 100644 --- a/app/models/ci/pipeline.rb +++ b/app/models/ci/pipeline.rb @@ -7,6 +7,7 @@ module Ci include Presentable include Gitlab::OptimisticLocking include Gitlab::Utils::StrongMemoize + include EnumWithNil belongs_to :project, inverse_of: :pipelines belongs_to :user @@ -49,7 +50,7 @@ module Ci after_create :keep_around_commits, unless: :importing? - enum source: { + enum_with_nil source: { unknown: nil, push: 1, web: 2, @@ -59,7 +60,7 @@ module Ci external: 6 } - enum config_source: { + enum_with_nil config_source: { unknown_source: nil, repository_source: 1, auto_devops_source: 2 @@ -575,17 +576,6 @@ module Ci @latest_builds_with_artifacts ||= builds.latest.with_artifacts_archive.to_a end - # Rails 5.0 autogenerated question mark enum methods return wrong result if enum value is nil. - # They always return `false`. - # These methods overwrite autogenerated ones to return correct results. - def unknown? - Gitlab.rails5? ? source.nil? : super - end - - def unknown_source? - Gitlab.rails5? ? config_source.nil? : super - end - private def ci_yaml_from_repo |