~michaelforrest/use-case-mapper/trunk

« back to all changes in this revision

Viewing changes to vendor/rails/activeresource/test/setter_trap.rb

  • Committer: Michael Forrest
  • Date: 2010-10-15 16:28:50 UTC
  • Revision ID: michael.forrest@canonical.com-20101015162850-tj2vchanv0kr0dun
refrozeĀ gems

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
class SetterTrap < ActiveSupport::BasicObject
 
2
  class << self
 
3
    def rollback_sets(obj)
 
4
      trapped = new(obj)
 
5
      yield(trapped).tap { trapped.rollback_sets }
 
6
    end
 
7
  end
 
8
 
 
9
  def initialize(obj)
 
10
    @cache = {}
 
11
    @obj = obj
 
12
  end
 
13
 
 
14
  def respond_to?(method)
 
15
    @obj.respond_to?(method)
 
16
  end
 
17
 
 
18
  def method_missing(method, *args, &proc)
 
19
    @cache[method] ||= @obj.send($`) if method.to_s =~ /=$/
 
20
    @obj.send method, *args, &proc
 
21
  end
 
22
 
 
23
  def rollback_sets
 
24
    @cache.each { |k, v| @obj.send k, v }
 
25
  end
 
26
end