class Paradeiser::Repository

Public Class Methods

active() click to toggle source
# File lib/paradeiser/models/repository.rb, line 26
def active
  all_active = find{|pom| pom.active?}.sort{|a,b| a.started_at <=> b.started_at}

  # Cannot recover from an internal inconsistency.
  if all_active.size > 1
    raise "The repository was corrupted. There are #{all_active.size} active objects, but only one is allowed to be active."
  end

  all_active.last
end
active?() click to toggle source
# File lib/paradeiser/models/repository.rb, line 37
def active?
  !!active
end
all() click to toggle source
# File lib/paradeiser/models/repository.rb, line 4
def all
  backend.transaction(true) do
    backend.roots.map{|id| backend[id]}
  end
end
all_breaks() click to toggle source
# File lib/paradeiser/models/repository.rb, line 14
def all_breaks
  all.select{|b| b.kind_of?(Break)}
end
all_pomodori() click to toggle source
# File lib/paradeiser/models/repository.rb, line 10
def all_pomodori
  all.select{|p| p.kind_of?(Pomodoro)}
end
any?(&blk) click to toggle source
# File lib/paradeiser/models/repository.rb, line 18
def any?(&blk)
  all.any?(&blk)
end
find(&blk) click to toggle source
# File lib/paradeiser/models/repository.rb, line 22
def find(&blk)
  all.select(&blk)
end
last_canceled() click to toggle source
# File lib/paradeiser/models/repository.rb, line 45
def last_canceled
  find{|p| p.canceled?}.sort{|a,b| a.started_at <=> b.started_at}.last
end
last_finished() click to toggle source
# File lib/paradeiser/models/repository.rb, line 41
def last_finished
  find{|p| p.finished?}.sort{|a,b| a.started_at <=> b.started_at}.last
end
next_id() click to toggle source
# File lib/paradeiser/models/repository.rb, line 61
def next_id
  if all.empty?
    1
  else
    all.max{|a, b| a.id <=> b.id}.id.next
  end
end
save(pom) click to toggle source
# File lib/paradeiser/models/repository.rb, line 49
def save(pom)
  raise IllegalStatusError if pom.idle?

  # Do not allow saving of a new active pomodoro while another pomodoro or break is active
  raise SingletonError.new(pom.class, self.active, :save) if self.active? && pom.new?

  pom.id = next_id if pom.new?
  backend.transaction do
    backend[pom.id] = pom
  end
end

Private Class Methods

backend() click to toggle source
# File lib/paradeiser/models/repository.rb, line 71
def backend
  begin
    @backend ||= PStore.new(File.join(Paradeiser.par_dir, 'repository.pstore'), true)
  rescue PStore::Error => e
    raise NotInitializedError.new(e.message)
  end
end