Module: Kernel
- Defined in:
- lib/intercepted.rb
Overview
System module.
Instance Method Summary collapse
Instance Method Details
#intercepted(origin = nil) ⇒ Object
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 |
# File 'lib/intercepted.rb', line 8 def intercepted(origin = nil) raise 'Block is expected by intercepted()' unless block_given? Class.new(BasicObject) do define_method(:initialize) { @o = origin } define_method(:method_missing) do |mtd, *args, &block| yield(:before, mtd, args) params = @o.method(mtd).parameters reqs = params.count { |p| p[0] == :req } maybe = i[key keyreq] r = if params.any? { |p| maybe.include?(p[0]) } && args.size > reqs @o.__send__(mtd, *args[0..-2], **args.last) do |*a| block&.call(*a) end else @o.__send__(mtd, *args) do |*a| block&.call(*a) end end yield(:after, mtd, args, r) r end define_method(:respond_to?) do |mtd, include_private = false| @o.respond_to?(mtd, include_private) end end.new end |