class Medo::TextTaskWriter::TaskPresenter

Public Class Methods

new(task) click to toggle source
# File lib/medo/text_task_writer.rb, line 54
def initialize(task)
  @task = task
end

Public Instance Methods

description(length = nil, options = {}) click to toggle source
# File lib/medo/text_task_writer.rb, line 58
def description(length = nil, options = {})
  if length
    break_line_to_fit(@task.description, length, options)
  else
    @task.description
  end
end
done() click to toggle source
# File lib/medo/text_task_writer.rb, line 86
def done
  "[#{@task.done? ? '+' : ' '}]"
end
notes(length = nil, options = {}) click to toggle source
# File lib/medo/text_task_writer.rb, line 75
def notes(length = nil, options = {})
  return "" if @task.notes.empty?
  "\n\n" + @task.notes.map do |n|
    if length
      break_line_to_fit(n, length, options)
    else
      n.rjust(n.size + done.size + 1)
    end
  end.join("\n") + "\n\n"
end
time() click to toggle source
# File lib/medo/text_task_writer.rb, line 66
def time
  format = "%H:%M"
  if @task.done?
    "[#{@task.completed_at.strftime(format)}]"
  else
    "(#{@task.created_at.strftime(format)})"
  end
end
to_s(length = nil) click to toggle source
# File lib/medo/text_task_writer.rb, line 90
def to_s(length = nil)
  c = components(length)
  "#{c.done} #{c.description} #{c.time}#{c.notes}"
end

Private Instance Methods

break_line_to_fit(str, length, options = {}) click to toggle source
# File lib/medo/text_task_writer.rb, line 114
def break_line_to_fit(str, length, options = {})
  first_line_padding = options[:first_line_padding]
  left_padding       = options[:left_padding]
  padding_diff       = (left_padding - first_line_padding) if first_line_padding && left_padding
  available_length   = length - padding_diff.to_i

  lines = str.gsub(/(.{1,#{available_length}})(?:\s+|\Z)|(.{1,#{available_length}})/m, "\\1\\2\n").split("\n")

  lines.map! do |line|
    line.strip.ljust(available_length).rjust(available_length + left_padding.to_i) 
  end

  lines[0] = lines.first.strip.ljust(length).rjust(length + first_line_padding.to_i)
  lines.join("\n")
end
components(length = nil) click to toggle source
# File lib/medo/text_task_writer.rb, line 97
def components(length = nil)
  if length
    description_length = length - done.length - time.length - 2
    description_padding = done.length + 1
    formatted_description = description(description_length, :left_padding => description_padding)

    notes_length = length - done.length - 1
    notes_first_line_padding = done.length + 1
    notes_padding = notes_first_line_padding + 2
    formatted_notes = notes(notes_length, :first_line_padding => notes_first_line_padding, :left_padding => notes_padding)

    Components.new(done, formatted_description, time, formatted_notes)
  else
    Components.new(done, description, time, notes)
  end
end