class Subdelayer::Delayer

Public Class Methods

new(delay:, filename:) click to toggle source
# File lib/subdelayer.rb, line 20
def initialize(delay:, filename:)
  @delay = delay
  @filename = filename
end

Public Instance Methods

perform() click to toggle source
# File lib/subdelayer.rb, line 25
def perform
  r = chunks.map do |(index, time, *text)|
    raise NotASubtitleFileError unless time&.include?('-->')

    [index, delay_time(time), *text].join("\n")
  end.join("\n\n")
end

Private Instance Methods

chunks() click to toggle source
# File lib/subdelayer.rb, line 49
def chunks
  lines.split("").reject(&:blank?)
end
delay_time(time) click to toggle source
# File lib/subdelayer.rb, line 35
def delay_time(time)
  start, finish = time.split('-->').map(&:strip)

  [delay_value(start), delay_value(finish)].join(' --> ')
end
delay_value(value) click to toggle source
# File lib/subdelayer.rb, line 41
def delay_value(value)
  parsed_time = Time.parse(value)
  new_time = parsed_time + @delay
  raise DelayError if parsed_time.to_date != new_time.to_date

  new_time.strftime('%H:%M:%S,%3N')
end
lines() click to toggle source
# File lib/subdelayer.rb, line 53
def lines
  File.readlines(@filename).map(&:strip)
end