Module: ActiveSupport::MessagePack::Extensions
Do not use. This module is for internal use only.
Relationships & Source Files | |
Defined in: | activesupport/lib/active_support/message_pack/extensions.rb |
Constant Summary
-
LOAD_WITH_JSON_CREATE =
# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 2771
-
LOAD_WITH_MSGPACK_EXT =
# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 2760
Instance Method Summary
- #dump_class(klass)
- #dump_time_zone(time_zone)
- #install(registry)
- #install_unregistered_type_error(registry)
- #install_unregistered_type_fallback(registry)
- #load_class(name)
- #load_time_zone(name)
- #raise_invalid_format
- #raise_unserializable(object)
- #read_class(unpacker)
- #read_complex(unpacker)
- #read_date(unpacker)
- #read_datetime(unpacker)
- #read_duration(unpacker)
- #read_hash_with_indifferent_access(unpacker)
- #read_ipaddr(unpacker)
- #read_object(unpacker)
- #read_range(unpacker)
- #read_rational(unpacker)
- #read_set(unpacker)
- #read_time(unpacker)
- #read_time_with_zone(unpacker)
- #read_time_zone(unpacker)
- #write_class(klass, packer)
- #write_complex(complex, packer)
- #write_date(date, packer)
- #write_datetime(datetime, packer)
- #write_duration(duration, packer)
- #write_hash_with_indifferent_access(hwia, packer)
- #write_ipaddr(ipaddr, packer)
- #write_object(object, packer)
- #write_range(range, packer)
- #write_rational(rational, packer)
- #write_set(set, packer)
- #write_time(time, packer)
- #write_time_with_zone(twz, packer)
- #write_time_zone(time_zone, packer)
Instance Method Details
#dump_class(klass)
# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 253
def dump_class(klass) raise UnserializableObjectError, "Cannot serialize anonymous class" unless klass.name klass.name end
#dump_time_zone(time_zone)
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 179
def dump_time_zone(time_zone) time_zone.name end
#install(registry)
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 20
def install(registry) registry.register_type 0, Symbol, packer: :to_msgpack_ext, unpacker: :from_msgpack_ext, optimized_symbols_parsing: true registry.register_type 1, Integer, packer: ::MessagePack::Bigint.method(:to_msgpack_ext), unpacker: ::MessagePack::Bigint.method(:from_msgpack_ext), oversized_integer_extension: true registry.register_type 2, BigDecimal, packer: :_dump, unpacker: :_load registry.register_type 3, Rational, packer: method(:write_rational), unpacker: method(:read_rational), recursive: true registry.register_type 4, Complex, packer: method(:write_complex), unpacker: method(:read_complex), recursive: true registry.register_type 5, DateTime, packer: method(:write_datetime), unpacker: method(:read_datetime), recursive: true registry.register_type 6, Date, packer: method(:write_date), unpacker: method(:read_date), recursive: true registry.register_type 7, Time, packer: method(:write_time), unpacker: method(:read_time), recursive: true registry.register_type 8, ActiveSupport::TimeWithZone, packer: method(:write_time_with_zone), unpacker: method(:read_time_with_zone), recursive: true registry.register_type 9, ActiveSupport::TimeZone, packer: method(:dump_time_zone), unpacker: method(:load_time_zone) registry.register_type 10, ActiveSupport::Duration, packer: method(:write_duration), unpacker: method(:read_duration), recursive: true registry.register_type 11, Range, packer: method(:write_range), unpacker: method(:read_range), recursive: true registry.register_type 12, Set, packer: method(:write_set), unpacker: method(:read_set), recursive: true registry.register_type 13, URI::Generic, packer: :to_s, unpacker: URI.method(:parse) registry.register_type 14, IPAddr, packer: method(:write_ipaddr), unpacker: method(:read_ipaddr), recursive: true registry.register_type 15, Pathname, packer: :to_s, unpacker: :new registry.register_type 16, Regexp, packer: :to_s, unpacker: :new registry.register_type 17, ActiveSupport::HashWithIndifferentAccess, packer: method(:write_hash_with_indifferent_access), unpacker: method(:read_hash_with_indifferent_access), recursive: true end
#install_unregistered_type_error(registry)
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 107
def install_unregistered_type_error(registry) registry.register_type 127, Object, packer: method(:raise_unserializable), unpacker: method(:raise_invalid_format) end
#install_unregistered_type_fallback(registry)
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 113
def install_unregistered_type_fallback(registry) registry.register_type 127, Object, packer: method(:write_object), unpacker: method(:read_object), recursive: true end
#load_class(name)
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 258
def load_class(name) Object.const_get(name) rescue NameError => error if error.name.to_s == name raise MissingClassError, "Missing class: #{name}" else raise end end
#load_time_zone(name)
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 183
def load_time_zone(name) ActiveSupport::TimeZone[name] end
#raise_invalid_format
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 249
def raise_invalid_format(*) raise "Invalid format" end
#raise_unserializable(object)
# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 245
def raise_unserializable(object, *) raise UnserializableObjectError, "Unsupported type #{object.class} for object #{object.inspect}" end
#read_class(unpacker)
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 272
def read_class(unpacker) load_class(unpacker.read) end
#read_complex(unpacker)
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 135
def read_complex(unpacker) Complex(unpacker.read, unpacker.read) end
#read_date(unpacker)
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 156
def read_date(unpacker) Date.jd(unpacker.read) end
#read_datetime(unpacker)
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 148
def read_datetime(unpacker) DateTime.jd(unpacker.read, unpacker.read, unpacker.read, unpacker.read + read_rational(unpacker), read_rational(unpacker)) end
#read_duration(unpacker)
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 200
def read_duration(unpacker) value = unpacker.read parts = ActiveSupport::Duration::PARTS.zip(unpacker.read).to_h parts.compact! ActiveSupport::Duration.new(value, parts) end
#read_hash_with_indifferent_access(unpacker)
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 241
def read_hash_with_indifferent_access(unpacker) ActiveSupport::HashWithIndifferentAccess.new(unpacker.read) end
#read_ipaddr(unpacker)
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 233
def read_ipaddr(unpacker) IPAddr.new(unpacker.read) end
#read_object(unpacker)
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 293
def read_object(unpacker) case unpacker.read when LOAD_WITH_MSGPACK_EXT read_class(unpacker).from_msgpack_ext(unpacker.read) when LOAD_WITH_JSON_CREATE read_class(unpacker).json_create(unpacker.read) else raise_invalid_format end end
#read_range(unpacker)
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 213
def read_range(unpacker) Range.new(unpacker.read, unpacker.read, unpacker.read) end
#read_rational(unpacker)
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 125
def read_rational(unpacker) numerator = unpacker.read Rational(numerator, numerator.zero? ? 1 : unpacker.read) end
#read_set(unpacker)
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 221
def read_set(unpacker) Set.new(unpacker.read) end
#read_time(unpacker)
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 166
def read_time(unpacker) Time.at_without_coercion(unpacker.read, unpacker.read, :nanosecond, in: unpacker.read) end
#read_time_with_zone(unpacker)
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 175
def read_time_with_zone(unpacker) ActiveSupport::TimeWithZone.new(read_time(unpacker), read_time_zone(unpacker)) end
#read_time_zone(unpacker)
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 191
def read_time_zone(unpacker) load_time_zone(unpacker.read) end
#write_class(klass, packer)
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 268
def write_class(klass, packer) packer.write(dump_class(klass)) end
#write_complex(complex, packer)
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 130
def write_complex(complex, packer) packer.write(complex.real) packer.write(complex.imaginary) end
#write_date(date, packer)
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 152
def write_date(date, packer) packer.write(date.jd) end
#write_datetime(datetime, packer)
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 139
def write_datetime(datetime, packer) packer.write(datetime.jd) packer.write(datetime.hour) packer.write(datetime.min) packer.write(datetime.sec) write_rational(datetime.sec_fraction, packer) write_rational(datetime.offset, packer) end
#write_duration(duration, packer)
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 195
def write_duration(duration, packer) packer.write(duration.value) packer.write(duration._parts.values_at(*ActiveSupport::Duration::PARTS)) end
#write_hash_with_indifferent_access(hwia, packer)
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 237
def write_hash_with_indifferent_access(hwia, packer) packer.write(hwia.to_h) end
#write_ipaddr(ipaddr, packer)
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 225
def write_ipaddr(ipaddr, packer) if ipaddr.prefix < 32 || (ipaddr.ipv6? && ipaddr.prefix < 128) packer.write("#{ipaddr}/#{ipaddr.prefix}") else packer.write(ipaddr.to_s) end end
#write_object(object, packer)
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 279
def write_object(object, packer) if object.class.respond_to?(:from_msgpack_ext) packer.write(LOAD_WITH_MSGPACK_EXT) write_class(object.class, packer) packer.write(object.to_msgpack_ext) elsif object.class.respond_to?(:json_create) packer.write(LOAD_WITH_JSON_CREATE) write_class(object.class, packer) packer.write(object.as_json) else raise_unserializable(object) end end
#write_range(range, packer)
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 207
def write_range(range, packer) packer.write(range.begin) packer.write(range.end) packer.write(range.exclude_end?) end
#write_rational(rational, packer)
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 120
def write_rational(rational, packer) packer.write(rational.numerator) packer.write(rational.denominator) unless rational.numerator.zero? end
#write_set(set, packer)
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 217
def write_set(set, packer) packer.write(set.to_a) end
#write_time(time, packer)
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 160
def write_time(time, packer) packer.write(time.tv_sec) packer.write(time.tv_nsec) packer.write(time.utc_offset) end
#write_time_with_zone(twz, packer)
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 170
def write_time_with_zone(twz, packer) write_time(twz.utc, packer) write_time_zone(twz.time_zone, packer) end
#write_time_zone(time_zone, packer)
[ GitHub ]# File 'activesupport/lib/active_support/message_pack/extensions.rb', line 187
def write_time_zone(time_zone, packer) packer.write(dump_time_zone(time_zone)) end