@@ -23,32 +23,25 @@ class Stapled
2323 # Underlying `IO`s might have a different status.
2424 attr_reader :closed
2525
26- @closed = false
27-
28- WRITER_DELEGATE = %w[
29- <<
30- ] . freeze
31-
32- READER_DELEGATE = %w[
33- eof
34- eof?
35- ] . freeze
26+ WRITER_DELEGATE = IO . instance_methods . grep ( /^put|^print|write|<</ ) . freeze
27+ READER_DELEGATE = IO . instance_methods . grep ( /^get[a-z]*|read|each|eof/ ) . freeze
3628
3729 alias_method :sync_close? , :sync_close
3830 alias_method :closed? , :closed
3931
4032 # Creates a new `IO::Stapled` which reads from *reader* and writes to *writer*.
4133 def initialize ( reader , writer , sync_close : false )
34+ @closed = false
4235 @reader = reader
4336 @writer = writer
4437 @sync_close = sync_close
4538 end
4639
4740 def method_missing ( name , *args , &block )
48- if write_methods ?( name . to_s )
41+ if WRITER_DELEGATE . include ?( name )
4942 check_open
5043 @writer . send ( name , *args , &block )
51- elsif read_methods ?( name . to_s )
44+ elsif READER_DELEGATE . include ?( name )
5245 check_open
5346 @reader . send ( name , *args , &block )
5447 else
@@ -57,17 +50,7 @@ def method_missing(name, *args, &block)
5750 end
5851
5952 def respond_to_missing? ( name , include_private = false )
60- super || write_methods? ( name . to_s ) || read_methods? ( name . to_s )
61- end
62-
63- def write_methods? ( name )
64- name . include? ( "put" ) || name . include? ( "prin" ) ||
65- name . include? ( "write" ) || WRITER_DELEGATE . include? ( name )
66- end
67-
68- def read_methods? ( name )
69- name . include? ( "get" ) || name . include? ( "read" ) ||
70- name . include? ( "each" ) || READER_DELEGATE . include? ( name )
53+ WRITER_DELEGATE . include? ( name ) || READER_DELEGATE . include? ( name ) || super
7154 end
7255
7356 # Flushes `writer`.
0 commit comments