Method: TDiary::IO::PStore#transaction

Defined in:
lib/tdiary/io/pstore.rb

#transaction(date) ⇒ Object

block must be return boolean which dirty diaries.



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

def transaction( date )
	diaries = {}
	filename = date.strftime( "#{@data_path}%Y%m" )
	begin
		PStore::new( filename ).transaction do |db|
			dirty = false
			if db.root?( 'diary' ) then
				diaries.update( db['diary'] )
			end
			dirty = yield( diaries ) if iterator?
			if dirty != TDiary::TDiaryBase::DIRTY_NONE then
				db['diary'] = diaries
			else
				db.abort
			end
		end
	rescue PStore::Error, NameError, Errno::EACCES
		raise PermissionError::new( "make your @data_path to writable via httpd. #$!" )
	end
	begin
		File::delete( filename ) if diaries.empty?
	rescue Errno::ENOENT
	end
	return diaries
end