class TimeCursor::Elements

Constants

DATE_ALIAS
RE_ALL
RE_LIST
RE_WILD

Public Class Methods

build( target, range = nil ) click to toggle source
# File lib/time_cursor/elements.rb, line 15
def self.build( target, range = nil )
  case  target
  when  Array
    target  =  target.join(',')

  when  Symbol
    target  =  target.to_s

  end

  case  target
  when  NilClass
    Elements.new( [] )

  when  Range
    Elements.new( target.to_a )

  when  Numeric
    Elements.new( [target] )

  when  String
    factors  =  DATE_ALIAS.inject( target.downcase ) do |s, (k, v)| s.gsub( k, v ) end
    items  =  factors.split(',').map do |factor|
      if  m = RE_ALL.match( factor )
        []
      elsif  m = RE_WILD.match( factor )
        if  range.nil?
          raise  ArgumentError, "disallow wildcard without range : '#{target}'"
        end
        from  =  range.first
        to    =  range.last
        step  =  ( m[2] || 1 ).to_i
        expand( from, to, step, range )
      elsif  m = RE_LIST.match( factor )
        from  =  ( m[1] ).to_i
        to    =  ( m[3] || m[1] ).to_i
        step  =  ( m[5] || 1 ).to_i
        expand( from, to, step, range )
      else
        raise  ArgumentError, "format invalid : '#{target}'"
      end
    end
    Elements.new( items.flatten.sort.uniq )

  else
    raise  ArgumentError, "type invalid : '#{target}'"

  end
end
expand( from, to, step, range ) click to toggle source
# File lib/time_cursor/elements.rb, line 65
def self.expand( from, to, step, range )
  result  =  []
  cur  =  from
  if  from <= to
    loop do
      result  <<  cur
      cur  +=  step
      break    if  cur > to
    end
  else
    loop do
      result  <<  cur
      cur  +=  step
      break    if  cur > range.last
    end
    cur  =  range.first
    loop do
      result  <<  cur
      cur  +=  step
      break    if  cur > to
    end
  end
  result
end

Public Instance Methods

correspond?( item ) click to toggle source
# File lib/time_cursor/elements.rb, line 104
def correspond?( item )
  self.empty?  ||  self.include?( item )
end
left( item ) click to toggle source
# File lib/time_cursor/elements.rb, line 97
def left( item )
  (self.size-1).downto(0) do |i|
    return  self[i]    if  self[i] < item
  end
  nil
end
right( item ) click to toggle source
# File lib/time_cursor/elements.rb, line 90
def right( item )
  0.upto(self.size-1) do |i|
    return  self[i]    if  item < self[i]
  end
  nil
end