Module: XDo::Drive
- Defined in:
- lib/xdo/drive.rb
Overview
Some methods to interact with disk drives. The value of the drive parameter of many methods can be either a mount point like /media/my_cdrom, a device file like scd0 or the default name “cdrom” for the default drive.
If you don’t pass in a drive name, the return value of #default will be used.
Class Method Summary collapse
-
.close(drive = default) ⇒ Object
Closes a drive.
-
.default ⇒ Object
Returns the mount point of the default drive.
-
.eject(drive = default) ⇒ Object
Opens a drive.
-
.lock(drive = default) ⇒ Object
Locks a drive, so that it can’t be opened by using the eject button or the
ejectcommand. -
.release(drive = default) ⇒ Object
Unlocks a drive, so that it can be opened by neither the eject button nor the
ejectcommand.
Class Method Details
.close(drive = default) ⇒ Object
Closes a drive.
Parameters
- drive
-
(
default()) The drive to close.
Return value
Undefined.
Raises
- XError
-
ejectfailed.
Example
XDo::Drive.eject("scd0")
XDo::Drive.close
XDo::Drive.eject("/dev/my_cdrom")
XDo::Drive.close("scd0") #A mount point doesn't make sense here
52 53 54 55 56 |
# File 'lib/xdo/drive.rb', line 52 def close(drive = default) err = "" Open3.popen3("eject -t #{drive}"){|stdin, stdout, stderr| err << stderr.read} raise(XDo::XError, err) unless err.empty? end |
.default ⇒ Object
Returns the mount point of the default drive. You can use it as a value for a drive parameter.
Return value
The default drive’s name. Usually "cdrom".
Raises
- XError
-
ejectfailed.
Example
p XDo::Drive.default #=> "cdrom"
XDo::Drive.eject(XDo::Drive.default)
67 68 69 70 71 72 73 |
# File 'lib/xdo/drive.rb', line 67 def default err = "" out = "" Open3.popen3("#{XDo::EJECT} -d"){|stdin, stdout, stderr| out << stdout.read; err << stderr.read} raise(XDo::XError, err) unless err.empty? out.match(/`(.*)'/)[1] end |
.eject(drive = default) ⇒ Object
Opens a drive.
Parameters
- drive
-
(
default()) The drive to open.
Return value
True.
Raises
- XError
-
You’re using a laptop whose drive has to be closed manually.
- XError
-
ejectfailed.
Example
XDo::Drive.eject("scd0")
XDo::Drive.eject("/media/my_cdrom")
Remarks
This method may silently fail if the device is blocked by e.g. a CD burning program. Have a look at #release if you want to force it to open.
32 33 34 35 36 37 |
# File 'lib/xdo/drive.rb', line 32 def eject(drive = default) err = "" Open3.popen3("#{XDo::EJECT} #{drive}"){|stdin, stdout, stderr| err << stderr.read} raise(XDo::XError, err) unless err.empty? true end |
.lock(drive = default) ⇒ Object
Locks a drive, so that it can’t be opened by using the eject button or the eject command.
Parameters
- drive
-
(
default()) The drive to lock.
Return value
true.
Raises
- XError
-
ejectfailed.
Example
XDo::Drive.lock("scd0")
XDo::Drive.eject # fails
XDo::Drive.release
XDo::Drive.eject("scd0") #succeeds
Remarks
Note that the lock doesn’t get released if your process exits. You should probably register a at_exit handler to avoid confusion when your program exits with an exception.
92 93 94 95 96 97 |
# File 'lib/xdo/drive.rb', line 92 def lock(drive = default) err = "" Open3.popen3("#{XDo::EJECT} -i on #{drive}"){|stdin, stdout, stderr| err << stderr.read} raise(XDo::XError, err) unless err.empty? true end |
.release(drive = default) ⇒ Object
Unlocks a drive, so that it can be opened by neither the eject button nor the eject command.
Parameters
- drive
-
The drive to remove the lock from.
Return value
true.
Raises
- XError
-
ejectfailed.
Example
XDo::Drive.lock("scd0")
XDo::Drive.eject # fails
XDo::Drive.release
XDo::Drive.eject("scd0") #succeeds
Remarks
Use with caution. If a burning program locked the drive and you force it to open, the resulting CD-ROM is garbage.
115 116 117 118 119 120 121 |
# File 'lib/xdo/drive.rb', line 115 def release(drive = default) drive = default unless drive err = "" Open3.popen3("#{XDo::EJECT} -i off #{drive}"){|stdin, stdout, stderr| err << stderr.read} raise(XDo::XError,err) unless err.empty? true end |