Browse Source
we can run this rake to automatically add all the question numbers at the start of a new year, which should simplify the process a lotCLDC-4202-update-question-numbers
1 changed files with 55 additions and 0 deletions
@ -0,0 +1,55 @@ |
|||||||
|
require "pathname" |
||||||
|
|
||||||
|
desc "Add a new year to all lettings question number hashes and saves the new code. |
||||||
|
Usage: bundle exec rake add_new_year_to_questions[new_year,log_type]. |
||||||
|
Example: bundle exec rake add_new_year_to_questions[2027,lettings]. |
||||||
|
This rake should only be run as part of local development at the start of new collection year creation. |
||||||
|
Make sure your working tree is clean before running this, it will update each question file in place. |
||||||
|
Note that this will only update questions with a QUESTION_NUMBER_FROM_YEAR hash set. |
||||||
|
Some questions (such as any of the per person questions) which define custom question logic will need manual review. |
||||||
|
Params: |
||||||
|
- new_year: the year to add, e.g. 2025 |
||||||
|
- log_type: the type of log to update. can be lettings or sales" |
||||||
|
task :add_new_year_to_questions, %i[new_year log_type] => :environment do |_task, args| |
||||||
|
new_year = args[:new_year].to_i |
||||||
|
previous_year = new_year - 1 |
||||||
|
|
||||||
|
root = Pathname.new("app/models/form/#{args[:log_type]}/questions") |
||||||
|
files = root.glob("*.rb") |
||||||
|
|
||||||
|
hash_re = /QUESTION_NUMBER_FROM_YEAR\s*=\s*\{([^}]*)}\.freeze/m |
||||||
|
|
||||||
|
changed = [] |
||||||
|
|
||||||
|
files.each do |path| |
||||||
|
text = path.read |
||||||
|
next unless text.include?("QUESTION_NUMBER_FROM_YEAR") |
||||||
|
|
||||||
|
match = hash_re.match(text) |
||||||
|
next unless match |
||||||
|
|
||||||
|
body = match[1] |
||||||
|
pairs = body.scan(/(\d+)\s*=>\s*(\d+)/) |
||||||
|
next if pairs.empty? |
||||||
|
|
||||||
|
year_to_num = pairs.to_h { |y, n| [y.to_i, n.to_i] } |
||||||
|
next if year_to_num.key?(new_year) |
||||||
|
next unless year_to_num.key?(previous_year) |
||||||
|
|
||||||
|
year_to_num[new_year] = year_to_num[previous_year] |
||||||
|
|
||||||
|
items = year_to_num.keys.sort.map { |y| "#{y} => #{year_to_num[y]}" }.join(", ") |
||||||
|
replacement = "QUESTION_NUMBER_FROM_YEAR = { #{items} }.freeze" |
||||||
|
|
||||||
|
new_text = text.sub(hash_re, replacement) |
||||||
|
|
||||||
|
next if new_text == text |
||||||
|
|
||||||
|
path.write(new_text) |
||||||
|
changed << path |
||||||
|
end |
||||||
|
|
||||||
|
puts "changed #{changed.length}" |
||||||
|
changed.each { |p| puts p } |
||||||
|
end |
||||||
|
|
||||||
Loading…
Reference in new issue