Refcode

Currently a standalone gem for converting arbitrary Ruby objects into encrypted, URL-safe strings. The strings can be simply decrypted later to be used by your application.

Refcode was conceived as a way to attach referral data to tracking links. Encryption makes it unlikely that the links will be tampered with. Still, it is not recommended for critically sensitive applications! It was designed to power a simple referral link tracking system.

Implementation

Installation

Add this line to your application's Gemfile:

gem 'refcode'

And then execute:

$ bundle

Or install it yourself as:

$ gem install refcode

Usage

Refcode can be used in two ways. Most simply, you can use the Refcode::Encoder class directly.

encoder = Refcode::Encoder.new do |e|
  e.secret = "a long crunchy secret"
  e.salt = "some salt"
end

something = OpenStruct.new(channel: 'facebook', action: 'message', user_id: 43765)
encoded_param = encoder.encode something

# in some future request:

something = encoder.decode params[:encoded_param]
puts something.channel # 'facebook'

For added convenience when using Refcode with an ORM such as ActiveRecord, a module called Refcode::Encodable is also provided.

class Job < ActiveRecord::Base
  include Refcode::Encodable
  has_refcode secret: 'a long crunchy secret', salt: :id
end

# the salt option of the has_refcode method can accept a proc/lambda, string
# or a symbol representing an existing method on the class (id in this case)

# in some controller code:

@job = Job.find params[:id]
referral_code = @job.generate_refcode channel: 'facebook', action: 'message', user_id: 43765

# and in another action:

@job = Job.find params[:id]
referral_data = @job.parse_refcode params[:encoded_param]

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request