module PowerResource module ActionHelper # Returns humanized name for an action # # Customization using I18n API: # # power_resource: # actions: # new: 'New %{resource_name}' # edit: 'Edit %{resource_name}' # index: '%{collection_name}' # # Variables available in I18n: # # resource_name # => Post # downcased_resource_name # => post # collection_name # => Posts # # Examples: # # resource_action_human_name(:new) # # => New Post # resource_action_human_name(:edit) # # => Edit Post # resource_action_human_name(:duplicate) # # => Duplicate Post # resource_action_human_name(:index) # # => Posts # def resource_action_human_name(action_name, options = {}) I18n.t("power_resource.resource_actions.#{action_name.to_s}", { resource_name: resource_human_name, downcased_resource_name: resource_human_name.downcase, collection_name: collection_human_name, default: (action_name == :index ? collection_human_name : "#{action_name.to_s.humanize} #{resource_human_name}") }.merge(options)) end # Returns a title for a current resource based on an action # # Customization using I18n API: # # power_resource: # titles: # post: # new: 'New %{resource_name}' # edit: 'Edit %{resource_name}' # delete: 'Delete %{downcased_resource_name}' # index: '%{collection_name}' # # Variables available in I18n: # # resource_name # => Post # downcased_resource_name # => post # collection_name # => Posts # # Examples: # # resource_action_title(:new) # # => New Post # resource_action_title(:edit) # # => Edit Post # resource_action_title(:duplicate) # # => Duplicate Post # resource_action_title(:index) # # => Posts # def resource_action_title(action_name, options = {}) I18n.t("power_resource.titles.#{resource_name}.#{action_name.to_s}", { resource_name: resource_human_name, downcased_resource_name: resource_human_name.downcase, collection_name: collection_human_name, default: resource_action_human_name(action_name, options) }.merge(options)) end # Returns a link for a current resource based on an action # # Customization using I18n API: # # power_resource: # links: # post: # new: 'New %{resource_name}' # edit: 'Edit' # index: '%{collection_name}' # # Variables available in I18n: # # resource_name # => Post # downcased_resource_name # => post # collection_name # => Posts # # Examples: # # resource_link_to(:new) # # => New Post # resource_link_to(:edit, resource) # # => Edit # resource_link_to(:index) # # => Posts # def resource_link_to(action_name, resource_instance = nil) if resource_instance human_name = resource_human_name_for(resource_instance.class.name) end case action_name when :show, :edit, :delete default_text = I18n.t("power_resource.actions.#{action_name.to_s}", default: action_name.to_s.humanize) else default_text = resource_action_human_name(action_name) end text = I18n.t("power_resource.links.#{resource_name}.#{action_name.to_s}", { resource_name: human_name || resource_human_name, downcased_resource_name: human_name ? human_name.downcase : resource_human_name.downcase, collection_name: collection_human_name, default: default_text }) case action_name when :index link_to(text, collection_path) when :show link_to(text, resource_path(resource_instance || resource)) when :new link_to(text, new_resource_path) when :edit link_to(text, edit_resource_path(resource_instance || resource), class: collection_table_button_classes) when :delete link_to(text, resource_path(resource_instance || resource), class: collection_table_button_classes, method: :delete, data: { confirm: I18n.t('power_resource.confirmations.delete', default: 'Are you sure?') }) end end end end