class Todo::Data::List

Attributes

max_id[RW]

Public Class Methods

new(*) click to toggle source
Calls superclass method
# File lib/todo/data/list.rb, line 23
def initialize(*)
  super
  @max_id = items.map(&:id).map(&:to_i).max || 0
end
parse(lines) click to toggle source
# File lib/todo/data/list.rb, line 11
def parse(lines)
  List.new(lines.map { |line| Item.new(Parser.new(line).parse) })
end

Public Instance Methods

find(data) click to toggle source
# File lib/todo/data/list.rb, line 44
def find(data)
  select(data).tap { |list| validate(data, list) }.first
end
ids() click to toggle source
# File lib/todo/data/list.rb, line 48
def ids
  items.map(&:id).compact
end
next_id() click to toggle source
# File lib/todo/data/list.rb, line 52
def next_id
  @max_id += 1
end
reject(&block) click to toggle source
# File lib/todo/data/list.rb, line 36
def reject(&block)
  self.class.new(items.reject(&block))
end
select(data) click to toggle source
# File lib/todo/data/list.rb, line 32
def select(data)
  self.class.new(items.select { |item| item.matches?(data) })
end
sort_by(&block) click to toggle source
# File lib/todo/data/list.rb, line 40
def sort_by(&block)
  self.class.new(items.sort_by(&block))
end
toggle(data) click to toggle source
# File lib/todo/data/list.rb, line 28
def toggle(data)
  find(data).toggle
end

Private Instance Methods

validate(data, list) click to toggle source
# File lib/todo/data/list.rb, line 58
def validate(data, list)
  raise Error.new(MSGS[:item_not_found] % to_pairs(data).join(' ')) if list.size == 0
  raise Error.new(MSGS[:multiple_items] % to_pairs(data).join(' ')) if list.size > 1
end