=begin # elem_cache 指定した要素でのみ比較してキャッシュを行う。 ## ダウンロード http://bmky.net/product/pragger/#elem_cache ## 使い方 - module: RSS::load config: url: http://hogehoge.com/hoge.rdf - module: myplugin::elem_cache config: cachefile: cache/elem_cache.yaml element: link この例では、取得したrdfをキャッシュし、2回目以降からはlink要素がキャッシュ内に存在しないもののみを返すようになります。 ## 更新履歴 2008/05/01 : リリース =end require 'yaml' def elem_cache( config, data ) cachefile = config["cachefile"] element = config["element"] cache = [] new_data = [] values = [] if File.exist?( cachefile ) cache = YAML.load( File.read( cachefile ) ) end data.each do |d| in_cache = false if d.class == Hash val = eval( 'd["' + element + '"]' ) else val = eval( "d." + element ) end unless cache.include?( val ) new_data << d values << val end end # キャッシュを保存するディレクトリが存在しない場合は作成する unless File.exist?( cachefile ) require "fileutils" FileUtils.mkdir_p( cachefile.gsub( /\\/, "/" ).gsub( /\/[^\/]*$/, "/" ) ) end open( cachefile, "w" ) { |w| w.puts YAML.dump_stream( cache + values ) } return new_data end