def on_msg(msg)

      return unless accept?(msg)

      msg = msg.dup
        # a shallow copy is sufficient

      si = if fei = msg['fei']
        Ruote::FlowExpressionId.to_storage_id(fei)
      else
        msg['wfid'] || 'no_wfid'
      end

      _id = msg['_id']
      msg['original_id'] = _id
      msg['_id'] = "#{_id}!#{si}"

      msg['type'] = 'history'
      msg['original_put_at'] = msg['put_at']

      msg.delete('_rev')

      @context.storage.put(msg)
    end
def on_msg(msg)

      return unless accept?(msg)

      msg = msg.dup
        # a shallow copy is sufficient

      si = if fei = msg['fei']
        Ruote::FlowExpressionId.to_storage_id(fei)
      else
        msg['wfid'] || 'no_wfid'
      end

      _id = msg['_id']
      msg['original_id'] = _id
      msg['_id'] = "#{_id}!#{si}"

      msg['type'] = 'history'
      msg['original_put_at'] = msg['put_at']

      msg.delete('_rev')

      @context.storage.put(msg)
    end
This method is called by the worker via the context. Successfully
 processed msgs are passed here.