diff options
Diffstat (limited to 'activesupport/lib/active_support')
-rw-r--r-- | activesupport/lib/active_support/core_ext/module/synchronization.rb | 8 |
1 files changed, 5 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 |