Class: Juno::Transformer
Overview
Transforms keys and values (Marshal, YAML, JSON, Base64, MD5, …).
Defined Under Namespace
Constant Summary collapse
- TRANSFORMER =
Available key/value transformers
{ # Name => [ Type, Load, Dump, Library ], :bencode => [ :serialize, '::BEncode.load(value)', '::BEncode.dump(value)', 'bencode' ], :bert => [ :serialize, '::BERT.decode(value)', '::BERT.encode(value)', 'bert' ], :bson => [ :serialize, "::BSON.deserialize(value)['v']", "::BSON.serialize('v'=>value).to_s", 'bson' ], :json => [ :serialize, '::MultiJson.load(value).first', '::MultiJson.dump([value])', 'multi_json' ], :marshal => [ :serialize, '::Marshal.load(value)', '::Marshal.dump(value)' ], :msgpack => [ :serialize, '::MessagePack.unpack(value)', '::MessagePack.pack(value)', 'msgpack' ], :ox => [ :serialize, '::Ox.parse_obj(value)', '::Ox.dump(value)', 'ox' ], :tnet => [ :serialize, '::TNetstring.parse(value).first', '::TNetstring.dump(value)', 'tnetstring' ], :yaml => [ :serialize, '::YAML.load(value)', '::YAML.dump(value)', 'yaml' ], :lzma => [ :compress, '::LZMA.decompress(value)', '::LZMA.compress(value)', 'lzma' ], :lzo => [ :compress, '::LZO.decompress(value)', '::LZO.compress(value)', 'lzoruby' ], :snappy => [ :compress, '::Snappy.inflate(value)', '::Snappy.deflate(value)', 'snappy' ], :quicklz => [ :compress, '::QuickLZ.decompress(value)', '::QuickLZ.compress(value)', 'qlzruby' ], :zlib => [ :compress, '::Zlib::Inflate.inflate(value)', '::Zlib::Deflate.deflate(value)', 'zlib' ], :base64 => [ :encode, "value.unpack('m').first", "[value].pack('m').strip" ], :uuencode => [ :encode, "value.unpack('u').first", "[value].pack('u').strip" ], :escape => [ :encode, 'Escape.unescape(value)', 'Escape.escape(value)' ], :hmac => [ :hmac, 'HMAC.verify(value, @secret)', 'HMAC.sign(value, @secret)' , 'openssl' ], :md5 => [ :digest, nil, '::Digest::MD5.hexdigest(value)', 'digest/md5' ], :rmd160 => [ :digest, nil, '::Digest::RMD160.hexdigest(value)', 'digest/rmd160' ], :sha1 => [ :digest, nil, '::Digest::SHA1.hexdigest(value)', 'digest/sha1' ], :sha256 => [ :digest, nil, '::Digest::SHA256.hexdigest(value)', 'digest/sha2' ], :sha384 => [ :digest, nil, '::Digest::SHA384.hexdigest(value)', 'digest/sha2' ], :sha512 => [ :digest, nil, '::Digest::SHA512.hexdigest(value)', 'digest/sha2' ], :prefix => [ :prefix, nil, '@prefix+value' ], :spread => [ :spread, nil, '(tmp = value; ::File.join(tmp[0..1], tmp[2..-1]))' ], }
- VALUE_TRANSFORMER =
Allowed value transformers (Read it like a regular expression!)
compile_validator('serialize? compress? hmac? encode?')
- KEY_TRANSFORMER =
Allowed key transformers (Read it like a regular expression!)
compile_validator('serialize? prefix? (encode | (digest spread?))?')
Instance Attribute Summary
Attributes inherited from Proxy
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(adapter, options = {}) ⇒ Transformer
constructor
A new instance of Transformer.
Methods inherited from Proxy
#clear, #close, #delete, #key?, #load, #store
Methods inherited from Base
Constructor Details
#initialize(adapter, options = {}) ⇒ Transformer
Returns a new instance of Transformer.
12 13 14 15 |
# File 'lib/juno/transformer.rb', line 12 def initialize(adapter, = {}) super @prefix, @secret = [:prefix], [:secret] end |
Class Method Details
.new(adapter, options = {}) ⇒ Object
Constructor
Options:
-
:key - List of key transformers in the order in which they should be applied
-
:value - List of value transformers in the order in which they should be applied
-
:prefix - Prefix string for key namespacing (Used by the :prefix key transformer)
-
:secret - HMAC secret to verify values (Used by the :hmac value transformer)
30 31 32 33 34 35 36 37 38 39 |
# File 'lib/juno/transformer.rb', line 30 def new(adapter, = {}) keys = [[:key]].flatten.compact values = [[:value]].flatten.compact raise ArgumentError, 'Option :key or :value is required' if keys.empty? && values.empty? raise ArgumentError, 'Option :prefix is required for :prefix key transformer' if keys.include?(:prefix) && ![:prefix] raise ArgumentError, 'Option :secret is required for :hmac value transformer' if values.include?(:hmac) && ![:secret] name = class_name(keys, values) const_set(name, compile(keys, values)) unless const_defined?(name) const_get(name).original_new(adapter, ) end |
.original_new ⇒ Object
18 |
# File 'lib/juno/transformer.rb', line 18 alias_method :original_new, :new |