diff options
author | Nick <nick@nicksieger.com> | 2008-04-19 10:18:02 -0500 |
---|---|---|
committer | Nick Sieger <nick@nicksieger.com> | 2008-08-29 14:12:09 -0500 |
commit | 9dc4f6611043d032e576d93430cd29efc8864bc4 (patch) | |
tree | 69473e5bbc8a4059a94c55ddac4eacb45180c1ca /activesupport | |
parent | 3eb68248e0c0495c4533792260c9262fcd2840af (diff) | |
download | rails-9dc4f6611043d032e576d93430cd29efc8864bc4.tar.gz rails-9dc4f6611043d032e576d93430cd29efc8864bc4.tar.bz2 rails-9dc4f6611043d032e576d93430cd29efc8864bc4.zip |
Add method punctuation handling to #synchronize
Diffstat (limited to 'activesupport')
-rw-r--r-- | activesupport/lib/active_support/core_ext/module/synchronization.rb | 8 | ||||
-rw-r--r-- | activesupport/test/core_ext/module/synchronization_test.rb | 14 |
2 files changed, 19 insertions, 3 deletions
diff --git a/activesupport/lib/active_support/core_ext/module/synchronization.rb b/activesupport/lib/active_support/core_ext/module/synchronization.rb index bf7740f851..c55a3f07ee 100644 --- a/activesupport/lib/active_support/core_ext/module/synchronization.rb +++ b/activesupport/lib/active_support/core_ext/module/synchronization.rb @@ -19,13 +19,15 @@ class Module 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 diff --git a/activesupport/test/core_ext/module/synchronization_test.rb b/activesupport/test/core_ext/module/synchronization_test.rb index 78be6b725f..fe0f3b1a3b 100644 --- a/activesupport/test/core_ext/module/synchronization_test.rb +++ b/activesupport/test/core_ext/module/synchronization_test.rb @@ -54,4 +54,18 @@ class SynchronizationTest < Test::Unit::TestCase @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
\ No newline at end of file |