# hashman * [Homepage](https://github.com/esurdam/hashman#readme) * [Issues](https://github.com/esurdam/hashman/issues) * [Documentation](http://rubydoc.info/gems/hashman/frames) * [Email](mailto:es at cosi.io) ## Description Add some hash magic to your ruby classes. Use this gem to conceal ids or any integer based array. Ideally, user a serializer to exlucde ids and include your hash. Credits on hasher to [Peter Hellberg's Hashid](https://github.com/peterhellberg/hashids.rb) ## Features - Hash integer and UUID based ids - Reverse hash for lookup - Create a hashprint based on an array of integers. - Index your hashprint for uniqueness (Useful for payment data!) [EXAMPLE]() ## Examples ### Rails Usage Include ```HashMan``` in your model ``` class User < ActiveRecord::Base include HashMan # include activuuid only if thats your style include activeuuid # optionally set a hash length minimum # useful for integer based ids hash_length 8 end ``` A typical user will look like: ``` user = User.create({ :name => "awesome" }) user.id => #<UUID:0x3fe2f1dda1d0 UUID:5604ee6e-c934-44cb-89ff-d2934a708e55> ``` Generate a hash for an id (integer or uuid): ``` user.hash_id => "rkALRLO3rJyz3vRjx9XJrzlq6" ``` Reverse the hash for lookup: ``` User.reverse_hash("rkALRLO3rJyz3vRjx9XJrzlq6") => #<UUID:0x3fe2f1d00f70 UUID:5604ee6e-c934-44cb-89ff-d2934a708e55> ``` Hashprint sensitive data: ``` # secrets are created in userspace secrets = {:number => 1234123412341234, :cvv => 701, :zip => 90025 } # hashprint is created before saving to model secret_hash = User.create_hashprint = [ secrets[:number], secrets[:cvv], secrets[:zip ] => "evALO3rJyzJrzlq6" # persist the secret user.hashprint = secret_hash user.save! ``` ``` # Do some cool stuff in your model def verify_cvv(cvv) # where [1] is the index of the value # `decoded_hashprint` is a private method form hashman cvv == self.decoded_hashprint[1] end user.verify_cvv(700) => false user.verify_cvv(701) => true ``` Secret data is then hidden from prying eyes! Index hashprint for uniqueness validation! ;) ## Standalone require 'hashman' magic ``` HashMan.encode(integer) HashMan.create_hashprint(integer_array) Hashman.decode(hash) ``` ## Requirements ## Todo - Auto intercept `find` method on model to allow hash_id - I forget the others ## Install $ gem install hashman ## Copyright Copyright (c) 2016 Evan Surdam See {file:LICENSE.txt} for details.