class Timelime::Time

Attributes

data[R]

Public Class Methods

new(raw = nil) click to toggle source
# File lib/timelime/time.rb, line 7
def initialize raw = nil
  @data = []
  unless raw.nil?
    push raw
  end
end

Public Instance Methods

match?(time) click to toggle source
# File lib/timelime/time.rb, line 96
def match? time

  if size == 2
    outer = self.data
    inner = time.data
  else
    outer = time.data
    inner = self.data
  end

  if outer[0] > inner[-1]
    return false
  elsif outer[-1] < inner[0]
    return false
  else
    return true
  end

end
push(raw) click to toggle source
# File lib/timelime/time.rb, line 18
def push raw

  unless @data.size == 0
    raise 
  end

  while raw[0] == "*"
    raw = raw[1..-1].lstrip
  end

  while raw[-1] == "*"
    raw = raw[0..-2].rstrip
  end

  era = []
  raw.upcase!
  words = raw.split
  dash = 1

  words.each do |w|

    n = w.to_i

    if n.to_s == w

      if dash != 1
        raise
      end
      dash -= 1
      @data += [n]
      era += [0]
      next

    end

    if @data.size == 0
      raise
    end
      

    if w == "-"
      dash += 1
    elsif w == "CE"
      era[-1] = 1
    elsif w == "BCE"
      era[-1] = -1
    else
      raise
    end

  end

  for i in 0...@data.size
    if era[i] == -1
      @data[i] *= -1
      for j in 0..i
        if era[j] == 0
          @data[j] *= -1
        end
      end
    end
  end

  if @data.size == 2
    if @data[0] > @data[1]
      throw :syntax
    end
  end

end
range!() click to toggle source
# File lib/timelime/time.rb, line 89
def range!
  if size == 1
    @data += [@data[0]]
  end
  self
end
size() click to toggle source
# File lib/timelime/time.rb, line 14
def size
  @data.size
end
to_s() click to toggle source
# File lib/timelime/time.rb, line 116
def to_s
  buf = ""
  @data.each do |yr|

    unless buf.empty?
      buf += " - "
    end

    if yr >= 0
      buf += yr.to_s
      buf += " CE"
    else
      buf += (yr * -1).to_s
      buf += " BCE"
    end

  end
  buf
end