class Tori::Backend::FileSystem

Constants

ResourceError

Attributes

root[RW]

Public Class Methods

new(root) click to toggle source
# File lib/tori/backend/filesystem.rb, line 7
def initialize(root)
  @root = root
  FileUtils.mkdir_p @root.to_s
end

Public Instance Methods

copy_to(filename, tori_file, **opts) click to toggle source
# File lib/tori/backend/filesystem.rb, line 63
def copy_to(filename, tori_file, **opts)
  FileUtils.mkdir_p tori_file.path.dirname

  ::File.open(path(filename)) do |from|
    ::File.open(tori_file.path, 'w+') do |to|
      IO.copy_stream(from, to)
    end
  end
end
delete(filename) click to toggle source
# File lib/tori/backend/filesystem.rb, line 39
def delete(filename)
  ::File.unlink path(filename)
end
exist?(filename) click to toggle source
# File lib/tori/backend/filesystem.rb, line 43
def exist?(filename)
  ::File.exist? path(filename)
end
Also aliased as: exists?
exists?(filename)
Alias for: exist?
open(filename, *rest, &block) click to toggle source
# File lib/tori/backend/filesystem.rb, line 59
def open(filename, *rest, &block)
  ::File.open(path(filename), *rest, &block)
end
otherwise(backend) click to toggle source
# File lib/tori/backend/filesystem.rb, line 77
def otherwise(backend)
  Chain.new(self, backend)
end
path(filename) click to toggle source
# File lib/tori/backend/filesystem.rb, line 73
def path(filename)
  @root.join filename.to_s
end
read(filename, *args) click to toggle source
# File lib/tori/backend/filesystem.rb, line 48
def read(filename, *args)
  if args.last.kind_of?(Hash)
    opt = args.pop
  else
    opt = {}
  end
  open(filename, {mode: 'rb'}.merge(opt)) do |f|
    f.read(*args)
  end
end
write(filename, resource, opts = nil) click to toggle source
# File lib/tori/backend/filesystem.rb, line 12
def write(filename, resource, opts = nil)
  pathname = path(filename)
  FileUtils.mkdir_p pathname.dirname

  if resource.nil? && opts && opts[:body]
    resource = opts[:body]
  end

  case resource
  when String
    ::File.open(pathname, 'wb'){ |f| f.write resource }
  when Pathname
    # see also https://bugs.ruby-lang.org/issues/11199
    ::File.open(resource) { |src|
      ::File.open(pathname, 'wb'){ |dst|
        ::IO.copy_stream src, dst
      }
    }
  when NilClass
    raise ResourceError, "null resource"
  else
    ::File.open(pathname, 'wb') do |dst|
      ::IO.copy_stream resource, dst
    end
  end
end