Class: File
- Defined in:
- opal/stdlib/deno/file.rb,
opal/stdlib/nodejs/file.rb,
opal/stdlib/nashorn/file.rb,
opal/stdlib/headless_browser/file.rb
Defined Under Namespace
Classes: Stat
Constant Summary collapse
- ALT_SEPARATOR =
`__path__.sep`
Instance Attribute Summary collapse
-
#path ⇒ Object
readonly
Returns the value of attribute path.
Attributes inherited from IO
Class Method Summary collapse
- .absolute_path(path, basedir = nil) ⇒ Object
- .delete(path) ⇒ Object (also: unlink)
- .directory?(path) ⇒ Boolean
- .exist?(path) ⇒ Boolean
- .file?(path) ⇒ Boolean
- .join(*paths) ⇒ Object
- .mtime(path) ⇒ Object
- .open(path, mode = 'r') ⇒ Object
- .read(path) ⇒ Object
- .readable?(path) ⇒ Boolean
- .realpath(pathname, dir_string = nil, cache = nil, &block) ⇒ Object
- .size(path) ⇒ Object
- .stat(path) ⇒ Object
- .symlink(path, new_path) ⇒ Object
- .symlink?(path) ⇒ Boolean
- .write(path, data) ⇒ Object
Instance Method Summary collapse
- #close ⇒ Object
- #flush ⇒ Object
-
#initialize(path, flags = 'r') ⇒ File
constructor
Instance Methods.
- #mtime ⇒ Object
- #sysread(bytes) ⇒ Object
- #write(string) ⇒ Object
Methods inherited from IO
binread , #initialize_before_node_io
Constructor Details
#initialize(path, flags = 'r') ⇒ File
Instance Methods
240 241 242 243 244 245 246 247 248 249 250 251 252 253 254
# File 'opal/stdlib/deno/file.rb', line 240 def initialize(path, flags = 'r') @binary_flag = flags.include?('b') # Node does not recognize this flag flags = flags.delete('b') # encoding flag is unsupported encoding_option_rx = /:(.*)/ if encoding_option_rx.match?(flags) `handle_unsupported_feature("Encoding option (:encoding) is unsupported by Node.js openSync method and will be removed.")` flags = flags.sub(encoding_option_rx, '') end @path = path fd = `executeIOAction(function(){return Deno.openSync(path, flags)})` super(fd, flags) end
Instance Attribute Details
#path ⇒ Object (readonly)
Returns the value of attribute path.
256 257 258
# File 'opal/stdlib/deno/file.rb', line 256 def path @path end
Class Method Details
.absolute_path(path, basedir = nil) ⇒ Object
234 235 236
# File 'opal/stdlib/deno/file.rb', line 234 def self.absolute_path(path, basedir = nil) raise 'File::absolute_path is currently unsupported in Deno!' end
.delete(path) ⇒ Object Also known as: unlink
125 126 127
# File 'opal/stdlib/deno/file.rb', line 125 def self.delete(path) `executeIOAction(function(){return Deno.removeSync(#{path})})` end
.directory?(path) ⇒ Boolean
Returns:
- (Boolean )
168 169 170 171 172 173 174 175 176 177 178
# File 'opal/stdlib/deno/file.rb', line 168 def self.directory?(path) return false unless exist? path result = `executeIOAction(function(){return !!Deno.lstatSync(path).isDirectory})` unless result realpath = realpath(path) if realpath != path result = `executeIOAction(function(){return !!Deno.lstatSync(realpath).isDirectory})` end end result end
.exist?(path) ⇒ Boolean
Returns:
- (Boolean )
133 134 135 136
# File 'opal/stdlib/deno/file.rb', line 133 def self.exist?(path) path = path.path if path.respond_to? :path `return executeIOAction(function(){return Deno.statSync(#{path})})` end
.file?(path) ⇒ Boolean
Returns:
- (Boolean )
180 181 182 183 184 185 186 187 188 189 190
# File 'opal/stdlib/deno/file.rb', line 180 def self.file?(path) return false unless exist? path result = `executeIOAction(function(){return !!Deno.lstatSync(path).isFile})` unless result realpath = realpath(path) if realpath != path result = `executeIOAction(function(){return !!Deno.lstatSync(realpath).isFile})` end end result end
.join(*paths) ⇒ Object
152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
# File 'opal/stdlib/deno/file.rb', line 152 def self.join(*paths) # by itself, `path.posix.join` normalizes leading // to /. # restore the leading / on UNC paths (i.e., paths starting with //). paths = paths.map(&:to_s) prefix = paths.first&.start_with?('//') ? '/' : '' path = prefix paths.each do |pth| path << if pth.end_with?('/') || pth.start_with?('/') pth else '/' + pth end end path end
.mtime(path) ⇒ Object
226 227 228
# File 'opal/stdlib/deno/file.rb', line 226 def self.mtime(path) `return executeIOAction(function(){return Deno.statSync(#{path}).mtime})` end
.open(path, mode = 'r') ⇒ Object
208 209 210 211 212 213 214 215 216 217 218 219
# File 'opal/stdlib/deno/file.rb', line 208 def self.open(path, mode = 'r') file = new(path, mode) if block_given? begin yield(file) ensure file.close end else file end end
.read(path) ⇒ Object
116 117 118
# File 'opal/stdlib/deno/file.rb', line 116 def self.read(path) `return executeIOAction(function(){return Deno.readFileSync(#{path}).toString()})` end
.readable?(path) ⇒ Boolean
Returns:
- (Boolean )
192 193 194 195 196 197 198 199 200 201 202
# File 'opal/stdlib/deno/file.rb', line 192 def self.readable?(path) return false unless exist? path %{ try { Deno.openSync(path, {read: true}).close(); return true; } catch (error) { return false; } } end
.realpath(pathname, dir_string = nil, cache = nil, &block) ⇒ Object
138 139 140 141 142 143 144 145 146 147 148 149 150
# File 'opal/stdlib/deno/file.rb', line 138 def self.realpath(pathname, dir_string = nil, cache = nil, &block) pathname = join(dir_string, pathname) if dir_string if block_given? ` Deno.realpath(#{pathname}, #{cache}, function(error, realpath){ if (error) Opal.IOError.$new(error.message) else #{block.call(`realpath`)} }) ` else `return executeIOAction(function(){return Deno.realpathSync(#{pathname}, #{cache})})` end end
.size(path) ⇒ Object
204 205 206
# File 'opal/stdlib/deno/file.rb', line 204 def self.size(path) `return executeIOAction(function(){return Deno.lstatSync(path).size})` end
.stat(path) ⇒ Object
.symlink(path, new_path) ⇒ Object
138 139 140 141
# File 'opal/stdlib/nodejs/file.rb', line 138 def self.symlink(path, new_path) `executeIOAction(function(){return __fs__.symlinkSync(#{path}, #{new_path})})` 0 end
.symlink?(path) ⇒ Boolean
Returns:
- (Boolean )
230 231 232
# File 'opal/stdlib/deno/file.rb', line 230 def self.symlink?(path) `return executeIOAction(function(){return Deno.lstatSync(#{path}).isSymLink})` end
.write(path, data) ⇒ Object
120 121 122 123
# File 'opal/stdlib/deno/file.rb', line 120 def self.write(path, data) `executeIOAction(function(){return Deno.writeFileSync(#{path}, __textEncoder__.encode(#{data}));})` data.size end
Instance Method Details
#close ⇒ Object
291 292 293 294
# File 'opal/stdlib/deno/file.rb', line 291 def close `executeIOAction(function(){return #{@fd}.close()})` super end
#flush ⇒ Object
287 288 289
# File 'opal/stdlib/deno/file.rb', line 287 def flush # not supported by deno end
#mtime ⇒ Object
296 297 298
# File 'opal/stdlib/deno/file.rb', line 296 def mtime `return executeIOAction(function(){return Deno.statSync(#{@path}).mtime})` end
#sysread(bytes) ⇒ Object
258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281
# File 'opal/stdlib/deno/file.rb', line 258 def sysread(bytes) if @eof raise EOFError, 'end of file reached' else if @binary_flag %x{ var buf = executeIOAction(function(){return Deno.readFileSync(#{@path})}) var content if (is_utf8(buf)) { content = buf.toString('utf8') } else { // coerce to utf8 content = __utf8TextDecoder__.decode(__textEncoder__.encode(buf.toString('binary'))) } } res = `content` else res = `executeIOAction(function(){return Deno.readFileSync(#{@path}).toString('utf8')})` end @eof = true @lineno = res.size res end end
#write(string) ⇒ Object
283 284 285
# File 'opal/stdlib/deno/file.rb', line 283 def write(string) `executeIOAction(function(){return #{@fd}.writeSync(__textEncoder__.encode(#{string}))})` end