Module: Trestle::UrlHelper
- Defined in:
- app/helpers/trestle/url_helper.rb
Constant Summary collapse
- DIALOG_ACTIONS =
[:new, :show, :edit]
Instance Method Summary collapse
- #admin_for(instance) ⇒ Object
- #admin_link_to(content, instance_or_url = nil, options = {}, &block) ⇒ Object
- #admin_url_for(instance, options = {}) ⇒ Object
Instance Method Details
#admin_for(instance) ⇒ Object
75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'app/helpers/trestle/url_helper.rb', line 75 def admin_for(instance) klass = instance.class while klass admin = Trestle.admins[klass.name.underscore.pluralize] return admin if admin klass = klass.superclass end # No admin found nil end |
#admin_link_to(content, instance_or_url = nil, options = {}, &block) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'app/helpers/trestle/url_helper.rb', line 5 def admin_link_to(content, instance_or_url=nil, ={}, &block) # Block given - ignore content parameter and capture content from block if block_given? instance_or_url, = content, instance_or_url || {} content = capture(&block) end if instance_or_url.is_a?(String) # Treat string URL as regular link link_to(content, instance_or_url, ) else # Normalize options if instance is not provided if instance_or_url.is_a?(Hash) instance, = nil, instance_or_url else instance = instance_or_url end # Determine admin if .key?(:admin) admin = Trestle.lookup(.delete(:admin)) elsif instance admin = admin_for(instance) end admin ||= self.admin if respond_to?(:admin) if admin # Ensure admin has controller context admin = admin.new(self) if admin.is_a?(Class) # Generate path action = .delete(:action) || :show params = .delete(:params) || {} if admin.respond_to?(:instance_path) && instance path = admin.instance_path(instance, params.reverse_merge(action: action)) else params[:id] ||= admin.to_param(instance) if instance path = admin.path(action, params) end # Determine link data options if DIALOG_ACTIONS.include?(action) && admin.form.dialog? [:data] ||= {} [:data][:behavior] ||= "dialog" end link_to(content, path, ) else raise ActionController::UrlGenerationError, "An admin could not be inferred. Please specify an admin using the :admin option." end end end |
#admin_url_for(instance, options = {}) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'app/helpers/trestle/url_helper.rb', line 60 def admin_url_for(instance, ={}) admin = Trestle.lookup(.delete(:admin)) if .key?(:admin) admin ||= admin_for(instance) return unless admin # Ensure admin has controller context admin = admin.new(self) if admin.is_a?(Class) if admin.respond_to?(:instance_path) admin.instance_path(instance, ) else admin.path([:action] || :show, id: admin.to_param(instance)) end end |