summaryrefslogtreecommitdiff
path: root/config/initializers/active_record_becomes.rb
diff options
context:
space:
mode:
Diffstat (limited to 'config/initializers/active_record_becomes.rb')
-rw-r--r--config/initializers/active_record_becomes.rb29
1 files changed, 29 insertions, 0 deletions
diff --git a/config/initializers/active_record_becomes.rb b/config/initializers/active_record_becomes.rb
new file mode 100644
index 00000000000..ec4799deeef
--- /dev/null
+++ b/config/initializers/active_record_becomes.rb
@@ -0,0 +1,29 @@
+# rubocop:disable Gitlab/ModuleWithInstanceVariables
+
+# Remove once https://github.com/rails/rails/issues/32867
+# is released on a 5.1.x rails version.
+# Commit on 5-1-stable branch: https://github.com/rails/rails/commit/44f0df3f3980ba3aeca956839e1948b246ff34fe
+
+module ActiveRecord
+ module AttributeMethods
+ module Dirty
+ def attributes_in_database
+ mutations_from_database.changed_values
+ end
+ end
+ end
+
+ module Persistence
+ def becomes(klass)
+ became = klass.new
+ became.instance_variable_set("@attributes", @attributes)
+ became.instance_variable_set("@mutation_tracker", @mutation_tracker ||= nil)
+ became.instance_variable_set("@mutations_from_database", @mutations_from_database ||= nil)
+ became.instance_variable_set("@changed_attributes", attributes_changed_by_setter)
+ became.instance_variable_set("@new_record", new_record?)
+ became.instance_variable_set("@destroyed", destroyed?)
+ became.errors.copy!(errors)
+ became
+ end
+ end
+end