Class: MemFs::IO
- Inherits:
-
Object
- Object
- MemFs::IO
- Extended by:
- SingleForwardable
- Includes:
- Constants
- Defined in:
- lib/memfs/io.rb
Direct Known Subclasses
Instance Attribute Summary collapse
-
#autoclose ⇒ Object
writeonly
Sets the attribute autoclose.
-
#close_on_exec ⇒ Object
writeonly
Sets the attribute close_on_exec.
Class Method Summary collapse
Instance Method Summary collapse
- #<<(object) ⇒ Object
- #advise(advice_type, _offset = 0, _len = 0) ⇒ Object
- #autoclose? ⇒ Boolean
- #binmode ⇒ Object
- #binmode? ⇒ Boolean
- #close ⇒ Object
- #close_on_exec? ⇒ Boolean
- #closed? ⇒ Boolean
- #each(sep = $/) ⇒ Object
- #each_byte ⇒ Object (also: #bytes)
- #each_char ⇒ Object (also: #chars)
- #eof? ⇒ Boolean (also: #eof)
- #external_encoding ⇒ Object
- #pos ⇒ Object
- #print(*objs) ⇒ Object
- #printf(format_string, *objs) ⇒ Object
- #puts(text) ⇒ Object
- #read(length = nil, buffer = '') ⇒ Object
- #seek(amount, whence = ::IO::SEEK_SET) ⇒ Object
- #stat ⇒ Object
- #write(string) ⇒ Object
Instance Attribute Details
#autoclose=(value) ⇒ Object (writeonly)
Sets the attribute autoclose
62 63 64 |
# File 'lib/memfs/io.rb', line 62 def autoclose=(value) @autoclose = value end |
#close_on_exec=(value) ⇒ Object (writeonly)
Sets the attribute close_on_exec
62 63 64 |
# File 'lib/memfs/io.rb', line 62 def close_on_exec=(value) @close_on_exec = value end |
Class Method Details
.read(path, *args) ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/memfs/io.rb', line 17 def self.read(path, *args) = args.last.is_a?(Hash) ? args.pop : {} = { mode: File::RDONLY, encoding: nil, open_args: nil }.merge() open_args = [:open_args] || [[:mode], encoding: [:encoding]] length, offset = args file = open(path, *open_args) file.seek(offset || 0) file.read(length) ensure file.close if file end |
.write(path, string, offset = 0, open_args = nil) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/memfs/io.rb', line 36 def self.write(path, string, offset = 0, open_args = nil) open_args ||= [File::WRONLY, encoding: nil] offset = 0 if offset.nil? unless offset.respond_to?(:to_int) fail TypeError, "no implicit conversion from #{offset.class}" end offset = offset.to_int if offset > 0 fail NotImplementedError, 'MemFs::IO.write with offset not yet supported.' end file = open(path, *open_args) file.seek(offset) file.write(string) ensure file.close if file end |
Instance Method Details
#<<(object) ⇒ Object
65 66 67 68 69 |
# File 'lib/memfs/io.rb', line 65 def <<(object) fail IOError, 'not opened for writing' unless writable? content << object.to_s end |
#advise(advice_type, _offset = 0, _len = 0) ⇒ Object
71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/memfs/io.rb', line 71 def advise(advice_type, _offset = 0, _len = 0) advice_types = [ :dontneed, :noreuse, :normal, :random, :sequential, :willneed ] unless advice_types.include?(advice_type) fail NotImplementedError, "Unsupported advice: #{advice_type.inspect}" end nil end |
#autoclose? ⇒ Boolean
86 87 88 |
# File 'lib/memfs/io.rb', line 86 def autoclose? defined?(@autoclose) ? !!@autoclose : true end |
#binmode ⇒ Object
90 91 92 93 94 |
# File 'lib/memfs/io.rb', line 90 def binmode @binmode = true @external_encoding = Encoding::ASCII_8BIT self end |
#binmode? ⇒ Boolean
96 97 98 |
# File 'lib/memfs/io.rb', line 96 def binmode? defined?(@binmode) ? @binmode : false end |
#close ⇒ Object
100 101 102 |
# File 'lib/memfs/io.rb', line 100 def close self.closed = true end |
#close_on_exec? ⇒ Boolean
108 109 110 |
# File 'lib/memfs/io.rb', line 108 def close_on_exec? defined?(@close_on_exec) ? !!@close_on_exec : true end |
#closed? ⇒ Boolean
104 105 106 |
# File 'lib/memfs/io.rb', line 104 def closed? closed end |
#each(sep = $/) ⇒ Object
125 126 127 128 129 130 |
# File 'lib/memfs/io.rb', line 125 def each(sep = $/) return to_enum(__callee__) unless block_given? fail IOError, 'not opened for reading' unless readable? content.each_line(sep) { |line| yield(line) } self end |
#each_byte ⇒ Object Also known as: bytes
132 133 134 135 136 137 |
# File 'lib/memfs/io.rb', line 132 def each_byte return to_enum(__callee__) unless block_given? fail IOError, 'not opened for reading' unless readable? content.each_byte { |byte| yield(byte) } self end |
#each_char ⇒ Object Also known as: chars
140 141 142 143 144 145 |
# File 'lib/memfs/io.rb', line 140 def each_char return to_enum(__callee__) unless block_given? fail IOError, 'not opened for reading' unless readable? content.each_char { |char| yield(char) } self end |
#eof? ⇒ Boolean Also known as: eof
112 113 114 |
# File 'lib/memfs/io.rb', line 112 def eof? pos >= content.size end |
#external_encoding ⇒ Object
117 118 119 120 121 122 123 |
# File 'lib/memfs/io.rb', line 117 def external_encoding if writable? @external_encoding else @external_encoding ||= Encoding.default_external end end |
#pos ⇒ Object
148 149 150 |
# File 'lib/memfs/io.rb', line 148 def pos entry.pos end |
#print(*objs) ⇒ Object
152 153 154 155 156 |
# File 'lib/memfs/io.rb', line 152 def print(*objs) objs << $_ if objs.empty? self << objs.join($,) << $\.to_s nil end |
#printf(format_string, *objs) ⇒ Object
158 159 160 |
# File 'lib/memfs/io.rb', line 158 def printf(format_string, *objs) print format_string % objs end |
#puts(text) ⇒ Object
162 163 164 165 166 |
# File 'lib/memfs/io.rb', line 162 def puts(text) fail IOError, 'not opened for writing' unless writable? content.puts text end |
#read(length = nil, buffer = '') ⇒ Object
168 169 170 171 172 173 174 |
# File 'lib/memfs/io.rb', line 168 def read(length = nil, buffer = '') unless entry fail(Errno::ENOENT, path) end default = length ? nil : '' content.read(length, buffer) || default end |
#seek(amount, whence = ::IO::SEEK_SET) ⇒ Object
176 177 178 179 180 181 182 183 184 185 186 187 |
# File 'lib/memfs/io.rb', line 176 def seek(amount, whence = ::IO::SEEK_SET) new_pos = case whence when ::IO::SEEK_CUR then entry.pos + amount when ::IO::SEEK_END then content.to_s.length + amount when ::IO::SEEK_SET then amount end fail Errno::EINVAL, path if new_pos.nil? || new_pos < 0 entry.pos = new_pos 0 end |
#stat ⇒ Object
189 190 191 |
# File 'lib/memfs/io.rb', line 189 def stat File.stat(path) end |
#write(string) ⇒ Object
193 194 195 196 197 |
# File 'lib/memfs/io.rb', line 193 def write(string) fail IOError, 'not opened for writing' unless writable? content.write(string.to_s) end |