summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormokha <mokha@cisco.com>2018-06-08 19:55:31 -0600
committermokha <mokha@cisco.com>2018-06-08 19:55:31 -0600
commit7f9f2816f31608b8b82ad6f058075fff35899f25 (patch)
treee0ec50d2df610a107fe47559c4e537858e3dbe2f
parent1aa0f61d1ee4257d63ad30653f3ab3ba80a0d72b (diff)
create serialization chain.
-rw-r--r--lib/locker/storage.rb40
-rw-r--r--spec/storage_spec.rb7
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) }