Sha256: 00b90b5e0689e92ec179751518207279d0cdc68e3a63b883dba2b77601c76a78

Contents?: true

Size: 1.02 KB

Versions: 1

Compression:

Stored size: 1.02 KB

Contents

require 'global_id'
require 'active_support/message_verifier'

class SignedGlobalID < GlobalID
  class << self
    attr_accessor :verifier

    def parse(sgid, options = {})
      if sgid.is_a? self
        sgid
      else
        super verify(sgid, pick_verifier(options))
      end
    end

    # Grab the verifier from options and fall back to SignedGlobalID.verifier.
    # Raise ArgumentError if neither is available.
    def pick_verifier(options)
      options.fetch :verifier do
        verifier || raise(ArgumentError, 'Pass a `verifier:` option with an `ActiveSupport::MessageVerifier` instance, or set a default SignedGlobalID.verifier.')
      end
    end

    private
      def verify(sgid, verifier)
        verifier.verify(sgid)
      rescue ActiveSupport::MessageVerifier::InvalidSignature
        nil
      end
  end

  attr_reader :verifier

  def initialize(gid, options = {})
    super
    @verifier = self.class.pick_verifier(options)
  end

  def to_s
    @sgid ||= @verifier.generate(super)
  end
  alias to_param to_s
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
globalid-0.2.3 lib/global_id/signed_global_id.rb