Class: When::CalendarNote::Enumerator

Inherits:
Parts::Enumerator show all
Defined in:
lib/when_exe/calendarnote.rb

Overview

イベントを取得する Enumerator

Direct Known Subclasses

ShireWeek::Enumerator, WorldWeek::Enumerator

Instance Attribute Summary

Attributes inherited from Parts::Enumerator

#count, #count_limit, #current, #direction, #exdate, #first, #index, #last, #object, #options, #parent, #processed

Instance Method Summary collapse

Methods inherited from Parts::Enumerator

_options, #_rewind, #each, #has_next?, #next, #succ, #with_index, #with_object

Constructor Details

#initialize(parent, range, options) ⇒ Enumerator #initialize(parent, first, direction, options) ⇒ Enumerator

オブジェクトの生成

Overloads:

  • #initialize(parent, range, options) ⇒ Enumerator

    Parameters:

    Options Hash (options):

    • :event (String)

      イベント名

    • :count_limit (Integer)

      繰り返し回数(デフォルトは指定なし)

  • #initialize(parent, first, direction, options) ⇒ Enumerator

    Parameters:

    Options Hash (options):

    • :event (String)

      イベント名

    • :count_limit (Integer)

      繰り返し回数(デフォルトは指定なし)



623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
# File 'lib/when_exe/calendarnote.rb', line 623

def initialize(*args)
  if args[1].kind_of?(Range)
    parent, range, options = args
    first     = range.first
    last      = range.last
    direction = first < last ? :forward : :reverse
  else
    parent, first, direction, options = args
  end
  direction = options[:direction] if options[:direction]
  @parent = parent
  void, @event, @parameter = options.delete(:event).split(/^([^\d]+)/)
  @delta = @parent.send((@event+'_delta').to_sym, @parameter)
  instance_eval %Q{
    def event_eval(date)
      @parent.#{@event}(date, @parameter)
    end
  }
  date = event_eval(first)
  if direction == :reverse
    @delta = -@delta
    date   = event_eval(first + @delta) if first.to_i < date.to_i
  else
    date   = event_eval(first + @delta) if first.to_i > date.to_i
  end
  range ?
    super(@parent, range.exclude_end? ? date...last : date..last, options) :
    super(@parent, date, direction, options)
end

Instance Method Details

#_succWhen::TM::TemporalPosition

次のイベントを得る



598
599
600
# File 'lib/when_exe/calendarnote.rb', line 598

def _succ
  @current = (@current==:first) ? @first : event_eval(@current + @delta)
end