class ReminderFile

Attributes

delay[R]
filename[R]

Public Class Methods

new(filename, delay=0..0) click to toggle source
# File lib/forgetful/extensions/csv/reminder_file.rb, line 6
def initialize(filename, delay=0..0)
  @filename = filename
  @delay    = delay
end

Public Instance Methods

read() click to toggle source
# File lib/forgetful/extensions/csv/reminder_file.rb, line 11
def read
  File.open(filename) do |file|
    parse_csv(file)
  end
end
write(reminders) click to toggle source
# File lib/forgetful/extensions/csv/reminder_file.rb, line 17
def write(reminders)
  data = CSV.generate do |csv|
           reminders.each do |reminder|
             csv << reminder.to_csv
           end
         end

  File.open(filename, "w") do |file|
    file.write(data)
  end
end

Private Instance Methods

parse_csv(io) click to toggle source
# File lib/forgetful/extensions/csv/reminder_file.rb, line 30
def parse_csv(io)
  converters = [lambda { |question| question },
                lambda { |answer|   answer },
                lambda { |due_on|   Date.parse(due_on) },
                lambda { |history|  history.scan(/./).map { |x| x.to_i } }]

  CSV.parse(io, :skip_blanks => true).map do |list|
    list = list.zip(converters).map { |col, converter| converter[col] }
    list << Date.today + rand_from_range(delay) if list.length == 2 # missing date
    Reminder.new(*list)
  end
end
rand_from_range(range) click to toggle source
# File lib/forgetful/extensions/csv/reminder_file.rb, line 43
def rand_from_range(range)
  if RUBY_VERSION < '1.9'
    (range.min + (range.max - range.min + 1) * rand).floor
  else
    Random.new.rand(range)
  end
end