module <%= model_controller_class_name %>Helper
#
# Use this to wrap view elements that the user can't access.
# !! Note: this is an *interface*, not *security* feature !!
# You need to do all access control at the controller level.
#
# Example:
# <%%= if_authorized?(:index, User) do link_to('List all users', users_path) end %> |
# <%%= if_authorized?(:edit, @user) do link_to('Edit this user', edit_user_path) end %> |
# <%%= if_authorized?(:destroy, @user) do link_to 'Destroy', @user, :confirm => 'Are you sure?', :method => :delete end %>
#
#
def if_authorized?(action, resource, &block)
if authorized?(action, resource)
yield action, resource
end
end
#
# Link to user's page ('<%= table_name %>/1')
#
# By default, their login is used as link text and link title (tooltip)
#
# Takes options
# * :content_text => 'Content text in place of <%= file_name %>.login', escaped with
# the standard h() function.
# * :content_method => :<%= file_name %>_instance_method_to_call_for_content_text
# * :title_method => :<%= file_name %>_instance_method_to_call_for_title_attribute
# * as well as link_to()'s standard options
#
# Examples:
# link_to_<%= file_name %> @<%= file_name %>
# # => barmy
#
# # if you've added a .name attribute:
# content_tag :span, :class => :vcard do
# (link_to_<%= file_name %> <%= file_name %>, :class => 'fn n', :title_method => :login, :content_method => :name) +
# ': ' + (content_tag :span, <%= file_name %>.email, :class => 'email')
# end
# # => Cyril Fotheringay-Phipps: barmy@blandings.com
#
# link_to_<%= file_name %> @<%= file_name %>, :content_text => 'Your user page'
# # => Your user page
#
def link_to_<%= file_name %>(<%= file_name %>, options={})
raise "Invalid <%= file_name %>" unless <%= file_name %>
options.reverse_merge! :content_method => :login, :title_method => :login, :class => :nickname
content_text = options.delete(:content_text)
content_text ||= <%= file_name %>.send(options.delete(:content_method))
options[:title] ||= <%= file_name %>.send(options.delete(:title_method))
link_to h(content_text), <%= model_controller_routing_name.singularize %>_path(<%= file_name %>), options
end
#
# Link to login page using remote ip address as link content
#
# The :title (and thus, tooltip) is set to the IP address
#
# Examples:
# link_to_login_with_IP
# # => 169.69.69.69
#
# link_to_login_with_IP :content_text => 'not signed in'
# # => not signed in
#
def link_to_login_with_IP content_text=nil, options={}
ip_addr = request.remote_ip
content_text ||= ip_addr
options.reverse_merge! :title => ip_addr
if tag = options.delete(:tag)
content_tag tag, h(content_text), options
else
link_to h(content_text), login_path, options
end
end
#
# Link to the current user's page (using link_to_<%= file_name %>) or to the login page
# (using link_to_login_with_IP).
#
def link_to_current_<%= file_name %>(options={})
if current_<%= file_name %>
link_to_<%= file_name %> current_<%= file_name %>, options
else
content_text = options.delete(:content_text) || 'not signed in'
# kill ignored options from link_to_<%= file_name %>
[:content_method, :title_method].each{|opt| options.delete(opt)}
link_to_login_with_IP content_text, options
end
end
end