Froze rails gems
[depot.git] / vendor / rails / activeresource / test / setter_trap.rb
diff --git a/vendor/rails/activeresource/test/setter_trap.rb b/vendor/rails/activeresource/test/setter_trap.rb
new file mode 100644 (file)
index 0000000..9a899b0
--- /dev/null
@@ -0,0 +1,27 @@
+class SetterTrap < ActiveSupport::BasicObject
+  class << self
+    def rollback_sets(obj)
+      returning yield(setter_trap = new(obj)) do
+        setter_trap.rollback_sets
+      end
+    end
+  end
+
+  def initialize(obj)
+    @cache = {}
+    @obj = obj
+  end
+
+  def respond_to?(method)
+    @obj.respond_to?(method)
+  end
+
+  def method_missing(method, *args, &proc)
+    @cache[method] ||= @obj.send($`) if method.to_s =~ /=$/
+    @obj.send method, *args, &proc
+  end
+
+  def rollback_sets
+    @cache.each { |k, v| @obj.send k, v }
+  end
+end