Class: Dalli::Protocol::ValueSerializer
- Inherits:
-
Object
- Object
- Dalli::Protocol::ValueSerializer
- Defined in:
- lib/dalli/protocol/value_serializer.rb
Overview
Dalli::Protocol::ValueSerializer compartmentalizes the logic for managing serialization and deserialization of stored values. It manages interpreting relevant options from both client and request, determining whether to serialize/deserialize on store/retrieve, and processes bitflags as necessary.
Constant Summary collapse
- DEFAULTS =
{ serializer: Marshal }.freeze
- OPTIONS =
DEFAULTS.keys.freeze
- FLAG_SERIALIZED =
www.hjp.at/zettel/m/memcached_flags.rxml Looks like most clients use bit 0 to indicate native language serialization
0x1
Instance Attribute Summary collapse
-
#serialization_options ⇒ Object
Returns the value of attribute serialization_options.
Instance Method Summary collapse
-
#initialize(protocol_options) ⇒ ValueSerializer
constructor
A new instance of ValueSerializer.
- #retrieve(value, bitflags) ⇒ Object
- #serialize_value(value) ⇒ Object
- #serializer ⇒ Object
- #store(value, req_options, bitflags) ⇒ Object
Constructor Details
#initialize(protocol_options) ⇒ ValueSerializer
Returns a new instance of ValueSerializer.
24 25 26 27 |
# File 'lib/dalli/protocol/value_serializer.rb', line 24 def initialize() @serialization_options = DEFAULTS.merge(.select { |k, _| OPTIONS.include?(k) }) end |
Instance Attribute Details
#serialization_options ⇒ Object
Returns the value of attribute serialization_options.
22 23 24 |
# File 'lib/dalli/protocol/value_serializer.rb', line 22 def @serialization_options end |
Instance Method Details
#retrieve(value, bitflags) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/dalli/protocol/value_serializer.rb', line 36 def retrieve(value, bitflags) serialized = (bitflags & FLAG_SERIALIZED) != 0 if serialized begin serializer.load(value) rescue StandardError raise UnmarshalError, 'Unable to unmarshal value' end else value end end |
#serialize_value(value) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/dalli/protocol/value_serializer.rb', line 53 def serialize_value(value) serializer.dump(value) rescue Timeout::Error => e raise e rescue StandardError => e # Serializing can throw several different types of generic Ruby exceptions. # Convert to a specific exception so we can special case it higher up the stack. exc = Dalli::MarshalError.new(e.) exc.set_backtrace e.backtrace raise exc end |
#serializer ⇒ Object
49 50 51 |
# File 'lib/dalli/protocol/value_serializer.rb', line 49 def serializer @serialization_options[:serializer] end |
#store(value, req_options, bitflags) ⇒ Object
29 30 31 32 33 34 |
# File 'lib/dalli/protocol/value_serializer.rb', line 29 def store(value, , bitflags) do_serialize = !( && [:raw]) store_value = do_serialize ? serialize_value(value) : value.to_s bitflags |= FLAG_SERIALIZED if do_serialize [store_value, bitflags] end |