Class: KeepYourHead::Database::Database

Inherits:
Object
  • Object
show all
Includes:
BaseStatistic
Defined in:
lib/Keepyourhead/database/Database.rb

Instance Method Summary collapse

Methods included from BaseStatistic

#collectFlashcards, #count, #countActive, #countPassive, #distribution, #removeStatistics

Constructor Details

#initializeDatabase

Returns a new instance of Database.



27
28
29
30
31
32
# File 'lib/Keepyourhead/database/Database.rb', line 27

def initialize
	@viewers = []
	@files = []

	load
end

Instance Method Details

#fileClose(file) ⇒ Object



71
72
73
74
75
# File 'lib/Keepyourhead/database/Database.rb', line 71

def fileClose(file)
	file.viewerRemove self
	@files.delete file
	viewersSend :onItemRemove, file
end

#fileNewObject



65
66
67
68
69
70
# File 'lib/Keepyourhead/database/Database.rb', line 65

def fileNew
	file = Database::File.createNew self
	@files << file
	file.viewerAdd self
	viewersSend :onItemInsert, file
end

#fileOpen(filename) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/Keepyourhead/database/Database.rb', line 53

def fileOpen(filename)
	filename = ::File.expand_path filename

	
	if not files.map{ |file| file.filename }.include? filename then
		file = KeepYourHead::Database::File.open( self, filename )
	
		@files << file
		file.viewerAdd self
		viewersSend :onItemInsert, file
	end
end

#filesObject



34
35
36
# File 'lib/Keepyourhead/database/Database.rb', line 34

def files
	@files
end

#itemsObject



22
23
24
# File 'lib/Keepyourhead/database/Database.rb', line 22

def items
	files
end

#loadObject



38
39
40
41
42
# File 'lib/Keepyourhead/database/Database.rb', line 38

def load
	($preferences[:files] || []).each { |filename|
		fileOpen filename if ::File.exist?( filename)
	}
end

#moveDown(file) ⇒ Object



89
90
91
92
93
94
95
96
97
98
# File 'lib/Keepyourhead/database/Database.rb', line 89

def moveDown( file )
	assert file.kind_of?(Database::File)

	viewersSend :onItemRemove, file
	index = files.index file
	assert index
	files.delete_at(index)
	files.insert([index+1,files.length].min,file)
	viewersSend :onItemInsert, file
end

#moveUp(file) ⇒ Object

helper for moving files up and down



79
80
81
82
83
84
85
86
87
88
# File 'lib/Keepyourhead/database/Database.rb', line 79

def moveUp( file )
	assert file.kind_of?(Database::File)

	viewersSend :onItemRemove, file
	index = files.index file
	assert index
	files.delete_at(index)
	files.insert([index-1,0].max,file)
	viewersSend :onItemInsert, file
end

#onItemChange(item) ⇒ Object



121
122
123
# File 'lib/Keepyourhead/database/Database.rb', line 121

def onItemChange(item)
	viewersSend :onItemChange, item
end

#onItemInsert(item) ⇒ Object



127
128
129
# File 'lib/Keepyourhead/database/Database.rb', line 127

def onItemInsert(item)
	viewersSend :onItemInsert, item
end

#onItemRemove(item) ⇒ Object



124
125
126
# File 'lib/Keepyourhead/database/Database.rb', line 124

def onItemRemove(item)
	viewersSend :onItemRemove, item
end

#onReload(file) ⇒ Object



130
131
132
# File 'lib/Keepyourhead/database/Database.rb', line 130

def onReload(file)
	viewersSend :onReload, file
end

#saveAllChangedObject



47
48
49
50
51
# File 'lib/Keepyourhead/database/Database.rb', line 47

def saveAllChanged
	files.each { |file|
		file.save if file.changed
	}
end

#viewerAdd(v) ⇒ Object



101
102
103
# File 'lib/Keepyourhead/database/Database.rb', line 101

def viewerAdd( v )
	@viewers << v unless @viewers.include? v
end

#viewerRemove(v) ⇒ Object



105
106
107
# File 'lib/Keepyourhead/database/Database.rb', line 105

def viewerRemove( v )
	@viewers.delete v
end

#viewersSend(name, *args) ⇒ Object



109
110
111
112
113
114
115
# File 'lib/Keepyourhead/database/Database.rb', line 109

def viewersSend( name, *args )
	assert name

	@viewers.each{ |v| 
		v.send name, *args 
	}
end

#writeBackObject



43
44
45
# File 'lib/Keepyourhead/database/Database.rb', line 43

def writeBack
	$preferences[:files] = files.map{ |file| file.filename }.compact
end