Class: RFuse::FuseDelegator
Overview
This class is useful to make your filesystem implementation debuggable and testable without needing to mount an actual filesystem or inherit from Fuse
Instance Attribute Summary
Attributes inherited from Fuse
Instance Method Summary collapse
- #call_sigmethod(sigmethod) ⇒ Object
- #debug? ⇒ Boolean
- #fuse_respond_to?(fuse_method) ⇒ Boolean
-
#initialize(fuse_object, mountpoint, *options) ⇒ FuseDelegator
constructor
Create and mount a filesystem.
- #method_missing(method_name, *args, &block) ⇒ Object
- #respond_sigmethod?(sigmethod) ⇒ Boolean
- #respond_to_missing?(method, private = false) ⇒ Boolean
-
#sigusr1 ⇒ void
USR1 sig handler - toggle debugging of fuse methods.
Methods inherited from Fuse
#exit, #loop, #mounted?, #run, #trap_signals
Constructor Details
#initialize(fuse_object, mountpoint, *options) ⇒ FuseDelegator
Create and mount a filesystem
367 368 369 370 371 |
# File 'lib/rfuse.rb', line 367 def initialize(fuse_object, mountpoint, *) @fuse_delegate = fuse_object @debug = $DEBUG super(mountpoint, *) end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method_name, *args, &block) ⇒ Object
401 402 403 404 405 406 407 408 409 410 411 412 413 |
# File 'lib/rfuse.rb', line 401 def method_missing(method_name, *args, &block) return super unless FFI::Libfuse::FuseOperations.fuse_callbacks.include?(method_name) && @fuse_delegate.respond_to?(method_name) begin $stderr.puts "==> \#{ self }.#{method_name}(\#{args.inspect })" if debug? result = @fuse_delegate.send(method_name,*args,&block) $stderr.puts "<== \#{ self }.#{method_name}()" if debug? result rescue => ex $@.delete_if{|s| /^\\(__FUSE_DELEGATE__\\):/ =~ s} $stderr.puts(ex.) unless ex.respond_to?(:errno) || debug? Kernel::raise end end |
Instance Method Details
#call_sigmethod(sigmethod) ⇒ Object
415 416 417 418 419 420 |
# File 'lib/rfuse.rb', line 415 def call_sigmethod(sigmethod) warn "==> #{self}.#{sigmethod}()" if debug? dlg = @fuse_delegate.respond_to?(sigmethod) ? @fuse_delegate : self dlg.send(sigmethod) warn "<== #{self}.#{sigmethod}()" if debug? end |
#debug? ⇒ Boolean
379 380 381 |
# File 'lib/rfuse.rb', line 379 def debug? @debug end |
#fuse_respond_to?(fuse_method) ⇒ Boolean
388 389 390 391 392 393 394 395 |
# File 'lib/rfuse.rb', line 388 def fuse_respond_to?(fuse_method) return false unless @fuse_delegate.respond_to?(fuse_method) m = @fuse_delegate.method(fuse_method) m = m.super_method while m && FFI::Libfuse::Adapter.include?(m.owner) m && true end |
#respond_sigmethod?(sigmethod) ⇒ Boolean
422 423 424 |
# File 'lib/rfuse.rb', line 422 def respond_sigmethod?(sigmethod) @fuse_delegate.respond_to?(sigmethod) || respond_to?(sigmethod) end |
#respond_to_missing?(method, private = false) ⇒ Boolean
397 398 399 |
# File 'lib/rfuse.rb', line 397 def respond_to_missing?(method, private=false) FFI::Libfuse::FuseOperations.fuse_callbacks.include?(method) ? @fuse_delegate.respond_to?(method, private) : super end |
#sigusr1 ⇒ void
This method returns an undefined value.
USR1 sig handler - toggle debugging of fuse methods
375 376 377 |
# File 'lib/rfuse.rb', line 375 def sigusr1 @debug = !debug? end |