From 72c613a1921ac7af617f6fb52dfc6ed664da2d79 Mon Sep 17 00:00:00 2001 From: Andrew Svidersky Date: Mon, 29 Jan 2018 19:38:42 +0400 Subject: [PATCH] Change action_item option to priority --- lib/active_admin/resource/action_items.rb | 10 ++++++---- spec/unit/resource/action_items_spec.rb | 9 ++++++--- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/lib/active_admin/resource/action_items.rb b/lib/active_admin/resource/action_items.rb index 17563838b45..17a8150cbab 100644 --- a/lib/active_admin/resource/action_items.rb +++ b/lib/active_admin/resource/action_items.rb @@ -24,10 +24,8 @@ def action_items # this action item on. # :except: A single or array of controller actions not to # display this action item on. - # :first: Place action item to the beginning of action_items array. def add_action_item(name, options = {}, &block) - method_name = options.delete(:first) ? :unshift : :<< - action_items.public_send method_name, ActiveAdmin::ActionItem.new(name, options, &block) + self.action_items << ActiveAdmin::ActionItem.new(name, options, &block) end def remove_action_item(name) @@ -40,7 +38,7 @@ def remove_action_item(name) # # @return [Array] Array of ActionItems for the controller actions def action_items_for(action, render_context = nil) - action_items.select{ |item| item.display_on? action, render_context } + action_items.select { |item| item.display_on? action, render_context }.sort_by(&:priority) end # Clears all the existing action items for this resource @@ -112,6 +110,10 @@ def initialize(name, options = {}, &block) def html_class "action_item #{@options[:class]}".rstrip end + + def priority + @options[:priority] || 10 + end end end diff --git a/spec/unit/resource/action_items_spec.rb b/spec/unit/resource/action_items_spec.rb index 68c63fe4de1..45b1fa8a70d 100644 --- a/spec/unit/resource/action_items_spec.rb +++ b/spec/unit/resource/action_items_spec.rb @@ -32,11 +32,14 @@ expect(resource.action_items.first.html_class).to eq("action_item test") end - it 'should be first when specified' do - resource.add_action_item :first_item, first: true do + it 'should be ordered by priority' do + resource.add_action_item :first, priority: 0 do # Empty ... end - expect(resource.action_items.first.name).to eq :first_item + resource.add_action_item :second, priority: 1 do + # Empty ... + end + expect(resource.action_items_for(:index).collect(&:name)).to eq [:first, :second, :empty] end end