If you’re trying to store a blob (in my case, compressed text) into a Sqlite3 database with Datamapper and you’re running into this error:
Zlib::BufError: buffer error
Try base 64 encoding it, as hinted by this file: https://gist.github.com/721922
require 'zlib' require 'base64' class Foo include DataMapper::Resource property :compressed_file_content, Binary, accessor: :private def file_content=(str) @inflated_file_content = str deflator = Zlib::Deflate.new() self.compressed_file_content = Base64::encode64(deflator.deflate(@inflated_file_content, Zlib::FINISH)) deflator.close end def file_content if @inflated_file_content @inflated_file_content else inflator = Zlib::Inflate.new @inflated_file_content = inflator.inflate(Base64::decode64(compressed_file_content)) inflator.finish inflator.close @inflated_file_content end end end
It’s as simple as that. No need to use SQLite3::Blob, for example.