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 |