Class: Train::Extras::FileCommon
- Inherits:
-
Object
- Object
- Train::Extras::FileCommon
- Defined in:
- lib/train/extras/file_common.rb
Overview
rubocop:disable Metrics/ClassLength
Direct Known Subclasses
Constant Summary collapse
- DATA_FIELDS =
interface methods: these fields should be implemented by every backend File
%w{ exist? mode owner group uid gid content mtime size selinux_label path product_version file_version }.freeze
Instance Method Summary collapse
- #basename(suffix = nil, sep = '/') ⇒ Object
- #block_device? ⇒ Boolean
- #character_device? ⇒ Boolean
- #directory? ⇒ Boolean
-
#file? ⇒ Boolean
Additional methods for convenience.
- #grouped_into?(sth) ⇒ Boolean
-
#initialize(backend, path, follow_symlink = true) ⇒ FileCommon
constructor
A new instance of FileCommon.
- #link_path ⇒ Object
- #linked_to?(dst) ⇒ Boolean
-
#md5sum ⇒ Object
The following methods can be overwritten by a derived class if desired, to e.g.
- #mode?(sth) ⇒ Boolean
- #mounted? ⇒ Boolean
- #owned_by?(sth) ⇒ Boolean
- #pipe? ⇒ Boolean
- #sha256sum ⇒ Object
- #socket? ⇒ Boolean
- #source ⇒ Object
- #source_path ⇒ Object
- #symlink? ⇒ Boolean
- #to_json ⇒ Object
- #type ⇒ Object
- #unix_mode_mask(owner, type) ⇒ Object
- #version?(version) ⇒ Boolean
Constructor Details
#initialize(backend, path, follow_symlink = true) ⇒ FileCommon
Returns a new instance of FileCommon.
23 24 25 26 27 |
# File 'lib/train/extras/file_common.rb', line 23 def initialize(backend, path, follow_symlink = true) @backend = backend @path = path || '' @follow_symlink = follow_symlink end |
Instance Method Details
#basename(suffix = nil, sep = '/') ⇒ Object
141 142 143 144 |
# File 'lib/train/extras/file_common.rb', line 141 def basename(suffix = nil, sep = '/') fail 'Not yet supported: Suffix in file.basename' unless suffix.nil? @basename ||= detect_filename(path, sep || '/') end |
#block_device? ⇒ Boolean
66 67 68 |
# File 'lib/train/extras/file_common.rb', line 66 def block_device? type.to_s == 'block_device' end |
#character_device? ⇒ Boolean
70 71 72 |
# File 'lib/train/extras/file_common.rb', line 70 def character_device? type.to_s == 'character_device' end |
#directory? ⇒ Boolean
78 79 80 |
# File 'lib/train/extras/file_common.rb', line 78 def directory? type.to_s == 'directory' end |
#file? ⇒ Boolean
Additional methods for convenience
62 63 64 |
# File 'lib/train/extras/file_common.rb', line 62 def file? type.to_s == 'file' end |
#grouped_into?(sth) ⇒ Boolean
110 111 112 |
# File 'lib/train/extras/file_common.rb', line 110 def grouped_into?(sth) group == sth end |
#link_path ⇒ Object
118 119 120 |
# File 'lib/train/extras/file_common.rb', line 118 def link_path symlink? ? path : nil end |
#linked_to?(dst) ⇒ Boolean
114 115 116 |
# File 'lib/train/extras/file_common.rb', line 114 def linked_to?(dst) link_path == dst end |
#md5sum ⇒ Object
The following methods can be overwritten by a derived class if desired, to e.g. achieve optimizations.
44 45 46 47 48 49 50 |
# File 'lib/train/extras/file_common.rb', line 44 def md5sum res = Digest::MD5.new res.update(content) res.hexdigest rescue TypeError => _ nil end |
#mode?(sth) ⇒ Boolean
102 103 104 |
# File 'lib/train/extras/file_common.rb', line 102 def mode?(sth) mode == sth end |
#mounted? ⇒ Boolean
137 138 139 |
# File 'lib/train/extras/file_common.rb', line 137 def mounted? !mounted.nil? && !mounted.stdout.nil? && !mounted.stdout.empty? end |
#owned_by?(sth) ⇒ Boolean
106 107 108 |
# File 'lib/train/extras/file_common.rb', line 106 def owned_by?(sth) owner == sth end |
#pipe? ⇒ Boolean
98 99 100 |
# File 'lib/train/extras/file_common.rb', line 98 def pipe? type == :pipe end |
#sha256sum ⇒ Object
52 53 54 55 56 57 58 |
# File 'lib/train/extras/file_common.rb', line 52 def sha256sum res = Digest::SHA256.new res.update(content) res.hexdigest rescue TypeError => _ nil end |
#socket? ⇒ Boolean
74 75 76 |
# File 'lib/train/extras/file_common.rb', line 74 def socket? type.to_s == 'socket' end |
#source ⇒ Object
90 91 92 93 94 95 96 |
# File 'lib/train/extras/file_common.rb', line 90 def source if @follow_symlink self.class.new(@backend, @path, false) else self end end |
#source_path ⇒ Object
86 87 88 |
# File 'lib/train/extras/file_common.rb', line 86 def source_path @path end |
#symlink? ⇒ Boolean
82 83 84 |
# File 'lib/train/extras/file_common.rb', line 82 def symlink? source.type.to_s == 'symlink' end |
#to_json ⇒ Object
29 30 31 32 33 34 35 |
# File 'lib/train/extras/file_common.rb', line 29 def to_json res = Hash[DATA_FIELDS.map { |x| [x, method(x).call] }] # additional fields provided as input res['type'] = type res['follow_symlink'] = @follow_symlink res end |
#type ⇒ Object
37 38 39 |
# File 'lib/train/extras/file_common.rb', line 37 def type :unknown end |
#unix_mode_mask(owner, type) ⇒ Object
127 128 129 130 131 132 133 134 135 |
# File 'lib/train/extras/file_common.rb', line 127 def unix_mode_mask(owner, type) o = UNIX_MODE_OWNERS[owner.to_sym] return nil if o.nil? t = UNIX_MODE_TYPES[type.to_sym] return nil if t.nil? t & o end |
#version?(version) ⇒ Boolean
122 123 124 125 |
# File 'lib/train/extras/file_common.rb', line 122 def version?(version) product_version == version or file_version == version end |