lib/chronic/repeaters/repeater_weekend.rb in chronic-0.3.0 vs lib/chronic/repeaters/repeater_weekend.rb in chronic-0.4.0

- old
+ new

@@ -1,65 +1,67 @@ -class Chronic::RepeaterWeekend < Chronic::Repeater #:nodoc: - WEEKEND_SECONDS = 172_800 # (2 * 24 * 60 * 60) +module Chronic + class RepeaterWeekend < Repeater #:nodoc: + WEEKEND_SECONDS = 172_800 # (2 * 24 * 60 * 60) - def initialize(type) - super - @current_week_start = nil - end + def initialize(type) + super + @current_week_start = nil + end - def next(pointer) - super + def next(pointer) + super - if !@current_week_start + if !@current_week_start + case pointer + when :future + saturday_repeater = RepeaterDayName.new(:saturday) + saturday_repeater.start = @now + next_saturday_span = saturday_repeater.next(:future) + @current_week_start = next_saturday_span.begin + when :past + saturday_repeater = RepeaterDayName.new(:saturday) + saturday_repeater.start = (@now + RepeaterDay::DAY_SECONDS) + last_saturday_span = saturday_repeater.next(:past) + @current_week_start = last_saturday_span.begin + end + else + direction = pointer == :future ? 1 : -1 + @current_week_start += direction * RepeaterWeek::WEEK_SECONDS + end + + Span.new(@current_week_start, @current_week_start + WEEKEND_SECONDS) + end + + def this(pointer = :future) + super + case pointer - when :future - saturday_repeater = Chronic::RepeaterDayName.new(:saturday) + when :future, :none + saturday_repeater = RepeaterDayName.new(:saturday) saturday_repeater.start = @now - next_saturday_span = saturday_repeater.next(:future) - @current_week_start = next_saturday_span.begin + this_saturday_span = saturday_repeater.this(:future) + Span.new(this_saturday_span.begin, this_saturday_span.begin + WEEKEND_SECONDS) when :past - saturday_repeater = Chronic::RepeaterDayName.new(:saturday) - saturday_repeater.start = (@now + Chronic::RepeaterDay::DAY_SECONDS) - last_saturday_span = saturday_repeater.next(:past) - @current_week_start = last_saturday_span.begin + saturday_repeater = RepeaterDayName.new(:saturday) + saturday_repeater.start = @now + last_saturday_span = saturday_repeater.this(:past) + Span.new(last_saturday_span.begin, last_saturday_span.begin + WEEKEND_SECONDS) end - else + end + + def offset(span, amount, pointer) direction = pointer == :future ? 1 : -1 - @current_week_start += direction * Chronic::RepeaterWeek::WEEK_SECONDS + weekend = RepeaterWeekend.new(:weekend) + weekend.start = span.begin + start = weekend.next(pointer).begin + (amount - 1) * direction * RepeaterWeek::WEEK_SECONDS + Span.new(start, start + (span.end - span.begin)) end - Chronic::Span.new(@current_week_start, @current_week_start + WEEKEND_SECONDS) - end + def width + WEEKEND_SECONDS + end - def this(pointer = :future) - super - - case pointer - when :future, :none - saturday_repeater = Chronic::RepeaterDayName.new(:saturday) - saturday_repeater.start = @now - this_saturday_span = saturday_repeater.this(:future) - Chronic::Span.new(this_saturday_span.begin, this_saturday_span.begin + WEEKEND_SECONDS) - when :past - saturday_repeater = Chronic::RepeaterDayName.new(:saturday) - saturday_repeater.start = @now - last_saturday_span = saturday_repeater.this(:past) - Chronic::Span.new(last_saturday_span.begin, last_saturday_span.begin + WEEKEND_SECONDS) + def to_s + super << '-weekend' end end - - def offset(span, amount, pointer) - direction = pointer == :future ? 1 : -1 - weekend = Chronic::RepeaterWeekend.new(:weekend) - weekend.start = span.begin - start = weekend.next(pointer).begin + (amount - 1) * direction * Chronic::RepeaterWeek::WEEK_SECONDS - Chronic::Span.new(start, start + (span.end - span.begin)) - end - - def width - WEEKEND_SECONDS - end - - def to_s - super << '-weekend' - end -end +end \ No newline at end of file