class ActiveScaffold::DataStructures::ActionLink
Attributes
the action-path for this link. what page to request? this is required!
nested action_links are referencing a column
the controller for this action link. if nil, the current controller should be assumed.
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
if the action uses a DHTML based (i.e. 2-phase) confirmation
a block for dynamic_parameters
Internal use: generated eid for this action_link
html options for the link
image to use {:name => ‘arrow.png’, :size => ‘16x16’}
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 :bottom :replace (for updating the entire table) false (no attempt at positioning)
for :type => :member, supported values are:
:before :replace :after false (no attempt at positioning)
what method to call on the controller to see if this action_link should be visible 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).
what type of link this is. currently supported values are :collection and :member.
Public Class Methods
provides a quick way to set any property of the object from a hash
# File lib/active_scaffold/data_structures/action_link.rb, line 4 def initialize(action, options = {}) # set defaults self.action = action self.label = action self.confirm = false self.type = :collection self.inline = true self.method = :get self.crud_type = :delete if [:destroy].include?(action.try(:to_sym)) self.crud_type = :create if [:create, :new].include?(action.try(:to_sym)) self.crud_type = :update if [:edit, :update].include?(action.try(:to_sym)) self.crud_type ||= :read self.parameters = {} self.html_options = {} self.column = nil self.image = nil self.dynamic_parameters = nil # apply quick properties options.each_pair do |k, v| setter = "#{k}=" self.send(setter, v) if self.respond_to? setter end end
Public Instance Methods
# File lib/active_scaffold/data_structures/action_link.rb, line 67 def confirm(label = '') @confirm.is_a?(String) ? @confirm : as_(@confirm, :label => label) end
if the action requires confirmation
# File lib/active_scaffold/data_structures/action_link.rb, line 63 def confirm=(value) @dhtml_confirm = nil if value @confirm = value end
# File lib/active_scaffold/data_structures/action_link.rb, line 70 def confirm? !!@confirm end
# File lib/active_scaffold/data_structures/action_link.rb, line 35 def controller @controller = @controller.call if @controller.is_a?(Proc) @controller end
# File lib/active_scaffold/data_structures/action_link.rb, line 76 def dhtml_confirm=(value) @confirm = nil if value @dhtml_confirm = value end
# File lib/active_scaffold/data_structures/action_link.rb, line 80 def dhtml_confirm? !!@dhtml_confirm end
an “inline” link is inserted into the existing page exclusive with popup? and page?
# File lib/active_scaffold/data_structures/action_link.rb, line 104 def inline=(val) @inline = (val == true) self.popup = self.page = false if @inline end
# File lib/active_scaffold/data_structures/action_link.rb, line 108 def inline?; @inline end
# File lib/active_scaffold/data_structures/action_link.rb, line 55 def label @label.is_a?(Symbol) ? as_(@label) : @label end
a “page” link displays by reloading the current page exclusive with inline? and popup?
# File lib/active_scaffold/data_structures/action_link.rb, line 126 def page=(val) @page = (val == true) if @page self.inline = self.popup = false # when :method is defined, ActionView adds an onclick to use a form ... # so it's best to just empty out :method whenever possible. # we only ever need to know @method = :get for things that default to POST. # the only things that default to POST are forms and ajax calls. # when @page = true, we don't use ajax. self.method = nil if method == :get end end
# File lib/active_scaffold/data_structures/action_link.rb, line 139 def page?; @page end
a “popup” link displays in a separate (browser?) window. this will eventually take arguments. exclusive with inline? and page?
# File lib/active_scaffold/data_structures/action_link.rb, line 112 def popup=(val) @popup = (val == true) if @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 end
# File lib/active_scaffold/data_structures/action_link.rb, line 122 def popup?; @popup end
# File lib/active_scaffold/data_structures/action_link.rb, line 153 def position return @position unless @position.nil? or @position == true return :replace if self.type == :member return :top if self.type == :collection raise "what should the default position be for #{self.type}?" end
# File lib/active_scaffold/data_structures/action_link.rb, line 87 def security_method @security_method || "#{self.action}_authorized?" end
# File lib/active_scaffold/data_structures/action_link.rb, line 91 def security_method_set? !!@security_method end
# File lib/active_scaffold/data_structures/action_link.rb, line 40 def static_controller? !@controller.is_a?(Proc) end