Module: PublicActivity::Renderable
- Defined in:
- lib/public_activity/renderable.rb
Overview
Provides logic for rendering activities. Handles both i18n strings support and smart partials rendering (different templates per activity key).
Instance Method Summary collapse
- #prepare_layout(root, layout) ⇒ Object
- #prepare_locals(params) ⇒ Object
- #prepare_parameters(params) ⇒ Object
- #prepare_partial(root, path) ⇒ Object
-
#render(context, params = {}) ⇒ nil
Renders activity from views.
-
#text(params = {}) ⇒ Object
Virtual attribute returning text description of the activity using the activity’s key to translate using i18n.
Instance Method Details
#prepare_layout(root, layout) ⇒ Object
143 144 145 146 147 148 149 150 151 |
# File 'lib/public_activity/renderable.rb', line 143 def prepare_layout(root, layout) if layout path = layout.to_s unless path.start_with?(root) || path.start_with?("/") return File.join(root, path) end end layout end |
#prepare_locals(params) ⇒ Object
126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
# File 'lib/public_activity/renderable.rb', line 126 def prepare_locals(params) locals = params.delete(:locals) || Hash.new controller = PublicActivity.get_controller prepared_params = prepare_parameters(params) locals.merge( { :a => self, :activity => self, :controller => controller, :current_user => controller.respond_to?(:current_user) ? controller.current_user : nil, :p => prepared_params, :params => prepared_params } ) end |
#prepare_parameters(params) ⇒ Object
153 154 155 |
# File 'lib/public_activity/renderable.rb', line 153 def prepare_parameters(params) @prepared_params ||= self.parameters.with_indifferent_access.merge(params) end |
#prepare_partial(root, path) ⇒ Object
122 123 124 |
# File 'lib/public_activity/renderable.rb', line 122 def prepare_partial(root, path) path || self.template_path(self.key, root) end |
#render(context, params = {}) ⇒ nil
Renders activity from views.
Renders activity to the given ActionView context with included AV::Helpers::RenderingHelper (most commonly just ActionView::Base)
The preferred way of rendering activities is to provide a template specifying how the rendering should be happening. However, one may choose using I18n based approach when developing an application that supports plenty of languages.
If partial view exists that matches the key attribute renders that partial with local variables set to contain both Activity and activity_parameters (hash with indifferent access)
Otherwise, it outputs the I18n translation to the context
Layouts
You can supply a layout that will be used for activity partials with :layout param. Keep in mind that layouts for partials are also partials.
Custom Layout Location
You can customize the layout directory by supplying :layout_root or by using an absolute path.
Creating a template
To use templates for formatting how the activity should render, create a template based on activity key, for example:
Given a key activity.article.create, create directory tree app/views/public_activity/article/ and create the create partial there
Note that if a key consists of more than three parts splitted by commas, your directory structure will have to be deeper, for example:
activity.article.comments.destroy => app/views/public_activity/articles/comments/_destroy.html.erb
Custom Directory
You can override the default ‘public_directory` template root with the :root parameter
Variables in templates
From within a template there are two variables at your disposal:
-
activity (aliased as a for a shortcut)
-
params (aliased as p) [converted into a HashWithIndifferentAccess]
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/public_activity/renderable.rb', line 99 def render(context, params = {}) partial_root = params.delete(:root) || 'public_activity' partial_path = nil layout_root = params.delete(:layout_root) || 'layouts' if params.has_key? :display if params[:display].to_sym == :"i18n" text = self.text(params) return context.render :text => text, :plain => text else partial_path = File.join(partial_root, params[:display].to_s) end end context.render( params.merge({ :partial => prepare_partial(partial_root, partial_path), :layout => prepare_layout(layout_root, params.delete(:layout)), :locals => prepare_locals(params) }) ) end |
#text(params = {}) ⇒ Object
Virtual attribute returning text description of the activity using the activity’s key to translate using i18n.
9 10 11 12 13 14 15 16 17 |
# File 'lib/public_activity/renderable.rb', line 9 def text(params = {}) # TODO: some helper for key transformation for two supported formats k = key.split('.') k.unshift('activity') if k.first != 'activity' k = k.join('.') translate_params = parameters.merge(params) || {} I18n.t(k, **translate_params) end |