class Dry::Files::MemoryFileSystem::Node
Memory file system node (directory or file)
@since 0.1.0 @api private
File modes implementation inspired by www.calleluks.com/flags-bitmasks-and-unix-file-system-permissions-in-ruby/
Constants
- DEFAULT_DIRECTORY_MODE
Default directory mode: 0755
@since 0.1.0 @api private
- DEFAULT_FILE_MODE
Default file mode: 0644
@since 0.1.0 @api private
- MODE_BASE
@since 0.1.0 @api private
- MODE_GROUP_EXECUTE
@since 0.1.0 @api private
- MODE_GROUP_READ
@since 0.1.0 @api private
- MODE_GROUP_WRITE
@since 0.1.0 @api private
- MODE_OTHERS_EXECUTE
@since 0.1.0 @api private
- MODE_OTHERS_READ
@since 0.1.0 @api private
- MODE_OTHERS_WRITE
@since 0.1.0 @api private
- MODE_USER_EXECUTE
@since 0.1.0 @api private
- MODE_USER_READ
@since 0.1.0 @api private
- MODE_USER_WRITE
@since 0.1.0 @api private
- ROOT_PATH
@since 0.1.0 @api private
Attributes
@since 0.1.0 @api private
@since 0.1.0 @api private
Public Class Methods
Instantiate a new node. It's a directory node by default.
@param segment [String] the path segment of the node @param mode [Integer] the UNIX mode
@return [Dry::Files::MemoryFileSystem::Node] the new node
@see mode=
@since 0.1.0 @api private
# File lib/dry/files/memory_file_system/node.rb, line 113 def initialize(segment, mode = DEFAULT_DIRECTORY_MODE) @segment = segment @children = nil @content = nil self.chmod = mode end
Instantiate a root node
@return [Dry::Files::MemoryFileSystem::Node] the root node
@since 0.1.0 @api private
# File lib/dry/files/memory_file_system/node.rb, line 93 def self.root new(ROOT_PATH) end
Public Instance Methods
Set UNIX mode It accepts base 2, 8, 10, and 16 numbers
@param mode [Integer] the file mode
@since 0.1.0 @api private
# File lib/dry/files/memory_file_system/node.rb, line 230 def chmod=(mode) @mode = mode.to_s(MODE_BASE).hex end
Check if node is a directory
@return [TrueClass,FalseClass] the result of the check
@since 0.1.0 @api private
# File lib/dry/files/memory_file_system/node.rb, line 165 def directory? !file? end
Check if node is executable for user
@return [TrueClass,FalseClass] the result of the check
@since 0.1.0 @api private
# File lib/dry/files/memory_file_system/node.rb, line 240 def executable? (mode & MODE_USER_EXECUTE).positive? end
Check if node is a file
@return [TrueClass,FalseClass] the result of the check
@since 0.1.0 @api private
# File lib/dry/files/memory_file_system/node.rb, line 175 def file? !@content.nil? end
Get a node child
@param segment [String] the child path segment
@return [Dry::Files::MemoryFileSystem::Node,NilClass] the child node, if found
@since 0.1.0 @api private
# File lib/dry/files/memory_file_system/node.rb, line 129 def get(segment) @children&.fetch(segment, nil) end
Read file contents
@return [String] the file contents
@raise [Dry::Files::NotMemoryFileError] if node isn't a file
@since 0.1.0 @api private
# File lib/dry/files/memory_file_system/node.rb, line 187 def read raise NotMemoryFileError, segment unless file? @content.rewind @content.read end
Read file content lines
@return [Array<String>] the file content lines
@raise [Dry::Files::NotMemoryFileError] if node isn't a file
@since 0.1.0 @api private
# File lib/dry/files/memory_file_system/node.rb, line 202 def readlines raise NotMemoryFileError, segment unless file? @content.rewind @content.readlines end
Set a node child
@param segment [String] the child path segment
@since 0.1.0 @api private
# File lib/dry/files/memory_file_system/node.rb, line 139 def set(segment) @children ||= {} @children[segment] ||= self.class.new(segment) end
Unset a node child
@param segment [String] the child path segment
@raise [Dry::Files::UnknownMemoryNodeError] if the child node cannot be found
@since 0.1.0 @api private
# File lib/dry/files/memory_file_system/node.rb, line 152 def unset(segment) @children ||= {} raise UnknownMemoryNodeError, segment unless @children.key?(segment) @children.delete(segment) end
Write file contents IMPORTANT: This operation turns a node into a file
@param content [String, Array<String>] the file content
@raise [Dry::Files::NotMemoryFileError] if node isn't a file
@since 0.1.0 @api private
# File lib/dry/files/memory_file_system/node.rb, line 218 def write(*content) @content = StringIO.new(content.join($RS)) @mode = DEFAULT_FILE_MODE end