module OneRoster::EncodingMethods
  extend ActiveSupport::Concern

  def encode_source_id(model, id, options={})
    payload = { model: model, id: id }.merge(options)
    Base64.urlsafe_encode64(payload.to_json, padding: false)
  end

  def decode_source_id(token=nil)
    token ||= params[:id]
    token = Base64.decode64(token)
    JSON.parse(token)
  rescue
    {}
  end

  def model
    decode_source_id['model'].pluralize
  end

  def id
    decode_source_id['id'].to_i
  end
end
