Mamoru Tasaka a04e982
--- alexandria-0.6.8/lib/alexandria/models/library.rb.broken_yaml	2009-12-07 05:16:57.000000000 +0900
Mamoru Tasaka a04e982
+++ alexandria-0.6.8/lib/alexandria/models/library.rb	2012-10-13 03:25:24.000000000 +0900
Mamoru Tasaka a04e982
@@ -78,8 +78,23 @@
Mamoru Tasaka a04e982
 
Mamoru Tasaka a04e982
           test[1] = filename if test[0] == 0
Mamoru Tasaka a04e982
 
Mamoru Tasaka a04e982
+          book_valid_p = true
Mamoru Tasaka a04e982
+
Mamoru Tasaka a04e982
           if not File.size? test[1]
Mamoru Tasaka a04e982
             log.warn { "Book file #{test[1]} was empty"}
Mamoru Tasaka a04e982
+            book_valid_p = false
Mamoru Tasaka a04e982
+          end
Mamoru Tasaka a04e982
+
Mamoru Tasaka a04e982
+          if book_valid_p
Mamoru Tasaka a04e982
+            begin
Mamoru Tasaka a04e982
+              book = self.regularize_book_from_yaml(test[1])
Mamoru Tasaka a04e982
+            rescue Psych::SyntaxError => e
Mamoru Tasaka a04e982
+              log.warn "Book file #{test[1]} could not be parsed"
Mamoru Tasaka a04e982
+              book_valid_p = false
Mamoru Tasaka a04e982
+            end
Mamoru Tasaka a04e982
+          end
Mamoru Tasaka a04e982
+
Mamoru Tasaka a04e982
+          if not book_valid_p
Mamoru Tasaka a04e982
             md = /([\dxX]{10,13})#{EXT[:book]}/.match(filename)
Mamoru Tasaka a04e982
             if md
Mamoru Tasaka a04e982
               file_isbn = md[1]
Mamoru Tasaka a04e982
@@ -90,7 +105,7 @@
Mamoru Tasaka a04e982
             end
Mamoru Tasaka a04e982
             next
Mamoru Tasaka a04e982
           end
Mamoru Tasaka a04e982
-          book = self.regularize_book_from_yaml(test[1])
Mamoru Tasaka a04e982
+
Mamoru Tasaka a04e982
           old_isbn = book.isbn
Mamoru Tasaka a04e982
           old_pub_year = book.publishing_year
Mamoru Tasaka a04e982
           begin
Mamoru Tasaka a04e982
@@ -178,6 +193,8 @@
Mamoru Tasaka a04e982
     end
Mamoru Tasaka a04e982
 
Mamoru Tasaka a04e982
     def self.regularize_book_from_yaml(name)
Mamoru Tasaka a04e982
+      require 'syck/encoding'
Mamoru Tasaka a04e982
+
Mamoru Tasaka a04e982
       text = IO.read(name)
Mamoru Tasaka a04e982
 
Mamoru Tasaka a04e982
       #Code to remove the mystery string in books imported from Amazon
Mamoru Tasaka a04e982
@@ -198,7 +215,7 @@
Mamoru Tasaka a04e982
         new_yaml.sub!(/^\s*\-+\s*/, '')
Mamoru Tasaka a04e982
         text.sub!(md[0], "loaned_since: #{new_yaml}\n")
Mamoru Tasaka a04e982
       end
Mamoru Tasaka a04e982
-      book = YAML.load(text)
Mamoru Tasaka a04e982
+      book = YAML.load(Syck::unescape(text))
Mamoru Tasaka a04e982
       unless book.isbn.class == String
Mamoru Tasaka a04e982
         # HACK
Mamoru Tasaka a04e982
         md = /isbn: (.+)/.match(text)