Sha256: 17c467799b8905b4707a1d669fac641a9679e8260061564e4ded3a2c94a2b201

Contents?: true

Size: 949 Bytes

Versions: 1

Compression:

Stored size: 949 Bytes

Contents

require_relative 'state_inspector'
require_relative 'reporter'

module StateInspector
  module Snoop
    def Snoop.extended(base)
      base.include ClassMethods
    end

    module ClassMethods
      def state_inspector
        StateInspector.new(self)
      end

      def tell_si *args, &block
        if informant?
          key = self.respond_to?(:class_eval) ? self : self.class
          key = Reporter.has_key?(key) ? key : self
          Reporter[key].update(self, *args, &block)
        end
      end

      def toggle_informant
        state_inspector.snoop_setters(
          *(self.respond_to?(:class_eval) ? self : self.class).
          instance_methods.grep(/=\z/) - Object.methods
        ) unless @state_inspector || self.class.instance_variable_get(:@state_inspector)

        @informant = !@informant
      end

      def informant?
        @informant || self.class.instance_variable_get(:@informant)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
state_inspector-1.0.3 lib/state_inspector/snoop.rb