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.