Class: Todo::Data::List

Inherits:
Struct
  • Object
show all
Extended by:
Forwardable
Includes:
Helpers::Hash::Format
Defined in:
lib/todo/data/list.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Helpers::Hash::Format

#to_pairs

Constructor Details

#initializeList

Returns a new instance of List.



23
24
25
26
# File 'lib/todo/data/list.rb', line 23

def initialize(*)
  super
  @max_id = items.map(&:id).map(&:to_i).max || 0
end

Instance Attribute Details

#itemsObject

Returns the value of attribute items

Returns:

  • (Object)

    the current value of items



9
10
11
# File 'lib/todo/data/list.rb', line 9

def items
  @items
end

#max_idObject

Returns the value of attribute max_id.



21
22
23
# File 'lib/todo/data/list.rb', line 21

def max_id
  @max_id
end

Class Method Details

.parse(lines) ⇒ Object



11
12
13
# File 'lib/todo/data/list.rb', line 11

def parse(lines)
  List.new(lines.map { |line| Item.new(Parser.new(line).parse) })
end

Instance Method Details

#find(data) ⇒ Object



44
45
46
# File 'lib/todo/data/list.rb', line 44

def find(data)
  select(data).tap { |list| validate(data, list) }.first
end

#idsObject



48
49
50
# File 'lib/todo/data/list.rb', line 48

def ids
  items.map(&:id).compact
end

#next_idObject



52
53
54
# File 'lib/todo/data/list.rb', line 52

def next_id
  @max_id += 1
end

#reject(&block) ⇒ Object



36
37
38
# File 'lib/todo/data/list.rb', line 36

def reject(&block)
  self.class.new(items.reject(&block))
end

#select(data) ⇒ Object



32
33
34
# File 'lib/todo/data/list.rb', line 32

def select(data)
  self.class.new(items.select { |item| item.matches?(data) })
end

#sort_by(&block) ⇒ Object



40
41
42
# File 'lib/todo/data/list.rb', line 40

def sort_by(&block)
  self.class.new(items.sort_by(&block))
end

#toggle(data) ⇒ Object



28
29
30
# File 'lib/todo/data/list.rb', line 28

def toggle(data)
  find(data).toggle
end