app/helpers/trestle/url_helper.rb in trestle-0.8.5 vs app/helpers/trestle/url_helper.rb in trestle-0.8.6

- old
+ new

@@ -1,21 +1,49 @@ module Trestle module UrlHelper - def admin_link_to(content, instance=nil, options={}, &block) + def admin_link_to(content, instance_or_url=nil, options={}, &block) if block_given? - instance, options = content, instance || {} + instance_or_url, options = content, instance_or_url || {} content = capture(&block) end - if admin = (options.key?(:admin) ? Trestle.lookup(options.delete(:admin)) : admin_for(instance)) - link_to(content, admin_url_for(instance, admin: admin), options) + if instance_or_url.is_a?(String) + link_to(content, instance_or_url, options) else - content + if instance_or_url.is_a?(Hash) + instance_or_url, options = nil, instance_or_url + end + + if options.key?(:admin) + admin = Trestle.lookup(options.delete(:admin)) + elsif instance_or_url.respond_to?(:id) + admin = admin_for(instance_or_url) + end + + admin ||= self.admin if respond_to?(:admin) + + if admin + action = options.delete(:action) || :show + + params = options.delete(:params) || {} + params[:id] ||= admin.to_param(instance_or_url) if instance_or_url + + if [:show, :edit].include?(action) && admin.form.dialog? + options[:data] ||= {} + options[:data][:behavior] ||= "dialog" + end + + link_to(content, admin.path(action, params), options) + else + raise ActionController::UrlGenerationError, "An admin could not be inferred. Please specify an admin using the :admin option." + end end end def admin_url_for(instance, options={}) - admin = options.key?(:admin) ? Trestle.lookup(options[:admin]) : admin_for(instance) + admin = Trestle.lookup(options[:admin]) if options.key?(:admin) + admin ||= admin_for(instance) + admin.path(options[:action] || :show, id: admin.to_param(instance)) if admin end def admin_for(instance) Trestle.admins[instance.class.name.underscore.pluralize]