Class: Imap::Backup::Serializer::Imap
- Inherits:
-
Object
- Object
- Imap::Backup::Serializer::Imap
- Defined in:
- lib/imap/backup/serializer/imap.rb
Constant Summary collapse
- CURRENT_VERSION =
3
Instance Attribute Summary collapse
-
#folder_path ⇒ Object
readonly
Returns the value of attribute folder_path.
-
#loaded ⇒ Object
readonly
Returns the value of attribute loaded.
Instance Method Summary collapse
- #append(uid, length, flags: []) ⇒ Object
- #delete ⇒ Object
- #exist? ⇒ Boolean
- #get(uid) ⇒ Object
-
#initialize(folder_path) ⇒ Imap
constructor
A new instance of Imap.
-
#messages ⇒ Object
Make private.
- #pathname ⇒ Object
- #rename(new_path) ⇒ Object
- #rollback ⇒ Object
- #save ⇒ Object
- #transaction(&block) ⇒ Object
- #uid_validity ⇒ Object
- #uid_validity=(value) ⇒ Object
-
#uids ⇒ Object
Deprecated.
- #update_uid(old, new) ⇒ Object
- #valid? ⇒ Boolean
- #version ⇒ Object
Constructor Details
#initialize(folder_path) ⇒ Imap
Returns a new instance of Imap.
15 16 17 18 19 20 21 22 |
# File 'lib/imap/backup/serializer/imap.rb', line 15 def initialize(folder_path) @folder_path = folder_path @loaded = false @uid_validity = nil @messages = nil @version = nil @tsx = nil end |
Instance Attribute Details
#folder_path ⇒ Object (readonly)
Returns the value of attribute folder_path.
12 13 14 |
# File 'lib/imap/backup/serializer/imap.rb', line 12 def folder_path @folder_path end |
#loaded ⇒ Object (readonly)
Returns the value of attribute loaded.
13 14 15 |
# File 'lib/imap/backup/serializer/imap.rb', line 13 def loaded @loaded end |
Instance Method Details
#append(uid, length, flags: []) ⇒ Object
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/imap/backup/serializer/imap.rb', line 66 def append(uid, length, flags: []) offset = if .empty? 0 else = [-1] .offset + .length end << Serializer::Message.new( uid: uid, offset: offset, length: length, mbox: mbox, flags: flags ) save end |
#delete ⇒ Object
86 87 88 89 90 91 92 93 94 |
# File 'lib/imap/backup/serializer/imap.rb', line 86 def delete return if !exist? FileUtils.rm(pathname) @loaded = false @messages = nil @uid_validity = nil @version = nil end |
#exist? ⇒ Boolean
54 55 56 |
# File 'lib/imap/backup/serializer/imap.rb', line 54 def exist? File.exist?(pathname) end |
#get(uid) ⇒ Object
82 83 84 |
# File 'lib/imap/backup/serializer/imap.rb', line 82 def get(uid) .find { |m| m.uid == uid } end |
#messages ⇒ Object
Make private
118 119 120 121 |
# File 'lib/imap/backup/serializer/imap.rb', line 118 def ensure_loaded @messages end |
#pathname ⇒ Object
50 51 52 |
# File 'lib/imap/backup/serializer/imap.rb', line 50 def pathname "#{folder_path}.imap" end |
#rename(new_path) ⇒ Object
96 97 98 99 100 101 102 103 104 |
# File 'lib/imap/backup/serializer/imap.rb', line 96 def rename(new_path) if exist? old_pathname = pathname @folder_path = new_path File.rename(old_pathname, pathname) else @folder_path = new_path end end |
#rollback ⇒ Object
41 42 43 44 45 46 47 48 |
# File 'lib/imap/backup/serializer/imap.rb', line 41 def rollback tsx.fail_outside_transaction!(:rollback) @messages = tsx.data[:savepoint][:messages] @uid_validity = tsx.data[:savepoint][:uid_validity] tsx.clear end |
#save ⇒ Object
141 142 143 144 145 146 147 |
# File 'lib/imap/backup/serializer/imap.rb', line 141 def save return if tsx.in_transaction? ensure_loaded save_internal(version: version, uid_validity: uid_validity, messages: ) end |
#transaction(&block) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/imap/backup/serializer/imap.rb', line 24 def transaction(&block) tsx.fail_in_transaction!(:transaction, message: "nested transactions are not supported") ensure_loaded # rubocop:disable Lint/RescueException tsx.begin({savepoint: {messages: .dup, uid_validity: uid_validity}}) do block.call save_internal(version: version, uid_validity: uid_validity, messages: ) if tsx.data rescue Exception => e Logger.logger.error "#{self.class} handling #{e.class}" rollback raise e end # rubocop:enable Lint/RescueException end |
#uid_validity ⇒ Object
106 107 108 109 |
# File 'lib/imap/backup/serializer/imap.rb', line 106 def uid_validity ensure_loaded @uid_validity end |
#uid_validity=(value) ⇒ Object
111 112 113 114 115 |
# File 'lib/imap/backup/serializer/imap.rb', line 111 def uid_validity=(value) ensure_loaded @uid_validity = value save end |
#uids ⇒ Object
Deprecated
124 125 126 |
# File 'lib/imap/backup/serializer/imap.rb', line 124 def uids .map(&:uid) end |
#update_uid(old, new) ⇒ Object
128 129 130 131 132 133 134 |
# File 'lib/imap/backup/serializer/imap.rb', line 128 def update_uid(old, new) index = .find_index { |m| m.uid == old } return if index.nil? [index].uid = new save end |
#valid? ⇒ Boolean
58 59 60 61 62 63 64 |
# File 'lib/imap/backup/serializer/imap.rb', line 58 def valid? return false if !exist? return false if version != CURRENT_VERSION return false if !uid_validity true end |
#version ⇒ Object
136 137 138 139 |
# File 'lib/imap/backup/serializer/imap.rb', line 136 def version ensure_loaded @version end |