Project

foxify

0.0
The project is in a healthy, maintained state
Provides ruby implementation of resumable digests based on golang implementation
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Runtime

~> 0.7.2
~> 1.7
 Project Readme

Test Gem Version

Foxify

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.

Requirements

  • Ruby 3.3+
  • Go 1.23+

Installation

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.

Usage

Foxify::ResumableSHA256

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"

Foxify::ResumableSHA1

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"

Mascot

You asked for it, here we go:

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/orlon-pro/foxify.

License

The gem is available as open source under the terms of the MIT License.