Browse files

Add method punctuation handling to #synchronize

  • Loading branch information...
1 parent 3eb6824 commit 9dc4f6611043d032e576d93430cd29efc8864bc4 @nicksieger nicksieger committed with nicksieger Apr 19, 2008
View
8 activesupport/lib/active_support/core_ext/module/synchronization.rb
@@ -19,13 +19,15 @@ def synchronize(*methods)
end
methods.each do |method|
- if instance_methods.include?("#{method}_without_synchronization")
+ aliased_method, punctuation = method.to_s.sub(/([?!=])$/, ''), $1
+
+ if instance_methods.include?("#{aliased_method}_without_synchronization#{punctuation}")
raise ArgumentError, "#{method} is already synchronized. Double synchronization is not currently supported."
end
module_eval(<<-EOS, __FILE__, __LINE__)
- def #{method}_with_synchronization(*args, &block)
+ def #{aliased_method}_with_synchronization#{punctuation}(*args, &block)
#{with}.synchronize do
- #{method}_without_synchronization(*args,&block)
+ #{aliased_method}_without_synchronization#{punctuation}(*args,&block)
end
end
EOS
View
14 activesupport/test/core_ext/module/synchronization_test.rb
@@ -54,4 +54,18 @@ def dummy.sync_count; @sync_count; end
@instance.to_s
assert_equal 2, dummy.sync_count
end
+
+ def test_can_synchronize_method_with_punctuation
+ @target.module_eval do
+ def dangerous?
+ @dangerous
+ end
+ def dangerous!
+ @dangerous = true
+ end
+ end
+ @target.synchronize :dangerous?, :dangerous!, :with => :mutex
+ @instance.dangerous!
+ assert @instance.dangerous?
+ end
end

0 comments on commit 9dc4f66

Please sign in to comment.