Class: Imap::Backup::Serializer::Files

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

Overview

Provides memoized file helpers for Serializer

Defined Under Namespace

Classes: Path

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(files_path:) ⇒ Files

Returns a new instance of Files.

Parameters:



20
21
22
23
24
25
26
# File 'lib/imap/backup/serializer/files.rb', line 20

def initialize(files_path:)
  @files_path = files_path
  @directory_ensured = false
  @imap = nil
  @mbox = nil
  @sanitized_files_path = nil
end

Instance Attribute Details

#files_pathObject (readonly)

Returns the value of attribute files_path.



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

def files_path
  @files_path
end

Instance Method Details

#check_integrity!void

This method returns an undefined value.

Checks that the folder’s data is stored correctly



44
45
46
# File 'lib/imap/backup/serializer/files.rb', line 44

def check_integrity!
  Serializer::IntegrityChecker.new(imap: imap, mbox: mbox).run
end

#deletevoid

This method returns an undefined value.

Deletes the serialized data



50
51
52
53
54
# File 'lib/imap/backup/serializer/files.rb', line 50

def delete
  imap.delete
  mbox.delete
  reload
end

#each_message(required_uids = nil, &block) ⇒ Enumerator, void

Enumerates over a series of messages. When called without a block, returns an Enumerator

Parameters:

  • required_uids (Array<Integer>) (defaults to: nil)

    the UIDs of the message to enumerate over

Returns:

  • (Enumerator, void)


60
61
62
63
64
65
66
67
68
69
# File 'lib/imap/backup/serializer/files.rb', line 60

def each_message(required_uids = nil, &block)
  return enum_for(:each_message, required_uids) if !block

  required_uids ||= uids

  validate!

  enumerator = Serializer::MessageEnumerator.new(imap: imap)
  enumerator.run(uids: required_uids, &block)
end

#get(uid) ⇒ Serializer::Message

Get message metadata

Parameters:

  • uid (Integer)

    a message UID

Returns:



74
75
76
77
# File 'lib/imap/backup/serializer/files.rb', line 74

def get(uid)
  validate!
  imap.get(uid)
end

#imapObject



28
29
30
31
32
33
# File 'lib/imap/backup/serializer/files.rb', line 28

def imap
  @imap ||= begin
    ensure_directory
    Serializer::Imap.new(files_path: sanitized_files_path)
  end
end

#mboxObject



35
36
37
38
39
40
# File 'lib/imap/backup/serializer/files.rb', line 35

def mbox
  @mbox ||= begin
    ensure_directory
    Serializer::Mbox.new(files_path: sanitized_files_path)
  end
end

#messagesArray<Hash>

Returns:

  • (Array<Hash>)


80
81
82
83
# File 'lib/imap/backup/serializer/files.rb', line 80

def messages
  validate!
  imap.messages
end

#reloadvoid

This method returns an undefined value.

Forces a reload of the serialized files



87
88
89
90
# File 'lib/imap/backup/serializer/files.rb', line 87

def reload
  @imap = nil
  @mbox = nil
end

#rename(new_files_path) ⇒ void

This method returns an undefined value.

Renames the serialized files

Parameters:



95
96
97
98
99
# File 'lib/imap/backup/serializer/files.rb', line 95

def rename(new_files_path)
  Serializer::DirectoryMaker.new(files_path: new_files_path).run
  mbox.rename new_files_path
  imap.rename new_files_path
end

#uid_validityInteger

Returns the UID validity for the folder.

Returns:

  • (Integer)

    the UID validity for the folder



102
103
104
105
# File 'lib/imap/backup/serializer/files.rb', line 102

def uid_validity
  validate!
  imap.uid_validity
end

#uid_validity=(value) ⇒ Object



107
108
109
110
111
# File 'lib/imap/backup/serializer/files.rb', line 107

def uid_validity=(value)
  validate!
  imap.uid_validity = value
  mbox.touch
end

#uidsArray<Integer>

Returns The uids of all messages.

Returns:

  • (Array<Integer>)

    The uids of all messages



114
115
116
117
# File 'lib/imap/backup/serializer/files.rb', line 114

def uids
  validate!
  imap.uids
end

#update_uid(old, new) ⇒ void

This method returns an undefined value.

Update a message’s metadata, replacing its UID

Parameters:

  • old (Integer)

    the existing message UID

  • new (Integer)

    the new UID to apply to the message



123
124
125
126
# File 'lib/imap/backup/serializer/files.rb', line 123

def update_uid(old, new)
  validate!
  imap.update_uid(old, new)
end

#validate!Boolean

Checks that the metadata files are valid, or deletes any existing files if the pair are not valid.

Returns:

  • (Boolean)

    indicates whether there are existing, valid files



131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# File 'lib/imap/backup/serializer/files.rb', line 131

def validate!
  return true if @validated

  imap_valid = imap.valid?
  mbox_valid = mbox.valid?
  if imap_valid && mbox_valid
    @validated = true
    return true
  end
  warn_imap = !imap_valid && imap.exist?
  Logger.logger.info("Metadata file '#{imap.pathname}' is invalid") if warn_imap

  delete

  false
end