Skip to content

Commit

Permalink
Fixing a memory leak with set_observer
Browse files Browse the repository at this point in the history
  • Loading branch information
PlasticLizard committed Jan 14, 2011
1 parent 854b74a commit bc5afc4
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 35 deletions.
24 changes: 0 additions & 24 deletions Gemfile.lock

This file was deleted.

29 changes: 19 additions & 10 deletions lib/observables/base.rb
Expand Up @@ -13,7 +13,8 @@ def notifier
end

def subscribe(pattern=nil,&block)
notifier.subscribe(pattern,&block)
callback = block || self
notifier.subscribe(pattern,callback)
end

def unsubscribe(subscriber)
Expand All @@ -31,12 +32,20 @@ def set_observer(*args,&block)
clear_observer
opts = args.extract_options!
@_observer_owner = args.pop
@_observer_owner_callback_method = opts[:callback_method] || :child_changed
@_observer_owner_block = block

pattern = opts[:pattern] || /.*/
callback_method = opts[:callback_method] || :child_changed
@_owner_subscription = subscribe(pattern) do |*args|
block ? block.call(self,*args) :
(@_observer_owner.send(callback_method,self,*args) if @_observer_owner && @_observer_owner.respond_to?(callback_method))
end
#callback_method = opts[:callback_method] || :child_changed
@_owner_subscription = subscribe(pattern)
end

def call(*args)
block = @_observer_owner_block
callback_method = @_observer_owner_callback_method

block ? block.call(self,*args) :
(@_observer_owner.send(callback_method,self,*args) if @_observer_owner && @_observer_owner.respond_to?(callback_method))
end

def clear_observer
Expand Down Expand Up @@ -85,10 +94,10 @@ def override_mutators(change_groups)
class_eval <<-EOS
def #{method}(*args,&block)
changes = changes_for(:#{change_type},:#{method},*args,&block)
changing(:#{change_type},:trigger=>:#{method}, :changes=>changes){super}
end
EOS
end
changing(:#{change_type},:trigger=>:#{method}, :changes=>changes){super}
end
EOS
end
end
end
end
Expand Down
2 changes: 1 addition & 1 deletion lib/observables/version.rb
@@ -1,4 +1,4 @@
# encoding: UTF-8
module Observables
Version = '0.1.2'
Version = '0.1.3'
end

0 comments on commit bc5afc4

Please sign in to comment.