diff options
| author | mokha <mokha@cisco.com> | 2018-06-08 19:55:31 -0600 |
|---|---|---|
| committer | mokha <mokha@cisco.com> | 2018-06-08 19:55:31 -0600 |
| commit | 7f9f2816f31608b8b82ad6f058075fff35899f25 (patch) | |
| tree | e0ec50d2df610a107fe47559c4e537858e3dbe2f | |
| parent | 1aa0f61d1ee4257d63ad30653f3ab3ba80a0d72b (diff) | |
create serialization chain.
| -rw-r--r-- | lib/locker/storage.rb | 40 | ||||
| -rw-r--r-- | spec/storage_spec.rb | 7 |
2 files changed, 44 insertions, 3 deletions
diff --git a/lib/locker/storage.rb b/lib/locker/storage.rb index 556d79f..a0f98b5 100644 --- a/lib/locker/storage.rb +++ b/lib/locker/storage.rb @@ -1,4 +1,40 @@ module Locker + class CompositeSerializer + def initialize(serializers = []) + @serializers = serializers + end + + def add(serializer) + @serializers.push(serializer) + end + + def serialize(value) + @serializers.each do |x| + value = x.serialize(value) + end + value + end + + def deserialize(value) + puts "deserialize" + @serializers.reverse.each do |x| + puts x.class + value = x.deserialize(value) + end + value + end + end + + class Base64Serializer + def serialize(value) + Base64.strict_encode64(value) + end + + def deserialize(value) + Base64.decode64(value) + end + end + class SymmetricCrypto attr_reader :private_key, :algorithm @@ -34,11 +70,11 @@ module Locker def fetch(key) value = @hash[key] return if value.nil? - @serializer.deserialize(Base64.decode64(value)) + @serializer.deserialize(value) end def store(key, value) - @hash[key] = Base64.strict_encode64(@serializer.serialize(value)) + @hash[key] = @serializer.serialize(value) end end end diff --git a/spec/storage_spec.rb b/spec/storage_spec.rb index e520880..59ed4b3 100644 --- a/spec/storage_spec.rb +++ b/spec/storage_spec.rb @@ -2,7 +2,12 @@ require 'spec_helper' RSpec.describe Locker::Storage do let(:crypto) { Crypto.new('aes256-cbc', key) } - let(:serializer) { Locker::SymmetricCrypto.new(key) } + let(:serializer) do + x = Locker::CompositeSerializer.new + x.add(Locker::SymmetricCrypto.new(key)) + x.add(Locker::Base64Serializer.new) + x + end describe "#fetch" do subject { described_class.new(encrypted_hash, serializer) } |
