Class: Readthis::Serializers
- Inherits:
-
Object
- Object
- Readthis::Serializers
- Defined in:
- lib/readthis/serializers.rb
Constant Summary collapse
- BASE_SERIALIZERS =
Defines the default set of three serializers: Marshal, Passthrough, and JSON. With a hard limit of 7 that leaves 4 additional slots.
{ Marshal => 0x1, Passthrough => 0x2, JSON => 0x3 }.freeze
- SERIALIZER_LIMIT =
The hard serializer limit, based on the number of possible values within a single 3bit integer.
7
Instance Attribute Summary collapse
-
#inverted ⇒ Object
readonly
Returns the value of attribute inverted.
-
#serializers ⇒ Object
readonly
Returns the value of attribute serializers.
Instance Method Summary collapse
-
#<<(serializer) ⇒ self
Append a new serializer.
-
#assoc(serializer) ⇒ Number
Find a flag for a serializer object.
- #flags ⇒ Object
-
#freeze! ⇒ Object
Freeze the serializers hash, preventing modification.
-
#initialize ⇒ Serializers
constructor
Creates a new Readthis::Serializers entity.
- #marshals ⇒ Object
-
#rassoc(flag) ⇒ Module
Find a serializer object by flag value.
-
#reset! ⇒ Object
Reset the instance back to the default state.
Constructor Details
#initialize ⇒ Serializers
Creates a new Readthis::Serializers entity. No configuration is expected during initialization.
24 25 26 |
# File 'lib/readthis/serializers.rb', line 24 def initialize reset! end |
Instance Attribute Details
#inverted ⇒ Object (readonly)
Returns the value of attribute inverted.
19 20 21 |
# File 'lib/readthis/serializers.rb', line 19 def inverted @inverted end |
#serializers ⇒ Object (readonly)
Returns the value of attribute serializers.
19 20 21 |
# File 'lib/readthis/serializers.rb', line 19 def serializers @serializers end |
Instance Method Details
#<<(serializer) ⇒ self
Append a new serializer. Up to 7 total serializers may be configured for any single application be configured for any single application. This limit is based on the number of bytes available in the option flag.
40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/readthis/serializers.rb', line 40 def <<(serializer) case when serializers.frozen? raise SerializersFrozenError when serializers.length >= SERIALIZER_LIMIT raise SerializersLimitError else @serializers[serializer] = flags.max.succ @inverted = @serializers.invert end self end |
#assoc(serializer) ⇒ Number
Find a flag for a serializer object.
79 80 81 82 83 84 85 86 87 |
# File 'lib/readthis/serializers.rb', line 79 def assoc(serializer) flag = serializers[serializer] unless flag raise UnknownSerializerError, "'#{serializer}' hasn't been configured" end flag end |
#flags ⇒ Object
108 109 110 |
# File 'lib/readthis/serializers.rb', line 108 def flags serializers.values end |
#freeze! ⇒ Object
Freeze the serializers hash, preventing modification.
56 57 58 |
# File 'lib/readthis/serializers.rb', line 56 def freeze! serializers.freeze end |
#marshals ⇒ Object
103 104 105 |
# File 'lib/readthis/serializers.rb', line 103 def marshals serializers.keys end |
#rassoc(flag) ⇒ Module
Find a serializer object by flag value.
98 99 100 |
# File 'lib/readthis/serializers.rb', line 98 def rassoc(flag) inverted[flag & SERIALIZER_LIMIT] end |
#reset! ⇒ Object
Reset the instance back to the default state. Useful for cleanup during testing.
63 64 65 66 |
# File 'lib/readthis/serializers.rb', line 63 def reset! @serializers = BASE_SERIALIZERS.dup @inverted = @serializers.invert end |