Sha256: e765a685638d9752058e48fdfc1987f9b9f237ac09e8434874e7a2ce76112792

Contents?: true

Size: 827 Bytes

Versions: 1

Compression:

Stored size: 827 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.0 lib/putter/watcher.rb