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

Version Path
metasploit-model-0.27.2 lib/metasploit/model/file.rb
metasploit-model-0.27.2-java lib/metasploit/model/file.rb
metasploit-model-0.27.1 lib/metasploit/model/file.rb
metasploit-model-0.27.1-java lib/metasploit/model/file.rb
metasploit-model-0.27.0 lib/metasploit/model/file.rb
metasploit-model-0.27.0-java lib/metasploit/model/file.rb
metasploit-model-0.27.0.pre.dep.pre.railties lib/metasploit/model/file.rb
metasploit-model-0.26.1-java lib/metasploit/model/file.rb
metasploit-model-0.26.1 lib/metasploit/model/file.rb
metasploit-model-0.25.7 lib/metasploit/model/file.rb
metasploit-model-0.25.7-java lib/metasploit/model/file.rb
metasploit-model-0.25.6 lib/metasploit/model/file.rb
metasploit-model-0.25.6-java lib/metasploit/model/file.rb
metasploit-model-0.25.3 lib/metasploit/model/file.rb
metasploit-model-0.25.3-java lib/metasploit/model/file.rb
metasploit-model-0.25.2 lib/metasploit/model/file.rb
metasploit-model-0.25.2-java lib/metasploit/model/file.rb
metasploit-model-0.25.1 lib/metasploit/model/file.rb
metasploit-model-0.25.1-java lib/metasploit/model/file.rb
metasploit-model-0.25.1.pre.metasploit.pre.model.pre.search.pre.operator.pre.and.pre.operation.pre.groups-java lib/metasploit/model/file.rb