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
|
# File 'lib/immunio/plugins/io.rb', line 26
def self.inject(mod, name, methods)
mod.class_eval <<-EOF
def self.extended(base)
#{methods.inspect}.each do |method|
Immunio::Utils.alias_method_chain base.singleton_class, method, :immunio
end
end
def self.included(base)
#{methods.inspect}.each do |method|
Immunio::Utils.alias_method_chain base, method, :immunio
end
end
EOF
Immunio.logger.debug { "IO: successfully chained #{name} #{methods}" }
methods.each do |method|
mod.class_eval <<-EOF
def #{method}_with_immunio(*args, &block) # def read_with_immunio(*args, &block)
if Immunio::IOHooks.paused?
#{method}_without_immunio(*args, &block)
else
Request.time "plugin", "IO::#{method}" do #
strict_context, loose_context, stack = Immunio::Context.context()
Immunio.run_hook! "io", "file_io", # Immunio.run_hook! "io", "open",
method: "#{name}#{method}", # open_method: "IO.read",
parameters: args, # parameters: args
stack: stack, #
context_key: loose_context, #
cwd: Dir.pwd
Request.pause "plugin", "IO::#{method}" do #
#{method}_without_immunio(*args, &block) # read_without_immunio(*args, &block)
end
end
end
end # end
EOF
Immunio.logger.debug { "IO: successfully created hook for #{name} #{method}" }
end
end
|