Prevent attr_encrypted models from being overriden
Fix failing spec in spec/controllers/admin/hooks_controller_spec.rb attr_encrypted expects models to have their attribute methods defined, or it will override them with standard Ruby accessors. Migration specs that rolled back the state of the database after columns were migrated to encrypted values were interfering with these definitions. To ensure that the SystemHook specs pass, we need to call `SystemHook.define_attribute_methods` to ensure that attr_encrypted sees the right methods that reflect the latest state of the database. Closes https://gitlab.com/gitlab-org/gitlab-ee/issues/8234
This commit is contained in:
parent
f4023a69cb
commit
8fd2c8b16a
1 changed files with 17 additions and 5 deletions
|
@ -1,6 +1,10 @@
|
|||
module MigrationsHelpers
|
||||
def active_record_base
|
||||
ActiveRecord::Base
|
||||
end
|
||||
|
||||
def table(name)
|
||||
Class.new(ActiveRecord::Base) do
|
||||
Class.new(active_record_base) do
|
||||
self.table_name = name
|
||||
self.inheritance_column = :_type_disabled
|
||||
|
||||
|
@ -19,7 +23,7 @@ module MigrationsHelpers
|
|||
end
|
||||
|
||||
def clear_schema_cache!
|
||||
ActiveRecord::Base.connection_pool.connections.each do |conn|
|
||||
active_record_base.connection_pool.connections.each do |conn|
|
||||
conn.schema_cache.clear!
|
||||
end
|
||||
end
|
||||
|
@ -40,11 +44,18 @@ module MigrationsHelpers
|
|||
# Reset column information for the most offending classes **after** we
|
||||
# migrated the schema up, otherwise, column information could be
|
||||
# outdated. We have a separate method for this so we can override it in EE.
|
||||
ActiveRecord::Base.descendants.each(&method(:reset_column_information))
|
||||
active_record_base.descendants.each(&method(:reset_column_information))
|
||||
end
|
||||
|
||||
# Without that, we get errors because of missing attributes, e.g.
|
||||
def refresh_attribute_methods
|
||||
# Without this, we get errors because of missing attributes, e.g.
|
||||
# super: no superclass method `elasticsearch_indexing' for #<ApplicationSetting:0x00007f85628508d8>
|
||||
ApplicationSetting.define_attribute_methods
|
||||
# attr_encrypted also expects ActiveRecord attribute methods to be
|
||||
# defined, or it will override the accessors:
|
||||
# https://gitlab.com/gitlab-org/gitlab-ee/issues/8234#note_113976421
|
||||
[ApplicationSetting, SystemHook].each do |model|
|
||||
model.define_attribute_methods
|
||||
end
|
||||
end
|
||||
|
||||
def reset_column_information(klass)
|
||||
|
@ -84,6 +95,7 @@ module MigrationsHelpers
|
|||
end
|
||||
|
||||
reset_column_in_all_models
|
||||
refresh_attribute_methods
|
||||
end
|
||||
|
||||
def disable_migrations_output
|
||||
|
|
Loading…
Reference in a new issue