class ActiveScaffold::DataStructures::ActionLink
Constants
- NO_OPTIONS
Attributes
the action-path for this link. what page to request? this is required!
nested action_links are referencing a column
if the action requires confirmation
the controller for this action link. if nil, the current controller should be assumed.
for links in singular associations, copied from column.actions_for_association_links, excluding actions not available in association’s controller
the crud type of the (eventual?) action. different than :method, because this crud action may not be imminent. this is used to determine record-level authorization (e.g. record.authorized_for?(crud_type
: link.crud_type). options are :create, :read, :update, and :delete
a block for dynamic_parameters
html options for the link
what method to call on the controller to see if this action_link should be visible if method return true, link won’t be displayed
image to use {name: ‘arrow.png’, size: ‘16x16’}
don’t close the panel when another action link is open
what string to use to represent this action
the RESTful method
a hash of request parameters
where the result of this action should insert in the display. for type: :collection, supported values are:
:top :replace (to hide the entire table) :popup (popup with JS library) false (no attempt at positioning)
for type: :member, supported values are:
:before :replace (to hide the record row) :after :table (to hide the entire table) :popup (popup with JS library) false (no attempt at positioning)
if the action requires prompting a value, only for inline links
if the prompt is required, empty value or cancel will prevent running the action
enable it to refresh the parent row when the view is closed
what method to call on the controller to see if this action_link should be visible if method return false, link will be disabled note that this is only the UI part of the security. to prevent URL hax0rz, you also need security on requests (e.g. don’t execute update method unless authorized).
if active class is added to link when current request matches link enabled automatically for links to index with parameters or dynamic parameters disable when is not needed so current request match check is skipped
what type of link this is. currently supported values are :collection and :member.
the weight for this link in the action links collection, it will be used to sort the collection
Public Class Methods
Source
# File lib/active_scaffold/data_structures/action_link.rb, line 6 def initialize(action, options = {}) # set defaults @action = action @label = action @confirm = false @type = :collection @method = :get @crud_type = case action&.to_sym when :destroy then :delete when :create, :new then :create when :update, :edit then :update else :read end @column = nil @image = nil @controller = nil @parameters = nil @dynamic_parameters = nil @html_options = nil @weight = 0 self.inline = true # apply quick properties options.each_pair do |k, v| setter = "#{k}=" send(setter, v) if respond_to? setter end self.toggle = self.action&.to_sym == :index && !position && (parameters.present? || dynamic_parameters) unless options.include? :toggle end
provides a quick way to set any property of the object from a hash
Public Instance Methods
Source
# File lib/active_scaffold/data_structures/action_link.rb, line 100 def confirm(label = '') return @confirm if !confirm? || @confirm.is_a?(String) ActiveScaffold::Registry.cache(:translations, @confirm) { as_(@confirm) } % {label: label} end
Source
# File lib/active_scaffold/data_structures/action_link.rb, line 106 def confirm? @confirm.present? end
Source
# File lib/active_scaffold/data_structures/action_link.rb, line 51 def controller @controller = @controller.call if @controller.is_a?(Proc) @controller end
Source
# File lib/active_scaffold/data_structures/action_link.rb, line 262 def freeze # force generating cache_key, except for column's link without action, or polymorphic associations name_to_cache if action && !column&.association&.polymorphic? super end
Source
# File lib/active_scaffold/data_structures/action_link.rb, line 223 def html_options return @html_options || NO_OPTIONS if frozen? @html_options ||= NO_OPTIONS.dup end
Source
# File lib/active_scaffold/data_structures/action_link.rb, line 37 def initialize_copy(action_link) self.parameters = parameters.clone if action_link.instance_variable_get(:@parameters) self.html_options = html_options.clone if action_link.instance_variable_get(:@html_options) end
Source
# File lib/active_scaffold/data_structures/action_link.rb, line 157 def inline=(val) @inline = (val == true) self.popup = self.page = false if @inline end
an “inline” link is inserted into the existing page exclusive with popup? and page?
Source
# File lib/active_scaffold/data_structures/action_link.rb, line 162 def inline? @inline end
Source
# File lib/active_scaffold/data_structures/action_link.rb, line 235 def keep_open? @keep_open end
Source
# File lib/active_scaffold/data_structures/action_link.rb, line 83 def label(record = nil) case @label when Symbol ActiveScaffold::Registry.cache(:translations, @label) { as_(@label) } when Proc @label.call(record) else @label end end
Source
# File lib/active_scaffold/data_structures/action_link.rb, line 249 def name_to_cache return @name_to_cache if defined? @name_to_cache [ controller || 'self', type, action, *parameters.map { |k, v| "#{k}=#{v.is_a?(Array) ? v.join(',') : v}" } ].compact.join('_').tap do |name_to_cache| @name_to_cache = name_to_cache unless frozen? end end
Source
# File lib/active_scaffold/data_structures/action_link.rb, line 245 def nested_link? @column || parameters&.dig(:named_scope) end
indicates that this a nested_link
Source
# File lib/active_scaffold/data_structures/action_link.rb, line 185 def page=(val) @page = (val == true) self.inline = self.popup = false if @page end
a “page” link displays by reloading the current page exclusive with inline? and popup?
Source
# File lib/active_scaffold/data_structures/action_link.rb, line 190 def page? @page end
Source
# File lib/active_scaffold/data_structures/action_link.rb, line 63 def parameters return @parameters || NO_OPTIONS if frozen? @parameters ||= NO_OPTIONS.dup end
Source
# File lib/active_scaffold/data_structures/action_link.rb, line 168 def popup=(val) @popup = (val == true) return unless @popup self.inline = self.page = false # the :method parameter doesn't mix with the :popup parameter # when/if we start using DHTML popups, we can bring :method back self.method = nil end
a “popup” link displays in a separate (browser?) window. this will eventually take arguments. exclusive with inline? and page?
Source
# File lib/active_scaffold/data_structures/action_link.rb, line 179 def popup? @popup end
Source
# File lib/active_scaffold/data_structures/action_link.rb, line 209 def position return @position unless @position.nil? || @position == true return :replace if type == :member return :top if type == :collection raise "what should the default position be for #{type}?" end
Source
# File lib/active_scaffold/data_structures/action_link.rb, line 113 def prompt(label = '') return @prompt if !prompt? || @prompt.is_a?(String) ActiveScaffold::Registry.cache(:translations, @prompt) { as_(@prompt) } % {label: label} end
Source
# File lib/active_scaffold/data_structures/action_link.rb, line 119 def prompt? @prompt.present? end
Source
# File lib/active_scaffold/data_structures/action_link.rb, line 126 def prompt_required? @prompt_required end
Source
# File lib/active_scaffold/data_structures/action_link.rb, line 135 def security_method @security_method || "#{action}_authorized?" end
Source
# File lib/active_scaffold/data_structures/action_link.rb, line 139 def security_method_set? @security_method.present? end
Source
# File lib/active_scaffold/data_structures/action_link.rb, line 56 def static_controller? !(@controller.is_a?(Proc) || (@controller == :polymorph)) end