This file is indexed.

/usr/lib/ruby/vendor_ruby/mechanize/prependable.rb is in ruby-mechanize 2.7.2-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# Fake implementation of prepend(), which does not support overriding
# inherited methods nor methods that are formerly overridden by
# another invocation of prepend().
#
# Here's what <Original>.prepend(<Wrapper>) does:
#
# - Create an anonymous stub module (hereinafter <Stub>) and define
#   <Stub>#<method> that calls #<method>_without_<Wrapper> for each
#   instance method of <Wrapper>.
#
# - Rename <Original>#<method> to #<method>_without_<Wrapper> for each
#   instance method of <Wrapper>.
#
# - Include <Wrapper> and <Stub> into <Original> in that order.
#
# This way, a call of <Original>#<method> is dispatched to
# <Wrapper><method>, which may call super which is dispatched to
# <Stub>#<method>, which finally calls
# <Original>#<method>_without_<Wrapper> which is used to be called
# <Original>#<method>.
#
# Usage:
#
#     class Mechanize
#       # module with methods that overrides those of X
#       module Y
#       end
#
#       unless X.respond_to?(:prepend, true)
#         require 'mechanize/prependable'
#         X.extend(Prependable)
#       end
#
#       class X
#         prepend Y
#       end
#     end
module Mechanize::Prependable
  def prepend(mod)
    stub = Module.new

    mod_id = (mod.name || 'Module__%d' % mod.object_id).gsub(/::/, '__')

    mod.instance_methods.each { |name|
      method_defined?(name) or next

      original = instance_method(name)
      if original.owner != self
        warn "%s cannot override an inherited method: %s(%s)#%s" % [
          __method__, self, original.owner, name
        ]
        next
      end

      name = name.to_s
      name_without = name.sub(/(?=[?!=]?\z)/) { '_without_%s' % mod_id }

      arity = original.arity
      arglist = (
        if arity >= 0
          (1..arity).map { |i| 'x%d' % i }
        else
          (1..(-arity - 1)).map { |i| 'x%d' % i } << '*a'
        end << '&b'
      ).join(', ')

      if name.end_with?('=')
        stub.module_eval %{
          def #{name}(#{arglist})
            __send__(:#{name_without}, #{arglist})
          end
        }
      else
        stub.module_eval %{
          def #{name}(#{arglist})
            #{name_without}(#{arglist})
          end
        }
      end
      module_eval {
        alias_method name_without, name
        remove_method name
      }
    }

    include(mod, stub)
  end
  private :prepend
end