Merge branch 'remove-ignorable-column-concern' into 'master'
Remove dependency on IgnorableColumn concern Closes #66746 See merge request gitlab-org/gitlab-ce!32427
This commit is contained in:
commit
88c6423e4a
12 changed files with 29 additions and 111 deletions
|
@ -4,7 +4,6 @@ class ApplicationSetting < ApplicationRecord
|
||||||
include CacheableAttributes
|
include CacheableAttributes
|
||||||
include CacheMarkdownField
|
include CacheMarkdownField
|
||||||
include TokenAuthenticatable
|
include TokenAuthenticatable
|
||||||
include IgnorableColumn
|
|
||||||
include ChronicDurationAttribute
|
include ChronicDurationAttribute
|
||||||
|
|
||||||
add_authentication_token_field :runners_registration_token, encrypted: -> { Feature.enabled?(:application_settings_tokens_optional_encryption, default_enabled: true) ? :optional : :required }
|
add_authentication_token_field :runners_registration_token, encrypted: -> { Feature.enabled?(:application_settings_tokens_optional_encryption, default_enabled: true) ? :optional : :required }
|
||||||
|
@ -32,12 +31,14 @@ class ApplicationSetting < ApplicationRecord
|
||||||
serialize :repository_storages # rubocop:disable Cop/ActiveRecordSerialize
|
serialize :repository_storages # rubocop:disable Cop/ActiveRecordSerialize
|
||||||
serialize :asset_proxy_whitelist, Array # rubocop:disable Cop/ActiveRecordSerialize
|
serialize :asset_proxy_whitelist, Array # rubocop:disable Cop/ActiveRecordSerialize
|
||||||
|
|
||||||
ignore_column :koding_url
|
self.ignored_columns += %i[
|
||||||
ignore_column :koding_enabled
|
clientside_sentry_dsn
|
||||||
ignore_column :sentry_enabled
|
clientside_sentry_enabled
|
||||||
ignore_column :sentry_dsn
|
koding_enabled
|
||||||
ignore_column :clientside_sentry_enabled
|
koding_url
|
||||||
ignore_column :clientside_sentry_dsn
|
sentry_dsn
|
||||||
|
sentry_enabled
|
||||||
|
]
|
||||||
|
|
||||||
cache_markdown_field :sign_in_text
|
cache_markdown_field :sign_in_text
|
||||||
cache_markdown_field :help_page_text
|
cache_markdown_field :help_page_text
|
||||||
|
|
|
@ -11,19 +11,20 @@ module Ci
|
||||||
include ObjectStorage::BackgroundMove
|
include ObjectStorage::BackgroundMove
|
||||||
include Presentable
|
include Presentable
|
||||||
include Importable
|
include Importable
|
||||||
include IgnorableColumn
|
|
||||||
include Gitlab::Utils::StrongMemoize
|
include Gitlab::Utils::StrongMemoize
|
||||||
include Deployable
|
include Deployable
|
||||||
include HasRef
|
include HasRef
|
||||||
|
|
||||||
BuildArchivedError = Class.new(StandardError)
|
BuildArchivedError = Class.new(StandardError)
|
||||||
|
|
||||||
ignore_column :commands
|
self.ignored_columns += %i[
|
||||||
ignore_column :artifacts_file
|
artifacts_file
|
||||||
ignore_column :artifacts_metadata
|
artifacts_file_store
|
||||||
ignore_column :artifacts_file_store
|
artifacts_metadata
|
||||||
ignore_column :artifacts_metadata_store
|
artifacts_metadata_store
|
||||||
ignore_column :artifacts_size
|
artifacts_size
|
||||||
|
commands
|
||||||
|
]
|
||||||
|
|
||||||
belongs_to :project, inverse_of: :builds
|
belongs_to :project, inverse_of: :builds
|
||||||
belongs_to :runner
|
belongs_to :runner
|
||||||
|
|
|
@ -4,7 +4,6 @@ module Ci
|
||||||
class Runner < ApplicationRecord
|
class Runner < ApplicationRecord
|
||||||
extend Gitlab::Ci::Model
|
extend Gitlab::Ci::Model
|
||||||
include Gitlab::SQL::Pattern
|
include Gitlab::SQL::Pattern
|
||||||
include IgnorableColumn
|
|
||||||
include RedisCacheable
|
include RedisCacheable
|
||||||
include ChronicDurationAttribute
|
include ChronicDurationAttribute
|
||||||
include FromUnion
|
include FromUnion
|
||||||
|
@ -36,7 +35,7 @@ module Ci
|
||||||
|
|
||||||
FORM_EDITABLE = %i[description tag_list active run_untagged locked access_level maximum_timeout_human_readable].freeze
|
FORM_EDITABLE = %i[description tag_list active run_untagged locked access_level maximum_timeout_human_readable].freeze
|
||||||
|
|
||||||
ignore_column :is_shared
|
self.ignored_columns = %i[is_shared]
|
||||||
|
|
||||||
has_many :builds
|
has_many :builds
|
||||||
has_many :runner_projects, inverse_of: :runner, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent
|
has_many :runner_projects, inverse_of: :runner, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
# Module that can be included into a model to make it easier to ignore database
|
|
||||||
# columns.
|
|
||||||
#
|
|
||||||
# Example:
|
|
||||||
#
|
|
||||||
# class User < ApplicationRecord
|
|
||||||
# include IgnorableColumn
|
|
||||||
#
|
|
||||||
# ignore_column :updated_at
|
|
||||||
# end
|
|
||||||
#
|
|
||||||
module IgnorableColumn
|
|
||||||
extend ActiveSupport::Concern
|
|
||||||
|
|
||||||
class_methods do
|
|
||||||
def columns
|
|
||||||
super.reject { |column| ignored_columns.include?(column.name) }
|
|
||||||
end
|
|
||||||
|
|
||||||
def ignored_columns
|
|
||||||
@ignored_columns ||= Set.new
|
|
||||||
end
|
|
||||||
|
|
||||||
def ignore_column(*names)
|
|
||||||
ignored_columns.merge(names.map(&:to_s))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,7 +1,6 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class DeployKey < Key
|
class DeployKey < Key
|
||||||
include IgnorableColumn
|
|
||||||
include FromUnion
|
include FromUnion
|
||||||
|
|
||||||
has_many :deploy_keys_projects, inverse_of: :deploy_key, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent
|
has_many :deploy_keys_projects, inverse_of: :deploy_key, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent
|
||||||
|
@ -11,7 +10,7 @@ class DeployKey < Key
|
||||||
scope :are_public, -> { where(public: true) }
|
scope :are_public, -> { where(public: true) }
|
||||||
scope :with_projects, -> { includes(deploy_keys_projects: { project: [:route, :namespace] }) }
|
scope :with_projects, -> { includes(deploy_keys_projects: { project: [:route, :namespace] }) }
|
||||||
|
|
||||||
ignore_column :can_push
|
self.ignored_columns += %i[can_push]
|
||||||
|
|
||||||
accepts_nested_attributes_for :deploy_keys_projects
|
accepts_nested_attributes_for :deploy_keys_projects
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
|
|
||||||
class Event < ApplicationRecord
|
class Event < ApplicationRecord
|
||||||
include Sortable
|
include Sortable
|
||||||
include IgnorableColumn
|
|
||||||
include FromUnion
|
include FromUnion
|
||||||
default_scope { reorder(nil) }
|
default_scope { reorder(nil) }
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,6 @@ class MergeRequestDiff < ApplicationRecord
|
||||||
include Sortable
|
include Sortable
|
||||||
include Importable
|
include Importable
|
||||||
include ManualInverseAssociation
|
include ManualInverseAssociation
|
||||||
include IgnorableColumn
|
|
||||||
include EachBatch
|
include EachBatch
|
||||||
include Gitlab::Utils::StrongMemoize
|
include Gitlab::Utils::StrongMemoize
|
||||||
include ObjectStorage::BackgroundMove
|
include ObjectStorage::BackgroundMove
|
||||||
|
|
|
@ -14,7 +14,6 @@ class Note < ApplicationRecord
|
||||||
include CacheMarkdownField
|
include CacheMarkdownField
|
||||||
include AfterCommitQueue
|
include AfterCommitQueue
|
||||||
include ResolvableNote
|
include ResolvableNote
|
||||||
include IgnorableColumn
|
|
||||||
include Editable
|
include Editable
|
||||||
include Gitlab::SQL::Pattern
|
include Gitlab::SQL::Pattern
|
||||||
include ThrottledTouch
|
include ThrottledTouch
|
||||||
|
@ -34,7 +33,7 @@ class Note < ApplicationRecord
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
ignore_column :original_discussion_id
|
self.ignored_columns += %i[original_discussion_id]
|
||||||
|
|
||||||
cache_markdown_field :note, pipeline: :note, issuable_state_filter_enabled: true
|
cache_markdown_field :note, pipeline: :note, issuable_state_filter_enabled: true
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class NotificationSetting < ApplicationRecord
|
class NotificationSetting < ApplicationRecord
|
||||||
include IgnorableColumn
|
self.ignored_columns += %i[events]
|
||||||
|
|
||||||
ignore_column :events
|
|
||||||
|
|
||||||
enum level: { global: 3, watch: 2, participating: 1, mention: 4, disabled: 0, custom: 5 }
|
enum level: { global: 3, watch: 2, participating: 1, mention: 4, disabled: 0, custom: 5 }
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,6 @@ class User < ApplicationRecord
|
||||||
include Sortable
|
include Sortable
|
||||||
include CaseSensitivity
|
include CaseSensitivity
|
||||||
include TokenAuthenticatable
|
include TokenAuthenticatable
|
||||||
include IgnorableColumn
|
|
||||||
include FeatureGate
|
include FeatureGate
|
||||||
include CreatedAtFilterable
|
include CreatedAtFilterable
|
||||||
include BulkMemberAccessLoad
|
include BulkMemberAccessLoad
|
||||||
|
@ -24,9 +23,11 @@ class User < ApplicationRecord
|
||||||
|
|
||||||
DEFAULT_NOTIFICATION_LEVEL = :participating
|
DEFAULT_NOTIFICATION_LEVEL = :participating
|
||||||
|
|
||||||
ignore_column :external_email
|
self.ignored_columns += %i[
|
||||||
ignore_column :email_provider
|
authentication_token
|
||||||
ignore_column :authentication_token
|
email_provider
|
||||||
|
external_email
|
||||||
|
]
|
||||||
|
|
||||||
add_authentication_token_field :incoming_email_token, token_generator: -> { SecureRandom.hex.to_i(16).to_s(36) }
|
add_authentication_token_field :incoming_email_token, token_generator: -> { SecureRandom.hex.to_i(16).to_s(36) }
|
||||||
add_authentication_token_field :feed_token
|
add_authentication_token_field :feed_token
|
||||||
|
|
|
@ -45,15 +45,12 @@ rule.
|
||||||
|
|
||||||
The first step is to ignore the column in the application code. This is
|
The first step is to ignore the column in the application code. This is
|
||||||
necessary because Rails caches the columns and re-uses this cache in various
|
necessary because Rails caches the columns and re-uses this cache in various
|
||||||
places. This can be done by including the `IgnorableColumn` module into the
|
places. This can be done by defining the columns to ignore. For example, to ignore
|
||||||
model, followed by defining the columns to ignore. For example, to ignore
|
|
||||||
`updated_at` in the User model you'd use the following:
|
`updated_at` in the User model you'd use the following:
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
class User < ActiveRecord::Base
|
class User < ApplicationRecord
|
||||||
include IgnorableColumn
|
self.ignored_columns += %i[updated_at]
|
||||||
|
|
||||||
ignore_column :updated_at
|
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -64,8 +61,7 @@ column. Both these changes should be submitted in the same merge request.
|
||||||
|
|
||||||
Once the changes from step 1 have been released & deployed you can set up a
|
Once the changes from step 1 have been released & deployed you can set up a
|
||||||
separate merge request that removes the ignore rule. This merge request can
|
separate merge request that removes the ignore rule. This merge request can
|
||||||
simply remove the `ignore_column` line, and the `include IgnorableColumn` line
|
simply remove the `self.ignored_columns` line.
|
||||||
if no other `ignore_column` calls remain.
|
|
||||||
|
|
||||||
## Renaming Columns
|
## Renaming Columns
|
||||||
|
|
||||||
|
|
|
@ -1,44 +0,0 @@
|
||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
require 'spec_helper'
|
|
||||||
|
|
||||||
describe IgnorableColumn do
|
|
||||||
let :base_class do
|
|
||||||
Class.new do
|
|
||||||
def self.columns
|
|
||||||
# This method does not have access to "double"
|
|
||||||
[
|
|
||||||
Struct.new(:name).new('id'),
|
|
||||||
Struct.new(:name).new('title'),
|
|
||||||
Struct.new(:name).new('date')
|
|
||||||
]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
let :model do
|
|
||||||
Class.new(base_class) do
|
|
||||||
include IgnorableColumn
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe '.columns' do
|
|
||||||
it 'returns the columns, excluding the ignored ones' do
|
|
||||||
model.ignore_column(:title, :date)
|
|
||||||
|
|
||||||
expect(model.columns.map(&:name)).to eq(%w(id))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe '.ignored_columns' do
|
|
||||||
it 'returns a Set' do
|
|
||||||
expect(model.ignored_columns).to be_an_instance_of(Set)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'returns the names of the ignored columns' do
|
|
||||||
model.ignore_column(:title, :date)
|
|
||||||
|
|
||||||
expect(model.ignored_columns).to eq(Set.new(%w(title date)))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
Loading…
Reference in a new issue