document.write('<link rel="stylesheet" href="http://gist.github.com/stylesheets/gist/embed.css"/>')





document.write('<div id=\"gist-214881\" class=\"gist\">\n  \n  \n    \n            \n\n      <div class=\"gist-file\">\n        <div class=\"gist-data gist-syntax\">\n          \n          \n          \n            <div class=\"gist-highlight\"><pre><div class=\"line\" id=\"LC1\"><span class=\"c1\"># This is a method I use when working with slow ruby scripts that<\/span><\/div><div class=\"line\" id=\"LC2\"><span class=\"c1\"># operate on huge datasets.<\/span><\/div><div class=\"line\" id=\"LC3\"><span class=\"c1\">#<\/span><\/div><div class=\"line\" id=\"LC4\"><span class=\"c1\"># It caches the return value of a block of extremely slow code<\/span><\/div><div class=\"line\" id=\"LC5\"><span class=\"c1\"># in a file so that subsequent runs are fast.<\/span><\/div><div class=\"line\" id=\"LC6\"><span class=\"c1\">#<\/span><\/div><div class=\"line\" id=\"LC7\"><span class=\"c1\"># It&#39;s indispensable to me when doing edit-debug-edit-debug-edit<\/span><\/div><div class=\"line\" id=\"LC8\"><span class=\"c1\"># cycles on giant datasets.<\/span><\/div><div class=\"line\" id=\"LC9\">&nbsp;<\/div><div class=\"line\" id=\"LC10\"><span class=\"c1\"># loads ruby object from a cache file or (if cache file doesn&#39;t exist) runs<\/span><\/div><div class=\"line\" id=\"LC11\"><span class=\"c1\"># provided block and writes result to cache file<\/span><\/div><div class=\"line\" id=\"LC12\"><span class=\"k\">def<\/span> <span class=\"nf\">cache<\/span><span class=\"p\">(<\/span><span class=\"n\">file<\/span><span class=\"p\">)<\/span><\/div><div class=\"line\" id=\"LC13\">&nbsp;&nbsp;<span class=\"k\">if<\/span> <span class=\"no\">File<\/span><span class=\"o\">.<\/span><span class=\"n\">exists?<\/span><span class=\"p\">(<\/span><span class=\"n\">file<\/span><span class=\"p\">)<\/span><\/div><div class=\"line\" id=\"LC14\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"no\">STDERR<\/span><span class=\"o\">.<\/span><span class=\"n\">puts<\/span> <span class=\"s2\">&quot;(used cache)&quot;<\/span><\/div><div class=\"line\" id=\"LC15\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"no\">Marshal<\/span><span class=\"o\">.<\/span><span class=\"n\">load<\/span><span class=\"p\">(<\/span><span class=\"no\">File<\/span><span class=\"o\">.<\/span><span class=\"n\">read<\/span><span class=\"p\">(<\/span><span class=\"n\">file<\/span><span class=\"p\">))<\/span><\/div><div class=\"line\" id=\"LC16\">&nbsp;&nbsp;<span class=\"k\">else<\/span><\/div><div class=\"line\" id=\"LC17\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">object<\/span> <span class=\"o\">=<\/span> <span class=\"k\">yield<\/span><\/div><div class=\"line\" id=\"LC18\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"no\">File<\/span><span class=\"o\">.<\/span><span class=\"n\">open<\/span><span class=\"p\">(<\/span><span class=\"n\">file<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;w&#39;<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span> <span class=\"o\">|<\/span><span class=\"n\">f<\/span><span class=\"o\">|<\/span> <span class=\"n\">f<\/span><span class=\"o\">.<\/span><span class=\"n\">print<\/span> <span class=\"no\">Marshal<\/span><span class=\"o\">.<\/span><span class=\"n\">dump<\/span><span class=\"p\">(<\/span><span class=\"n\">object<\/span><span class=\"p\">)<\/span> <span class=\"p\">}<\/span><\/div><div class=\"line\" id=\"LC19\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">object<\/span><\/div><div class=\"line\" id=\"LC20\">&nbsp;&nbsp;<span class=\"k\">end<\/span><\/div><div class=\"line\" id=\"LC21\"><span class=\"k\">end<\/span><\/div><div class=\"line\" id=\"LC22\">&nbsp;<\/div><div class=\"line\" id=\"LC23\"><span class=\"c1\"># usage example (loading 8,000 marc-xml files)<\/span><\/div><div class=\"line\" id=\"LC24\">&nbsp;<\/div><div class=\"line\" id=\"LC25\"><span class=\"no\">STDERR<\/span><span class=\"o\">.<\/span><span class=\"n\">puts<\/span> <span class=\"s2\">&quot;loading marc files&quot;<\/span><\/div><div class=\"line\" id=\"LC26\"><span class=\"n\">marc_records<\/span> <span class=\"o\">=<\/span> <span class=\"n\">cache<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;marc_records.cache&#39;<\/span><span class=\"p\">)<\/span> <span class=\"k\">do<\/span><\/div><div class=\"line\" id=\"LC27\">&nbsp;&nbsp;<span class=\"n\">marc_records<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{}<\/span><\/div><div class=\"line\" id=\"LC28\">&nbsp;&nbsp;<span class=\"n\">marc_files<\/span><span class=\"o\">.<\/span><span class=\"n\">each<\/span> <span class=\"k\">do<\/span> <span class=\"o\">|<\/span><span class=\"n\">f<\/span><span class=\"o\">|<\/span><\/div><div class=\"line\" id=\"LC29\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">doc<\/span> <span class=\"o\">=<\/span> <span class=\"no\">Document<\/span><span class=\"o\">.<\/span><span class=\"n\">new<\/span><span class=\"p\">(<\/span><span class=\"no\">File<\/span><span class=\"o\">.<\/span><span class=\"n\">read<\/span><span class=\"p\">(<\/span><span class=\"n\">f<\/span><span class=\"p\">))<\/span><\/div><div class=\"line\" id=\"LC30\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">title<\/span> <span class=\"o\">=<\/span> <span class=\"n\">doc<\/span><span class=\"o\">.<\/span><span class=\"n\">elements<\/span><span class=\"o\">[<\/span><span class=\"s1\">&#39;//datafield[@tag=&quot;245&quot;]/subfield[@code=&quot;a&quot;]&#39;<\/span><span class=\"o\">]<\/span><\/div><div class=\"line\" id=\"LC31\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">marc_records<\/span><span class=\"o\">[<\/span><span class=\"n\">f<\/span><span class=\"o\">]<\/span> <span class=\"o\">=<\/span> <span class=\"n\">title<\/span><span class=\"o\">.<\/span><span class=\"n\">text<\/span><\/div><div class=\"line\" id=\"LC32\">&nbsp;&nbsp;<span class=\"k\">end<\/span><\/div><div class=\"line\" id=\"LC33\">&nbsp;&nbsp;<span class=\"n\">marc_records<\/span><\/div><div class=\"line\" id=\"LC34\"><span class=\"k\">end<\/span><\/div><div class=\"line\" id=\"LC35\">&nbsp;<\/div><\/pre><\/div>\n          \n        <\/div>\n\n        <div class=\"gist-meta\">\n          <a href=\"http://gist.github.com/raw/214881/bb5b404bc82c3680135b33a3f5090dc0c046a127/trivial_cache.rb\" style=\"float:right;\">view raw<\/a>\n          <a href=\"http://gist.github.com/214881#file_trivial_cache.rb\" style=\"float:right;margin-right:10px;color:#666\">trivial_cache.rb<\/a>\n          <a href=\"http://gist.github.com/214881\">This Gist<\/a> brought to you by <a href=\"http://github.com\">GitHub<\/a>.\n        <\/div>\n      <\/div>\n    \n  \n<\/div>\n')
