OSDN Git Service

Add current_action? helper
authorRobert Speicher <rspeicher@gmail.com>
Wed, 26 Sep 2012 19:06:07 +0000 (15:06 -0400)
committerRobert Speicher <rspeicher@gmail.com>
Wed, 26 Sep 2012 20:32:26 +0000 (16:32 -0400)
app/helpers/application_helper.rb
spec/helpers/application_helper_spec.rb

index f874851..185e7d8 100644 (file)
@@ -1,4 +1,5 @@
 require 'digest/md5'
+
 module ApplicationHelper
 
   # Check if a particular controller is the current one
@@ -15,6 +16,20 @@ module ApplicationHelper
     args.any? { |v| v.to_s.downcase == controller.controller_name }
   end
 
+  # Check if a partcular action is the current one
+  #
+  # args - One or more action names to check
+  #
+  # Examples
+  #
+  #   # On Projects#new
+  #   current_action?(:new)           # => true
+  #   current_action?(:create)        # => false
+  #   current_action?(:new, :create)  # => true
+  def current_action?(*args)
+    args.any? { |v| v.to_s.downcase == action_name }
+  end
+
   def gravatar_icon(user_email = '', size = 40)
     if Gitlab.config.disable_gravatar? || user_email.blank?
       'no_avatar.png'
index fb711dd..a94d550 100644 (file)
@@ -20,6 +20,25 @@ describe ApplicationHelper do
     end
   end
 
+  describe 'current_action?' do
+    before do
+      stub!(:action_name).and_return('foo')
+    end
+
+    it "returns true when action matches argument" do
+      current_action?(:foo).should be_true
+    end
+
+    it "returns false when action does not match argument" do
+      current_action?(:bar).should_not be_true
+    end
+
+    it "should take any number of arguments" do
+      current_action?(:baz, :bar).should_not be_true
+      current_action?(:baz, :bar, :foo).should be_true
+    end
+  end
+
   describe "gravatar_icon" do
     let(:user_email) { 'user@email.com' }