Module: MongoWatchable::Watchable

Defined in:
lib/mongo_watchable/watchable.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(watchable) ⇒ Object



3
4
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
# File 'lib/mongo_watchable/watchable.rb', line 3

def self.included(watchable)
  watchable.class_eval do
    MongoWatchable.watchers.each do |watcher|
      watcher_key_prefix = watcher.name.underscore.gsub(/\//, '_')
      key :"#{watcher_key_prefix}_watcher_ids", Array
      key :"#{watcher_key_prefix}_watchers_count", Integer, :default => 0
      ensure_index :"#{watcher_key_prefix}_watchers_count"
      
      define_method :"#{watcher_key_prefix}_watchers" do
        MongoWatchable::Proxy.new(self, :"#{watcher_key_prefix}_watcher_ids", :"#{watcher_key_prefix}_watchers_count", watcher)
      end
    end
  end
  
  MongoWatchable.watchers.each do |watcher|
    watcher.class_eval do
      watchable_key_prefix = watchable.name.underscore.gsub(/\//, '_')
      key :"#{watchable_key_prefix}_watching_ids", Array
      key :"#{watchable_key_prefix}_watchings_count", Integer, :default => 0
      ensure_index :"#{watchable_key_prefix}_watchings_count"
      
      define_method :"#{watchable_key_prefix}_watchings" do
        MongoWatchable::Proxy.new(self, :"#{watchable_key_prefix}_watching_ids", :"#{watchable_key_prefix}_watchings_count", watchable)
      end
    end
  end
  MongoWatchable.register_watchable watchable
end

Instance Method Details

#watchers_proxy_for(watcher) ⇒ Object



32
33
34
35
36
37
38
39
# File 'lib/mongo_watchable/watchable.rb', line 32

def watchers_proxy_for(watcher)
  klass = watcher.class
  while klass.superclass && klass.superclass.include?(MongoWatchable::Watcher)
    klass = klass.superclass
  end
  watcher_key_prefix = klass.name.underscore.gsub(/\//, '_')
  send("#{watcher_key_prefix}_watchers")
end