Module: Persist::TSVAdapter
- Included in:
- CDBAdapter, FWTAdapter, KCAdapter, LMDBAdapter, PKIAdapter, TCAdapter
- Defined in:
- lib/rbbt/persist/tsv/adapter.rb
Constant Summary collapse
- MAX_CHAR =
255.chr
Instance Attribute Summary collapse
-
#closed ⇒ Object
Returns the value of attribute closed.
-
#mutex ⇒ Object
Returns the value of attribute mutex.
-
#persistence_path ⇒ Object
Returns the value of attribute persistence_path.
-
#writable ⇒ Object
Returns the value of attribute writable.
Instance Method Summary collapse
- #[](*args) ⇒ Object
- #[]=(*args) ⇒ Object
- #close(*args) ⇒ Object
- #closed? ⇒ Boolean
- #collect ⇒ Object
- #delete(key) ⇒ Object
- #each(*args, &block) ⇒ Object
- #get_prefix(key) ⇒ Object
- #include?(*args) ⇒ Boolean
- #keys(*args) ⇒ Object
- #lock ⇒ Object
- #lock_and_close ⇒ Object
- #merge!(hash) ⇒ Object
- #prefix(key) ⇒ Object
- #range(*args) ⇒ Object
- #read(*args) ⇒ Object
- #read? ⇒ Boolean
- #read_and_close ⇒ Object
- #read_lock ⇒ Object
- #size(*args) ⇒ Object
- #values_at(*keys) ⇒ Object
- #with_read(&block) ⇒ Object
- #with_write(&block) ⇒ Object
- #write(*args) ⇒ Object
- #write? ⇒ Boolean
- #write_and_close ⇒ Object
- #write_and_read ⇒ Object
- #write_lock ⇒ Object
Instance Attribute Details
#closed ⇒ Object
Returns the value of attribute closed.
4 5 6 |
# File 'lib/rbbt/persist/tsv/adapter.rb', line 4 def closed @closed end |
#mutex ⇒ Object
Returns the value of attribute mutex.
4 5 6 |
# File 'lib/rbbt/persist/tsv/adapter.rb', line 4 def mutex @mutex end |
#persistence_path ⇒ Object
Returns the value of attribute persistence_path.
4 5 6 |
# File 'lib/rbbt/persist/tsv/adapter.rb', line 4 def persistence_path @persistence_path end |
#writable ⇒ Object
Returns the value of attribute writable.
4 5 6 |
# File 'lib/rbbt/persist/tsv/adapter.rb', line 4 def writable @writable end |
Instance Method Details
#[](*args) ⇒ Object
211 212 213 214 215 |
# File 'lib/rbbt/persist/tsv/adapter.rb', line 211 def [](*args) self.read_lock do super(*args) #- TSV::ENTRY_KEYS.to_a end end |
#[]=(*args) ⇒ Object
217 218 219 220 221 |
# File 'lib/rbbt/persist/tsv/adapter.rb', line 217 def []=(*args) self.write_lock do super(*args) #- TSV::ENTRY_KEYS.to_a end end |
#close(*args) ⇒ Object
32 33 34 35 36 37 38 39 |
# File 'lib/rbbt/persist/tsv/adapter.rb', line 32 def close(*args) begin super(*args) @closed = true rescue NoMethodError end self end |
#closed? ⇒ Boolean
12 13 14 |
# File 'lib/rbbt/persist/tsv/adapter.rb', line 12 def closed? @closed end |
#collect ⇒ Object
254 255 256 257 258 259 260 261 262 263 264 |
# File 'lib/rbbt/persist/tsv/adapter.rb', line 254 def collect res = [] each do |key, value| res << if block_given? yield key, value else [key, value] end end res end |
#delete(key) ⇒ Object
48 49 50 |
# File 'lib/rbbt/persist/tsv/adapter.rb', line 48 def delete(key) out(key) end |
#each(*args, &block) ⇒ Object
248 249 250 251 252 |
# File 'lib/rbbt/persist/tsv/adapter.rb', line 248 def each(*args, &block) self.read_lock do super(*args, &block) end end |
#get_prefix(key) ⇒ Object
236 237 238 239 |
# File 'lib/rbbt/persist/tsv/adapter.rb', line 236 def get_prefix(key) keys = prefix(key) select(:key => keys) end |
#include?(*args) ⇒ Boolean
205 206 207 208 209 |
# File 'lib/rbbt/persist/tsv/adapter.rb', line 205 def include?(*args) self.read_lock do super(*args) #- TSV::ENTRY_KEYS.to_a end end |
#keys(*args) ⇒ Object
223 224 225 226 227 |
# File 'lib/rbbt/persist/tsv/adapter.rb', line 223 def keys(*args) self.read_lock do super(*args) end end |
#lock ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/rbbt/persist/tsv/adapter.rb', line 52 def lock return yield if @locked lock_filename = Persist.persistence_path(persistence_path, {:dir => TSV.lock_dir}) Misc.lock(lock_filename) do begin @locked = true yield ensure @locked = false end end end |
#lock_and_close ⇒ Object
65 66 67 68 69 70 71 72 73 |
# File 'lib/rbbt/persist/tsv/adapter.rb', line 65 def lock_and_close lock do begin yield ensure close end end end |
#merge!(hash) ⇒ Object
189 190 191 192 193 |
# File 'lib/rbbt/persist/tsv/adapter.rb', line 189 def merge!(hash) hash.each do |key,values| self[key] = values end end |
#prefix(key) ⇒ Object
230 231 232 233 234 |
# File 'lib/rbbt/persist/tsv/adapter.rb', line 230 def prefix(key) self.read_lock do range(key, 1, key + MAX_CHAR, 1) end end |
#range(*args) ⇒ Object
195 196 197 198 199 200 201 202 203 |
# File 'lib/rbbt/persist/tsv/adapter.rb', line 195 def range(*args) begin self.read_lock do super(*args) end rescue [] end end |
#read(*args) ⇒ Object
41 42 43 44 45 46 |
# File 'lib/rbbt/persist/tsv/adapter.rb', line 41 def read(*args) begin super(*args) rescue NoMethodError end end |
#read? ⇒ Boolean
20 21 22 |
# File 'lib/rbbt/persist/tsv/adapter.rb', line 20 def read? ! (write? || closed?) end |
#read_and_close ⇒ Object
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
# File 'lib/rbbt/persist/tsv/adapter.rb', line 139 def read_and_close if read? || write? begin return yield ensure close unless @locked end end lock do read true if closed? || ! read? begin yield ensure close end end end |
#read_lock ⇒ Object
158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
# File 'lib/rbbt/persist/tsv/adapter.rb', line 158 def read_lock read if closed? if read? || write? return yield end lock do close read true begin yield end end end |
#size(*args) ⇒ Object
242 243 244 245 246 |
# File 'lib/rbbt/persist/tsv/adapter.rb', line 242 def size(*args) self.read_lock do super(*args) end end |
#values_at(*keys) ⇒ Object
266 267 268 269 270 271 272 |
# File 'lib/rbbt/persist/tsv/adapter.rb', line 266 def values_at(*keys) self.read_lock do keys.collect do |k| self[k] end end end |
#with_read(&block) ⇒ Object
114 115 116 117 118 119 120 |
# File 'lib/rbbt/persist/tsv/adapter.rb', line 114 def with_read(&block) if read? || write? return yield else read_and_close &block end end |
#with_write(&block) ⇒ Object
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/rbbt/persist/tsv/adapter.rb', line 122 def with_write(&block) if write? return yield else if self.read? self.write_and_read do return yield end else self.write_and_close do return yield end end end end |
#write(*args) ⇒ Object
24 25 26 27 28 29 30 |
# File 'lib/rbbt/persist/tsv/adapter.rb', line 24 def write(*args) begin super(*args) @writable = true rescue NoMethodError end end |
#write? ⇒ Boolean
16 17 18 |
# File 'lib/rbbt/persist/tsv/adapter.rb', line 16 def write? @writable end |
#write_and_close ⇒ Object
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/rbbt/persist/tsv/adapter.rb', line 94 def write_and_close if write? begin return yield ensure close unless @locked end end lock do write(true) if closed? || ! write? res = begin yield ensure close end res end end |
#write_and_read ⇒ Object
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/rbbt/persist/tsv/adapter.rb', line 75 def write_and_read if write? begin return yield ensure read end end lock do write(true) if closed? || !write? begin yield ensure read end end end |
#write_lock ⇒ Object
173 174 175 176 177 178 179 180 181 182 183 184 185 186 |
# File 'lib/rbbt/persist/tsv/adapter.rb', line 173 def write_lock write if closed? if write? return yield end lock do close write true begin yield end end end |