diff options
author | Willem van Bergen <willem@vanbergen.org> | 2011-09-15 08:28:53 -0400 |
---|---|---|
committer | Willem van Bergen <willem@vanbergen.org> | 2011-09-15 08:28:53 -0400 |
commit | bffaa888ac4a1ee60a9f93650b9184a9402eff09 (patch) | |
tree | 7ac10c00a49fb93ce5ae4e317fc62e6d9c935439 /activesupport/test/message_verifier_test.rb | |
parent | da7f0426ec7b0aa053489633c2a8a3da6423654f (diff) | |
download | rails-bffaa888ac4a1ee60a9f93650b9184a9402eff09.tar.gz rails-bffaa888ac4a1ee60a9f93650b9184a9402eff09.tar.bz2 rails-bffaa888ac4a1ee60a9f93650b9184a9402eff09.zip |
Custom serializers and deserializers in MessageVerifier and MessageEncryptor.
By default, these classes use Marshal for serializing and deserializing messages. Unfortunately, the Marshal format is closely associated with Ruby internals and even changes between different interpreters. This makes the resulting message very hard to impossible to unserialize messages generated by these classes in other environments like node.js.
This patch solves this by allowing you to set your own custom serializer and deserializer lambda functions. By default, it still uses Marshal to be backwards compatible.
Diffstat (limited to 'activesupport/test/message_verifier_test.rb')
-rw-r--r-- | activesupport/test/message_verifier_test.rb | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/activesupport/test/message_verifier_test.rb b/activesupport/test/message_verifier_test.rb index 4821311244..83f34ebc33 100644 --- a/activesupport/test/message_verifier_test.rb +++ b/activesupport/test/message_verifier_test.rb @@ -8,6 +8,7 @@ rescue LoadError, NameError else require 'active_support/time' +require 'active_support/json' class MessageVerifierTest < Test::Unit::TestCase def setup @@ -31,6 +32,14 @@ class MessageVerifierTest < Test::Unit::TestCase assert_not_verified("#{data}--#{hash.reverse}") assert_not_verified("purejunk") end + + def test_alternative_serialization_method + @verifier.serializer = lambda { |value| ActiveSupport::JSON.encode(value) } + @verifier.deserializer = lambda { |value| ActiveSupport::JSON.decode(value) } + + message = @verifier.generate({ :foo => 123, 'bar' => Time.local(2010) }) + assert_equal @verifier.verify(message), { "foo" => 123, "bar" => "2010-01-01T00:00:00-05:00" } + end def assert_not_verified(message) assert_raise(ActiveSupport::MessageVerifier::InvalidSignature) do |