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 |