1+ # Migration to reassign items with the term "After 1999" to a newly categorized term.
12class UpdateTermItemRelation < ActiveRecord ::Migration [ 7.0 ]
23 def up
34 facet = Facet . find_by! ( name : 'Decade' )
@@ -25,16 +26,16 @@ def up
2526 end
2627
2728 if invalid_items . any?
28- Rails . logger . warn ( "Skipped #{ invalid_items . size } items due to invalid or missing dates. Example: #{ invalid_items . first ( 10 ) . map { |i | "ID #{ i [ :id ] } : '#{ i [ :date ] } '" } . join ( ', ' ) } " )
29+ Rails . logger . warn ( "Skipped #{ invalid_items . size } items due to invalid or missing dates. Example: #{ invalid_items . first ( 5 ) . map { |i | "ID #{ i [ :id ] } : '#{ i [ :date ] } '" } . join ( ', ' ) } " )
2930 end
3031 end
3132
3233 def down
3334 facet = Facet . find_by! ( name : 'Decade' )
3435 target_term = Term . find_by! ( facet : facet , value : 'After 1999' )
35- move_term_back_to_item ( facet , '2000-2009' , target_term )
36- move_term_back_to_item ( facet , '2010-2019' , target_term )
37- move_term_back_to_item ( facet , 'After 2020' , target_term )
36+ revert_term_assignment ( facet , '2000-2009' , target_term )
37+ revert_term_assignment ( facet , '2010-2019' , target_term )
38+ revert_term_assignment ( facet , 'After 2020' , target_term )
3839 end
3940
4041 private
@@ -43,27 +44,28 @@ def integer_year(val)
4344 return nil if val . nil?
4445
4546 # Try direct integer conversion
47+ year = nil
4648 begin
47- return Integer ( val )
49+ year = Integer ( val )
4850 rescue ArgumentError , TypeError
4951 # Try to extract year from common date formats (e.g., "YYYY-MM-DD", "YYYY/MM/DD")
5052 if val . is_a? ( String )
5153 if val =~ /\A (\d {4})[-\/ ]/
52- return $1. to_i
54+ year = $1. to_i
5355 end
5456 end
55- return nil
5657 end
58+ return year
5759 end
5860
5961 # Reassigns an item from the origin term to the target term, and removes the origin term from the item.
6062 def re_assign_term_to_item ( item , origin_term , target_term )
61- item . terms << target_term unless item . terms . include? ( target_term )
63+ item . terms << target_term
6264 item . terms . delete ( origin_term )
6365 end
6466
6567 # Rolls back term assignment from origin_term_value to target_term for all items.
66- def move_term_back_to_item ( facet , origin_term_value , target_term )
68+ def revert_term_assignment ( facet , origin_term_value , target_term )
6769 origin_term = Term . find_by! ( facet : facet , value : origin_term_value )
6870 origin_term . items . find_each do |item |
6971 re_assign_term_to_item ( item , origin_term , target_term )
0 commit comments