From 05b6bea6af8c336ed392844c73493859e077be9a Mon Sep 17 00:00:00 2001 From: Adam Ploshay Date: Tue, 19 Jul 2022 12:32:49 -0400 Subject: [PATCH 1/4] [POD-1795] Add new serialized fields --- app/models/digital_status.rb | 3 ++- app/models/memnon_invoice_submission.rb | 1 + db/migrate/20220719160322_add_serialized_fields.rb | 10 ++++++++++ 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20220719160322_add_serialized_fields.rb diff --git a/app/models/digital_status.rb b/app/models/digital_status.rb index 012c05f3..a9c5d17d 100644 --- a/app/models/digital_status.rb +++ b/app/models/digital_status.rb @@ -2,13 +2,14 @@ class DigitalStatus < ActiveRecord::Base require 'json/ext' serialize :options, Hash + serialize :options_json, JSON belongs_to :physical_object validates :physical_object, presence: true validates :physical_object_mdpi_barcode, presence: true before_validation :set_mdpi_barcode_from_object DIGITAL_STATUS_START = "transferred" - serialized_empty_hash = "--- {}\n" + serialized_empty_hash = {}.to_yaml.to_s # the number of hours after digitization start that a video physical object is auto-accepted @@Video_File_Auto_Accept = TechnicalMetadatumModule::GENRE_AUTO_ACCEPT_DAYS[:video] * 24 # the number of hours after digitization start that an audio physical object is auto-accepted diff --git a/app/models/memnon_invoice_submission.rb b/app/models/memnon_invoice_submission.rb index f9893099..2c779e65 100644 --- a/app/models/memnon_invoice_submission.rb +++ b/app/models/memnon_invoice_submission.rb @@ -1,4 +1,5 @@ class MemnonInvoiceSubmission < ActiveRecord::Base serialize :problems_by_row + serialize :problems_by_row_json, JSON validates :filename, presence: true end diff --git a/db/migrate/20220719160322_add_serialized_fields.rb b/db/migrate/20220719160322_add_serialized_fields.rb new file mode 100644 index 00000000..29391241 --- /dev/null +++ b/db/migrate/20220719160322_add_serialized_fields.rb @@ -0,0 +1,10 @@ +class AddSerializedFields < ActiveRecord::Migration + def up + add_column :memnon_invoice_submissions, :problems_by_row_json, :text, limit: 4294967295 + add_column :digital_statuses, :options_json, :text, limit: 65535 + end + def down + remove_column :memnon_invoice_submissions, :problems_by_row_json + remove_column :digital_statuses, :options_json + end +end From 2f2a9110ca850a9a5f924160e6a1c22a216e2d79 Mon Sep 17 00:00:00 2001 From: Adam Ploshay Date: Thu, 21 Jul 2022 15:44:29 -0400 Subject: [PATCH 2/4] [POD_1795] populate new serialized fields --- ...220721194158_populate_serialized_fields.rb | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 db/migrate/20220721194158_populate_serialized_fields.rb diff --git a/db/migrate/20220721194158_populate_serialized_fields.rb b/db/migrate/20220721194158_populate_serialized_fields.rb new file mode 100644 index 00000000..cc051aea --- /dev/null +++ b/db/migrate/20220721194158_populate_serialized_fields.rb @@ -0,0 +1,25 @@ +class PopulateSerializedFields < ActiveRecord::Migration + def up + puts "Populating MemnonInvoiceSubmission: #{MemnonInvoiceSubmission.count}" + MemnonInvoiceSubmission.find_in_batches.with_index do |group, batch| + puts "processing batch #{batch}" + group.each_with_index do |mis, i| + puts "#{i+1}: #{mis.id}" + mis.problems_by_row_json = mis.problems_by_row + mis.save! + end + end + puts "Populating DigitalStatus: #{DigitalStatus.count}" + DigitalStatus.find_in_batches.with_index do |group, batch| + puts "processing batch #{batch}" + group.each_with_index do |ds, i| + puts "#{i+1}: #{ds.id}" + ds.options_json = ds.options + ds.save! + end + end + end + def down + puts "no action on rollback" + end +end From 165c215e2f0cfa6f3b84e462068dc4ff36fc3f99 Mon Sep 17 00:00:00 2001 From: Adam Ploshay Date: Thu, 21 Jul 2022 15:50:59 -0400 Subject: [PATCH 3/4] [POD-1795] rename serialized fields --- .../20220721194740_rename_serialized_fields.rb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 db/migrate/20220721194740_rename_serialized_fields.rb diff --git a/db/migrate/20220721194740_rename_serialized_fields.rb b/db/migrate/20220721194740_rename_serialized_fields.rb new file mode 100644 index 00000000..da20cd9a --- /dev/null +++ b/db/migrate/20220721194740_rename_serialized_fields.rb @@ -0,0 +1,14 @@ +class RenameSerializedFields < ActiveRecord::Migration + def up + rename_column :memnon_invoice_submissions, :problems_by_row, :problems_by_row_yaml + rename_column :memnon_invoice_submissions, :problems_by_row_json, :problems_by_row + rename_column :digital_statuses, :options, :options_yaml + rename_column :digital_statuses, :options_json, :options + end + def down + rename_column :memnon_invoice_submissions, :problems_by_row, :problems_by_row_json + rename_column :memnon_invoice_submissions, :problems_by_row_yaml, :problems_by_row + rename_column :digital_statuses, :options, :options_json + rename_column :digital_statuses, :options_yaml, :options + end +end From ab212123c040975d4d1e9ffee03201d4abd01070 Mon Sep 17 00:00:00 2001 From: Adam Ploshay Date: Thu, 21 Jul 2022 15:47:01 -0400 Subject: [PATCH 4/4] [POD-1795] deprecate old serialized fields --- app/models/digital_status.rb | 5 ++--- app/models/memnon_invoice_submission.rb | 3 +-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/app/models/digital_status.rb b/app/models/digital_status.rb index a9c5d17d..78920f76 100644 --- a/app/models/digital_status.rb +++ b/app/models/digital_status.rb @@ -1,15 +1,14 @@ class DigitalStatus < ActiveRecord::Base require 'json/ext' - serialize :options, Hash - serialize :options_json, JSON + serialize :options, JSON belongs_to :physical_object validates :physical_object, presence: true validates :physical_object_mdpi_barcode, presence: true before_validation :set_mdpi_barcode_from_object DIGITAL_STATUS_START = "transferred" - serialized_empty_hash = {}.to_yaml.to_s + serialized_empty_hash = {}.to_json.to_s # the number of hours after digitization start that a video physical object is auto-accepted @@Video_File_Auto_Accept = TechnicalMetadatumModule::GENRE_AUTO_ACCEPT_DAYS[:video] * 24 # the number of hours after digitization start that an audio physical object is auto-accepted diff --git a/app/models/memnon_invoice_submission.rb b/app/models/memnon_invoice_submission.rb index 2c779e65..5adf80fb 100644 --- a/app/models/memnon_invoice_submission.rb +++ b/app/models/memnon_invoice_submission.rb @@ -1,5 +1,4 @@ class MemnonInvoiceSubmission < ActiveRecord::Base - serialize :problems_by_row - serialize :problems_by_row_json, JSON + serialize :problems_by_row, JSON validates :filename, presence: true end