Class: Paradeiser::Repository

Inherits:
Object
  • Object
show all
Defined in:
lib/paradeiser/models/repository.rb

Class Method Summary collapse

Class Method Details

.activeObject



18
19
20
21
22
23
24
25
26
27
# File 'lib/paradeiser/models/repository.rb', line 18

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?Boolean

Returns:

  • (Boolean)


29
30
31
# File 'lib/paradeiser/models/repository.rb', line 29

def active?
  !!active
end

.allObject



4
5
6
7
8
# File 'lib/paradeiser/models/repository.rb', line 4

def all
  backend.transaction(true) do
    backend.roots.map{|id| backend[id]}
  end
end

.any?(&blk) ⇒ Boolean

Returns:

  • (Boolean)


10
11
12
# File 'lib/paradeiser/models/repository.rb', line 10

def any?(&blk)
  all.any?(&blk)
end

.find(&blk) ⇒ Object



14
15
16
# File 'lib/paradeiser/models/repository.rb', line 14

def find(&blk)
  all.select(&blk)
end

.last_canceledObject



37
38
39
# File 'lib/paradeiser/models/repository.rb', line 37

def last_canceled
  find{|p| p.canceled?}.sort{|a,b| a.started_at <=> b.started_at}.last
end

.last_finishedObject



33
34
35
# File 'lib/paradeiser/models/repository.rb', line 33

def last_finished
  find{|p| p.finished?}.sort{|a,b| a.started_at <=> b.started_at}.last
end

.next_idObject



51
52
53
54
55
56
57
# File 'lib/paradeiser/models/repository.rb', line 51

def next_id
  if all.empty?
    1
  else
    all.max{|a, b| a.id <=> b.id}.id + 1
  end
end

.save(pom) ⇒ Object

Raises:



41
42
43
44
45
46
47
48
49
# File 'lib/paradeiser/models/repository.rb', line 41

def save(pom)
  raise IllegalStatusError if pom.idle?
  raise SingletonError.new(pom.class, self.active, :save) if self.active? && active.id != pom.id

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