require "active_model" require "msgpack_rails/activesupport/message_pack" module ActiveModel module Serializers module MessagePack extend ActiveSupport::Concern include ActiveModel::Serialization included do extend ActiveModel::Naming class_attribute :include_root_in_msgpack self.include_root_in_msgpack = false end def as_msgpack(options = {}) root = if options && options.key?(:root) options[:root] else include_root_in_msgpack end if root root = self.class.model_name.element if root == true { root => serializable_hash(options) } else serializable_hash(options) end end def from_msgpack(msgpack, include_root=include_root_in_msgpack) hash = ActiveSupport::MessagePack.decode(msgpack) hash = hash.values.first if include_root self.attributes = hash self end end end end