Sha256: a9c30cbe31bf7d36be7105fcda31bfc18fda3522eaf26a77762d6d9bf3e4b01d

Contents?: true

Size: 1.26 KB

Versions: 37

Compression:

Stored size: 1.26 KB

Contents

module FakeFS
  # Inode class
  class FakeInode
    @freed_inodes = []
    @next_inode_num = 0

    def initialize(file_owner)
      @content = ''.encode(Encoding.default_external)
      @links = [file_owner]
      assign_inode_num
    end

    attr_accessor :content
    attr_accessor :links
    attr_accessor :inode_num

    # please see: http://iacobson.net/beware-of-ruby-class-variables/
    class << self
      attr_accessor :freed_inodes
      attr_accessor :next_inode_num

      # This method should only be used for tests
      # When called, it will reset the current inode information of the FakeFS
      def clear_inode_info_for_tests
        self.freed_inodes = []
        self.next_inode_num = 0
      end
    end

    def assign_inode_num
      if (@inode_num = self.class.freed_inodes.shift)
      else
        @inode_num = self.class.next_inode_num
        self.class.next_inode_num += 1
      end
    end

    def free_inode_num
      self.class.freed_inodes.push(@inode_num)
    end

    def link(file)
      links << file unless links.include?(file)
      file.inode = self
    end

    def unlink(file)
      links.delete(file)
    end

    def clone
      clone = super
      clone.content = content.dup
      clone.assign_inode_num
      clone
    end
  end
end

Version data entries

37 entries across 37 versions & 1 rubygems

Version Path
fakefs-2.8.0 lib/fakefs/fake/inode.rb
fakefs-2.7.1 lib/fakefs/fake/inode.rb
fakefs-2.7.0 lib/fakefs/fake/inode.rb
fakefs-2.6.0 lib/fakefs/fake/inode.rb
fakefs-2.5.0 lib/fakefs/fake/inode.rb
fakefs-2.4.0 lib/fakefs/fake/inode.rb
fakefs-2.3.0 lib/fakefs/fake/inode.rb
fakefs-2.2.0 lib/fakefs/fake/inode.rb
fakefs-2.1.0 lib/fakefs/fake/inode.rb
fakefs-2.0.0 lib/fakefs/fake/inode.rb
fakefs-1.9.0 lib/fakefs/fake/inode.rb
fakefs-1.8.0 lib/fakefs/fake/inode.rb
fakefs-1.7.0 lib/fakefs/fake/inode.rb
fakefs-1.6.0 lib/fakefs/fake/inode.rb
fakefs-1.5.1 lib/fakefs/fake/inode.rb
fakefs-1.5.0 lib/fakefs/fake/inode.rb
fakefs-1.4.1 lib/fakefs/fake/inode.rb
fakefs-1.4.0 lib/fakefs/fake/inode.rb
fakefs-1.3.2 lib/fakefs/fake/inode.rb
fakefs-1.3.1 lib/fakefs/fake/inode.rb