Sha256: d27340d8826b851fafbfa1064da34d81284e364d5bdb8480f765ea8be6f2f29b
Contents?: true
Size: 1.75 KB
Versions: 24
Compression:
Stored size: 1.75 KB
Contents
if RUBY_PLATFORM =~ /java/ require 'java' end module Metasploit module Model # Re-implement methods on ruby's File that are buggy in JRuby so that the platform specific logic can be in this # module instead of everywhere these methods are used. module File if RUBY_PLATFORM =~ /java/ # On JRuby, File.realpath does not resolve symlinks, so need to drop to Java to get the real path. # # @param path [String] a path that may contain `'.'`, `'..'`, or symlinks # @return [String] canonical path # @see https://github.com/jruby/jruby/issues/538 def self.realpath(path) file = java.io.File.new(path) file.canonical_path end end class << self # Delegates to `::File` if `::File` supports the method when {Metasploit::Model::File} does not implement an # override to fix different platform incompatibilities. # # @param method_name [Symbol] name of method. # @param args [Array] arguments passed to method with name `method_name`. # @param block [Proc] block to pass after `args` to method with name `method_name`. def method_missing(method_name, *args, &block) if ::File.respond_to?(method_name) ::File.public_send(method_name, *args, &block) else super end end # Whether this module or `::File` responds to `method_name`. # # @param method_name [Symbol] name of method. # @param include_private [Boolean] whether to include private methods. # @return [Boolean] def respond_to?(method_name, include_private=false) ::File.respond_to?(method_name, include_private) || super end end end end end
Version data entries
24 entries across 24 versions & 1 rubygems