demarches-normaliennes/lib/tasks/task_helper.rb
Pierre de La Morinerie 9741108094 lib: remove the 'migrated' key on filters
In a9a4f6e2a8, a task to migrate
ProcedurePresentation's filters was added.

This task added a "migrated: true" key to all migrated filters.

Now that this task has run, we can safely remove the extra key.

In a previous version of this commit, the migration would fail for
invalid ProcedurePresentation records. This is now fixed.
2021-08-24 08:42:22 -05:00

81 lines
1.6 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Write the given objects to the standard output except if Rake is configured
# to be quiet.
#
# This is useful when running tests (when Rake is configured to be quiet),
# to avoid spamming the output with extra informations.
def rake_puts(*args)
if Rake.verbose
puts(*args)
end
end
def rake_print(*args)
if Rake.verbose
print(*args)
end
end
# Display progress of a long-running Rake task.
#
# Usage:
#
# ```
# progress = ProgressReport.new(100)
# (0..100).times do
# progress.inc
# end
# progress.finish
# ````
class ProgressReport
def initialize(total)
@start = Time.zone.now
rake_puts
set_progress(total: total, count: 0)
end
def inc
set_progress(count: @count + 1)
if @per_10_000 % 10 == 0
print_progress
end
end
def finish
if @count > 0 && @per_10_000 != 10_000
set_progress(total: @count)
print_progress
end
rake_puts
end
private
def set_progress(total: nil, count: nil)
if total.present?
@total = total
end
if count.present?
@count = count
@total = [@count, @total].max
end
if @total&.nonzero?
@per_10_000 = 10_000 * @count / @total
end
end
def print_progress
elapsed = Time.zone.now - @start
percent = format('%5.1f%%', @per_10_000 / 100.0)
total = @total.to_s
count = @count.to_s.rjust(total.length)
rake_print("\r#{percent} (#{count}/#{total}) [#{format_duration(elapsed)}/#{format_duration(elapsed * 10_000.0 / @per_10_000)}]")
end
def format_duration(seconds)
if seconds.finite?
Time.zone.at(seconds).utc.strftime('%H:%M:%S')
else
'--:--:--'
end
end
end