foxify
is a gem which provides resumable digest implementations in ruby by
leveraging the power of Go
The classes Foxify::ResumableSHA256
and Foxify::ResumableSHA1
can be safely
serialized and restored at any point in time and digest calculation can be resumed.
This is an advantage in stateless application servers where i.e. large files are
uploaded in chunks and you want to resume digest calculation in each request.
- Ruby 3.3+
- Go 1.23+
Add the foxify gem to your Gemfile:
gem "foxify"
Update your bundle:
bundle install
NOTE: You need a go-lang compiler version 1.23+ in your environment to compile the native part of this gem.
Simple usage without serializing:
require 'foxify'
digest = Foxify::ResumableSHA256.new
digest.update("The quick brown fox jumps over the lazy dog")
digest.hexdigest # returns "d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592"
Usage with serializing and resuming later on:
require 'foxify'
digest = Foxify::ResumableSHA256.new
digest.update("The quick brown fox ")
data = digest.to_msgpack
# store data somewhere and later reload it
restored = Foxify::ResumableSHA256.from_msgpack(data)
restored.update("jumps over the lazy dog")
restored.hexdigest # returns "d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592"
Simple usage without serializing:
require 'foxify'
digest = Foxify::ResumableSHA1.new
digest.update("The quick brown fox jumps over the lazy dog")
digest.hexdigest # returns "2fd4e1c67a2d28fced849ee1bb76e7391b93eb12"
Usage with serializing and resuming later on:
require 'foxify'
digest = Foxify::ResumableSHA1.new
digest.update("The quick brown fox ")
data = digest.to_msgpack
# store data somewhere and later reload it
restored = Foxify::ResumableSHA1.from_msgpack(data)
restored.update("jumps over the lazy dog")
restored.hexdigest # returns "2fd4e1c67a2d28fced849ee1bb76e7391b93eb12"
You asked for it, here we go:

Bug reports and pull requests are welcome on GitHub at https://github.com/orlon-pro/foxify.
The gem is available as open source under the terms of the MIT License.