Sha256: b44c9b9cf39114828aa7ed0255b1c3887bbdb45dfe72346f0cbf541fb0b14145

Contents?: true

Size: 823 Bytes

Versions: 1

Compression:

Stored size: 823 Bytes

Contents

module Putter
  module Watcher
    extend MethodCreator

    @registry = {}

    def self.watch(obj, options={})
      data = WatcherData.new(options, obj)
      @registry[obj.singleton_class] = data

      class << obj
        prepend InstanceFollower
        prepend Putter::Watcher.class_proxy(self)
      end
    end

    def self.registry
      @registry
    end

    def self.label_for(klass)
      @registry[klass].label
    end

    def self.methods_for(klass)
      @registry[klass].proxy_methods
    end

    def self.class_proxy(klass)
      proxy = MethodProxy.new

      Putter::Watcher.methods_for(klass).each do |method|
        data = ProxyMethodData.new(label: Putter::Watcher.label_for(klass), method: method)
        add_putter_class_method_to_proxy(proxy, data)
      end

      proxy
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
putter-0.4.1 lib/putter/watcher.rb