Class: Imap::Backup::Serializer::DelayedMetadataSerializer

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/imap/backup/serializer/delayed_metadata_serializer.rb

Instance Method Summary collapse

Constructor Details

#initialize(serializer:) ⇒ DelayedMetadataSerializer

Returns a new instance of DelayedMetadataSerializer.



16
17
18
19
# File 'lib/imap/backup/serializer/delayed_metadata_serializer.rb', line 16

def initialize(serializer:)
  @serializer = serializer
  @tsx = nil
end

Instance Method Details

#append(uid, message, flags) ⇒ void

This method returns an undefined value.

Appends a message to the mbox file and adds the metadata to the transaction

Parameters:

  • uid (Integer)

    the UID of the message

  • message (String)

    the message

  • flags (Array<Symbol>)

    the flags for the message



46
47
48
49
50
51
52
# File 'lib/imap/backup/serializer/delayed_metadata_serializer.rb', line 46

def append(uid, message, flags)
  tsx.fail_outside_transaction!(:append)
  mboxrd_message = Email::Mboxrd::Message.new(message)
  serialized = mboxrd_message.to_serialized
  tsx.data[:metadata] << {uid: uid, length: serialized.bytesize, flags: flags}
  mbox.append(serialized)
end

#transaction(&block) ⇒ void

This method returns an undefined value.

Initializes the metadata and mailbox transactions, then calls the supplied block. Once the block has finished, commits changes to metadata



25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/imap/backup/serializer/delayed_metadata_serializer.rb', line 25

def transaction(&block)
  tsx.fail_in_transaction!(:transaction, message: "nested transactions are not supported")

  tsx.begin({metadata: []}) do
    mbox.transaction do
      block.call

      commit

      serializer.reload
    end
  end
end