lib/time_index.rb in vcs_ruby-1.1.8 vs lib/time_index.rb in vcs_ruby-1.1.9

- old
+ new

@@ -1,121 +1,121 @@ -# -# Time interval -# - -module VCSRuby - class TimeIndex - include Comparable - attr_reader :total_seconds - - def initialize time_index = '' - if time_index.instance_of? Float or time_index.instance_of? Fixnum - @total_seconds = time_index - else - @total_seconds = 0.0 - @to_parse = time_index.strip - - unless @to_parse.empty? - try_parse_ffmpeg_index - try_parse_vcs_index - try_parse_as_number - end - end - end - - def try_parse_ffmpeg_index - parts = @to_parse.split(':') - if parts.count == 3 - @total_seconds += parts[0].to_i * 60 * 60 - @total_seconds += parts[1].to_i * 60 - @total_seconds += parts[2].to_f - end - end - - def try_parse_vcs_index - if @to_parse =~ /\d*m|\d*h|\d*s/ - parts = @to_parse.split(/(\d*h)|(\d*m)|(\d*s)/).select{|e| !e.empty?} - parts.each do |part| - add_vcs_part part - end - end - end - - def add_vcs_part part - return @total_seconds += part.to_i * 60 * 60 if part.end_with? 'h' - return @total_seconds += part.to_i * 60 if part.end_with? 'm' - @total_seconds += part.to_i - end - - def try_parse_as_number - temp = @to_parse.to_i - if temp.to_s == @to_parse - @total_seconds += temp - end - end - - def total_seconds - @total_seconds - end - - def hours - (@total_seconds.abs / 3600).to_i - end - - def minutes - ((@total_seconds.abs / 60) % 60).to_i - end - - def seconds - @total_seconds.abs % 60 - end - - def + operand - if operand.instance_of? Fixnum - TimeIndex.new @total_seconds + operand - else - TimeIndex.new @total_seconds + operand.total_seconds - end - end - - def - operand - if operand.instance_of? Fixnum - TimeIndex.new @total_seconds - operand - else - TimeIndex.new @total_seconds - operand.total_seconds - end - end - - def * operand - TimeIndex.new total_seconds * operand - end - - def / operand - if operand.instance_of? Fixnum - TimeIndex.new @total_seconds / operand - else - @total_seconds / operand.total_seconds - end - end - - def <=> operand - @total_seconds <=> operand.total_seconds - end - - def sign - return '-' if @total_seconds < 0 - '' - end - - def to_s - "#{sign}#{hours}h#{"%02d" % minutes}m#{"%02d" % seconds}s" - end - - def to_timestamp - if hours == 0 - "#{sign}#{"%02d" % minutes}:#{"%02d" % seconds}" - else - "#{sign}#{hours}:#{"%02d" % minutes}:#{"%02d" % seconds}" - end - end - end -end +# +# Time interval +# + +module VCSRuby + class TimeIndex + include Comparable + attr_reader :total_seconds + + def initialize time_index = '' + if time_index.instance_of? Float or time_index.instance_of? Fixnum + @total_seconds = time_index + else + @total_seconds = 0.0 + @to_parse = time_index.strip + + unless @to_parse.empty? + try_parse_ffmpeg_index + try_parse_vcs_index + try_parse_as_number + end + end + end + + def try_parse_ffmpeg_index + parts = @to_parse.split(':') + if parts.count == 3 + @total_seconds += parts[0].to_i * 60 * 60 + @total_seconds += parts[1].to_i * 60 + @total_seconds += parts[2].to_f + end + end + + def try_parse_vcs_index + if @to_parse =~ /\d*m|\d*h|\d*s/ + parts = @to_parse.split(/(\d*h)|(\d*m)|(\d*s)/).select{|e| !e.empty?} + parts.each do |part| + add_vcs_part part + end + end + end + + def add_vcs_part part + return @total_seconds += part.to_i * 60 * 60 if part.end_with? 'h' + return @total_seconds += part.to_i * 60 if part.end_with? 'm' + @total_seconds += part.to_i + end + + def try_parse_as_number + temp = @to_parse.to_i + if temp.to_s == @to_parse + @total_seconds += temp + end + end + + def total_seconds + @total_seconds + end + + def hours + (@total_seconds.abs / 3600).to_i + end + + def minutes + ((@total_seconds.abs / 60) % 60).to_i + end + + def seconds + @total_seconds.abs % 60 + end + + def + operand + if operand.instance_of? Fixnum + TimeIndex.new @total_seconds + operand + else + TimeIndex.new @total_seconds + operand.total_seconds + end + end + + def - operand + if operand.instance_of? Fixnum + TimeIndex.new @total_seconds - operand + else + TimeIndex.new @total_seconds - operand.total_seconds + end + end + + def * operand + TimeIndex.new total_seconds * operand + end + + def / operand + if operand.instance_of? Fixnum + TimeIndex.new @total_seconds / operand + else + @total_seconds / operand.total_seconds + end + end + + def <=> operand + @total_seconds <=> operand.total_seconds + end + + def sign + return '-' if @total_seconds < 0 + '' + end + + def to_s + "#{sign}#{hours}h#{"%02d" % minutes}m#{"%02d" % seconds}s" + end + + def to_timestamp + if hours == 0 + "#{sign}#{"%02d" % minutes}:#{"%02d" % seconds}" + else + "#{sign}#{hours}:#{"%02d" % minutes}:#{"%02d" % seconds}" + end + end + end +end