Module: LightIO::Monkey
- Defined in:
- lib/lightio/monkey.rb
Defined Under Namespace
Classes: PatchError
Constant Summary collapse
- IO_PATCH_CONSTANTS =
%w{IO File Socket Socket::Ifaddr TCPServer TCPSocket BasicSocket Addrinfo IPSocket UDPSocket UNIXSocket UNIXServer OpenSSL::SSL::SSLSocket}.freeze
- THREAD_PATCH_CONSTANTS =
%w{Thread ThreadGroup Queue SizedQueue ConditionVariable Mutex ThreadsWait}.freeze
Class Method Summary collapse
- .patch_all! ⇒ Object
- .patch_io! ⇒ Object
- .patch_kernel! ⇒ Object
- .patch_thread! ⇒ Object
- .patched?(obj) ⇒ Boolean
- .unpatch_all! ⇒ Object
- .unpatch_io! ⇒ Object
- .unpatch_kernel! ⇒ Object
- .unpatch_thread! ⇒ Object
Class Method Details
.patch_all! ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/lightio/monkey.rb', line 12 def patch_all! # Fix https://github.com/socketry/lightio/issues/7 begin require 'ffi' rescue LoadError nil end patch_thread! patch_io! patch_kernel! nil end |
.patch_io! ⇒ Object
51 52 53 54 55 56 |
# File 'lib/lightio/monkey.rb', line 51 def patch_io! require 'socket' IO_PATCH_CONSTANTS.each {|klass_name| patch!(klass_name)} patch_method!(Process, :spawn, LightIO.method(:spawn).to_proc) nil end |
.patch_kernel! ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/lightio/monkey.rb', line 65 def patch_kernel! patch_kernel_method!(:sleep, LightIO.method(:sleep)) patch_kernel_method!(:select, LightIO::Library::IO.method(:select)) patch_kernel_method!(:open, LightIO::Library::File.method(:open).to_proc) patch_kernel_method!(:spawn, LightIO.method(:spawn).to_proc) patch_kernel_method!(:`, LightIO.method(:`).to_proc) patch_kernel_method!(:system, LightIO.method(:system).to_proc) %w{gets readline readlines}.each do |method| patch_kernel_method!(method.to_sym, LightIO.method(method.to_sym).to_proc) end nil end |
.patch_thread! ⇒ Object
37 38 39 40 41 42 |
# File 'lib/lightio/monkey.rb', line 37 def patch_thread! require 'thread' THREAD_PATCH_CONSTANTS.each {|klass_name| patch!(klass_name)} patch_method!(Timeout, :timeout, LightIO::Timeout.method(:timeout)) nil end |
.patched?(obj) ⇒ Boolean
33 34 35 |
# File 'lib/lightio/monkey.rb', line 33 def patched?(obj) patched.key?(obj) && !patched[obj]&.empty? end |
.unpatch_all! ⇒ Object
26 27 28 29 30 31 |
# File 'lib/lightio/monkey.rb', line 26 def unpatch_all! unpatch_thread! unpatch_io! unpatch_kernel! nil end |
.unpatch_io! ⇒ Object
58 59 60 61 62 63 |
# File 'lib/lightio/monkey.rb', line 58 def unpatch_io! require 'socket' IO_PATCH_CONSTANTS.each {|klass_name| unpatch!(klass_name)} unpatch_method!(Process, :spawn) nil end |
.unpatch_kernel! ⇒ Object
78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/lightio/monkey.rb', line 78 def unpatch_kernel! unpatch_kernel_method!(:sleep) unpatch_kernel_method!(:select) unpatch_kernel_method!(:open) unpatch_kernel_method!(:spawn) unpatch_kernel_method!(:`) unpatch_kernel_method!(:system) %w{gets readline readlines}.each do |method| unpatch_kernel_method!(method.to_sym, LightIO.method(method.to_sym).to_proc) end nil end |
.unpatch_thread! ⇒ Object
44 45 46 47 48 49 |
# File 'lib/lightio/monkey.rb', line 44 def unpatch_thread! require 'thread' THREAD_PATCH_CONSTANTS.each {|klass_name| unpatch!(klass_name)} unpatch_method!(Timeout, :timeout) nil end |