Class: AsciiTracker::Controller

Inherits:
Object
  • Object
show all
Defined in:
lib/asciitracker/controller.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeController

Returns a new instance of Controller.



5
6
7
# File 'lib/asciitracker/controller.rb', line 5

def initialize 
  @model = Model.new
end

Instance Attribute Details

#modelObject (readonly)

Returns the value of attribute model.



3
4
5
# File 'lib/asciitracker/controller.rb', line 3

def model
  @model
end

Instance Method Details

#new_day(date) ⇒ Object

match(:day, :slot) { |a,b| [[:day, *a], [:slot, *b]] } match(:day, :span) { |a,b| [[:day, *a], [:span, *b]] }



11
12
13
14
# File 'lib/asciitracker/controller.rb', line 11

def new_day date
  @day = date
  @rec = @slot = nil
end

#new_project_re(project_id, re) ⇒ Object

match(/@.+/, String) { |project_id, re| [project_id, Regexp.new(re)] }



57
58
59
60
# File 'lib/asciitracker/controller.rb', line 57

def new_project_re project_id, re
  puts "project expression: #{project_id}, #{re}"
  @model.projects[project_id].push(re)
end

#new_slot(start, stop, desc = nil) ⇒ Object

match(:slot) { |a| [[:slot, *a]] }



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/asciitracker/controller.rb', line 17

def new_slot start, stop, desc = nil
  #slot = Slot.new :date=>@day, :start=> start, :end=>stop, :desc=>desc
  @rec = @slot = Slot.new(
    start: start, end: stop, desc: desc, date: @day.dup
  )

  # updates parant records when this slot is an interruption
  overlaps = @model.find_overlaps(@slot, @day)
  #puts "new slot(#{@slot}), overlaps: #{overlaps}"
  unless overlaps.empty?
    # parents are covers which are a subset of overlaps
    if parent = @model.find_best_cover(@slot, @day)
      parent.add_interrupt(@slot)
    else
      raise Exception, <<-EOM
      #{@slot}
overlaps with:
      #{overlaps.first} ...
                EOM
    end
  end

  # add record to model after interrupt calculation to save self
  # interruption checks
  @model.add_record(@slot, @day)
end

#new_span(span, desc = nil) ⇒ Object

match(:span) { |a| [[:span, *a]] }



45
46
47
48
49
# File 'lib/asciitracker/controller.rb', line 45

def new_span span, desc = nil
  @rec = Record.new :span=>span, :desc=>desc, :date => @day.dup
  @slot.add_interrupt(@rec) if @slot
  @model.add_record(@rec, @day)
end

#new_txt(txt = nil) ⇒ Object

match(:desc) { |txt| [[:txt, txt]] } #@m.append_txt(txt) }



52
53
54
# File 'lib/asciitracker/controller.rb', line 52

def new_txt txt = nil
  @rec.desc << " #{txt}"
end