From: <nul...@cl...> - 2012-03-28 09:36:29
|
SHIBATA Hiroshi 2012-03-27 13:07:25 +0900 (Tue, 27 Mar 2012) New Revision: e971359203234f298702e5e199025da4e9a221cb Merged 97f35d3: Merge pull request #143 from hsbt/memcached Log: extract parser_cache method, because it mixed store/restore/clear method. Modified files: tdiary/io/default.rb Modified: tdiary/io/default.rb (+40 -35) =================================================================== --- tdiary/io/default.rb 2012-03-27 11:09:43 +0900 (62612d7) +++ tdiary/io/default.rb 2012-03-27 13:07:25 +0900 (85479b8) @@ -270,63 +270,68 @@ module TDiary end end - def restore_parser_cache( date, key ) - parser_cache( date, key ) - end - - def store_parser_cache( date, key, obj ) - parser_cache( date, key, obj ) - end - - def clear_parser_cache( date ) - file = date.strftime( "#{cache_path}/%Y%m.parser" ) + def restore_parser_cache(date, key) + return nil if @tdiary.ignore_parser_cache + file = date.strftime("#{cache_path}/%Y%m.parser") + obj = nil begin - File::delete( file ) - File::delete( file + '~' ) + PStore.new(file).transaction do |cache| + begin + ver = cache.root?('version') ? cache['version'] : nil + if ver == TDIARY_VERSION and cache.root?(key) + obj = cache[key] + else + clear_cache + end + cache.abort + rescue PStore::Error + end + end rescue + clear_parser_cache( date ) end - - nil + obj end - private - - def parser_cache( date, key = nil, obj = nil ) + def store_parser_cache(date, key, obj) return nil if @tdiary.ignore_parser_cache - unless FileTest::directory?( cache_path ) then + unless FileTest.directory?(cache_path) then begin - Dir::mkdir( cache_path ) + Dir.mkdir(cache_path) rescue Errno::EEXIST end end - file = date.strftime( "#{cache_path}/%Y%m.parser" ) + file = date.strftime("#{cache_path}/%Y%m.parser") begin - PStore::new( file ).transaction do |cache| + PStore::new(file).transaction do |cache| begin - unless obj then # restore - ver = cache.root?('version') ? cache['version'] : nil - if ver == TDIARY_VERSION and cache.root?(key) - obj = cache[key] - else - clear_cache - end - cache.abort - else # store - cache[key] = obj - cache['version'] = TDIARY_VERSION - end + cache[key] = obj + cache['version'] = TDIARY_VERSION rescue PStore::Error end end rescue - clear_parser_cache( date ) + clear_parser_cache(date) end - obj end + def clear_parser_cache(date) + file = date.strftime("#{cache_path}/%Y%m.parser") + + begin + File.delete(file) + File.delete(file + '~') + rescue + end + + nil + end + + private + def cache_file( prefix ) if @tdiary.is_a?(TDiaryMonth) "#{prefix}#{@tdiary.rhtml.sub( /month/, @tdiary.date.strftime( '%Y%m' ) ).sub( /\.rhtml$/, '.rb' )}" |