Class: Object
- Inherits:
- BasicObject
- Defined in:
- lib/rshade/core_extensions/object/reveal.rb
Instance Method Summary collapse
-
#reveal(method_name = nil, **opts, &block) ⇒ Object
rubocop:disable Metrics/MethodLength.
Instance Method Details
#reveal(method_name = nil, **opts, &block) ⇒ Object
rubocop:disable Metrics/MethodLength
5 6 7 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 36 37 38 |
# File 'lib/rshade/core_extensions/object/reveal.rb', line 5 def reveal(method_name = nil, **opts, &block) if method_name @__cache_rshade_reveal ||= {} config = opts.fetch(:config, ::RShade::Config::Registry.instance.default_trace_config) @__cache_rshade_reveal[method_name] = config instance_eval do def method_added(name) super return unless @__cache_rshade_reveal[name] if @__reveal_rewrite @__reveal_rewrite = false return end @__reveal_rewrite = true config = @__cache_rshade_reveal[name] origin_method = instance_method(name) define_method(name) do |*args, &fn| val = nil trace = ::RShade::Trace.reveal(config: config) do val = origin_method.bind(self).call(*args, &fn) end trace.show val end end end else trace = ::RShade::Trace.reveal do block.call if block_given? end trace.show end end |