Module: EffectiveResourcesHelper
- Defined in:
- app/helpers/effective_resources_helper.rb
Instance Method Summary collapse
- #edit_effective_wizard? ⇒ Boolean
-
#effective_submit(form, options = {}, &block) ⇒ Object
effective_bootstrap.
-
#et(resource, attribute = nil) ⇒ Object
effective_translate.
-
#etd(resource, attribute = nil) ⇒ Object
effective_translate_plural.
-
#ets(resource, attribute = nil) ⇒ Object
effective_translate_plural.
-
#etsd(resource, attribute = nil) ⇒ Object
effective_translate_plural.
- #format_resource_value(value) ⇒ Object
- #render_if_exists(partial, atts = {}) ⇒ Object
- #render_partial_exists?(partial, atts = {}) ⇒ Boolean
-
#render_resource_actions(resource, atts = {}, &block) ⇒ Object
partial: :dropleft|:glyphicons|string locals: {} render locals you can also pass all action names and true/false such as edit: true, show: false.
- #render_resource_buttons(resource, atts = {}, &block) ⇒ Object
-
#render_resource_form(resource, atts = {}) ⇒ Object
When called from /admin/things/new.html.haml this will render ‘admin/things/form’, or ‘things/form’, or ‘thing/form’.
-
#render_resource_partial(resource, atts = {}) ⇒ Object
(also: #render_resource)
Similar to render_resource_form.
- #return_to_dashboard_path ⇒ Object
-
#simple_form_submit(form, options = {}, &block) ⇒ Object
effective_form_inputs.
-
#tableize_hash(obj, table: 'table', th: true, sub_table: 'table', sub_th: true, flatten: true) ⇒ Object
Tableize attributes This is used by effective_orders, effective_logging, effective_trash and effective_mergery.
- #wizard_card(resource, &block) ⇒ Object
Instance Method Details
#edit_effective_wizard? ⇒ Boolean
264 265 266 |
# File 'app/helpers/effective_resources_helper.rb', line 264 def edit_effective_wizard? controller.class.try(:effective_wizard_controller?) && defined?(resource) && resource.draft? end |
#effective_submit(form, options = {}, &block) ⇒ Object
effective_bootstrap
5 6 7 8 9 10 11 12 13 14 15 |
# File 'app/helpers/effective_resources_helper.rb', line 5 def effective_submit(form, = {}, &block) actions = controller.try(:submits) || raise('controller must be an Effective::CrudController') actions = actions.select { |k, v| v[:default] != true } if .delete(:defaults) == false actions = permitted_resource_actions(form.object, actions) submits = actions.map { |name, opts| form.save(name, opts.except(:action, :title, 'data-method') ) }.join.html_safe form.submit('', ) do (block_given? ? capture(&block) : ''.html_safe) + submits end end |
#et(resource, attribute = nil) ⇒ Object
effective_translate
305 306 307 |
# File 'app/helpers/effective_resources_helper.rb', line 305 def et(resource, attribute = nil) EffectiveResources.et(resource, attribute) end |
#etd(resource, attribute = nil) ⇒ Object
effective_translate_plural
310 311 312 |
# File 'app/helpers/effective_resources_helper.rb', line 310 def etd(resource, attribute = nil) EffectiveResources.etd(resource, attribute) end |
#ets(resource, attribute = nil) ⇒ Object
effective_translate_plural
315 316 317 |
# File 'app/helpers/effective_resources_helper.rb', line 315 def ets(resource, attribute = nil) EffectiveResources.ets(resource, attribute) end |
#etsd(resource, attribute = nil) ⇒ Object
effective_translate_plural
320 321 322 |
# File 'app/helpers/effective_resources_helper.rb', line 320 def etsd(resource, attribute = nil) EffectiveResources.etsd(resource, attribute) end |
#format_resource_value(value) ⇒ Object
257 258 259 260 261 262 |
# File 'app/helpers/effective_resources_helper.rb', line 257 def format_resource_value(value) @format_resource_tags ||= ActionView::Base..to_a + ['table', 'thead', 'tbody', 'tfoot', 'tr', 'td', 'th'] @format_resource_atts ||= ActionView::Base.sanitized_allowed_attributes.to_a + ['colspan', 'rowspan'] simple_format(sanitize(value.to_s, tags: @format_resource_tags, attributes: @format_resource_atts), {}, sanitize: false) end |
#render_if_exists(partial, atts = {}) ⇒ Object
223 224 225 |
# File 'app/helpers/effective_resources_helper.rb', line 223 def render_if_exists(partial, atts = {}) render(partial, atts) if render_partial_exists?(partial, atts) end |
#render_partial_exists?(partial, atts = {}) ⇒ Boolean
211 212 213 214 215 216 217 218 219 220 221 |
# File 'app/helpers/effective_resources_helper.rb', line 211 def render_partial_exists?(partial, atts = {}) raise('expected a path') unless partial.kind_of?(String) raise('path should not include spaces') if partial.include?(' ') pieces = partial.to_s.split('/') - [nil, ''] file = pieces.last path = pieces[0..-2].join('/') lookup_context.exists?(file, [path], :partial) end |
#render_resource_actions(resource, atts = {}, &block) ⇒ Object
partial: :dropleft|:glyphicons|string locals: {} render locals you can also pass all action names and true/false such as edit: true, show: false
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'app/helpers/effective_resources_helper.rb', line 60 def render_resource_actions(resource, atts = {}, &block) return ''.html_safe if resource.blank? unless resource.kind_of?(ActiveRecord::Base) || resource.kind_of?(Class) || resource.kind_of?(Array) || resource.class.ancestors.include?(ActiveModel::Model) raise 'expected first argument to be an ActiveRecord::Base object or Array of objects' end raise 'expected attributes to be a Hash' unless atts.kind_of?(Hash) btn_class = atts[:btn_class] effective_resource = atts[:effective_resource] namespace = atts[:controller_namespace] || atts[:namespace] locals = atts[:locals] || {} partial = atts[:partial] spacer_template = locals[:spacer_template] effective_resource ||= find_effective_resource(resource) namespace ||= (effective_resource.namespace.to_sym if effective_resource.namespace) # Assign actions # We filter out any actions passed to us that aren't supported actions = if atts.key?(:actions) {}.tap do |actions| atts[:actions].each do |commit, opts| actions[commit] = opts if (effective_resource.actions.include?(opts[:action]) || opts[:path]).present? end end else (resource.kind_of?(Class) ? effective_resource.resource_klass_actions : effective_resource.resource_actions) end # Consider only, except, false and proc false only = Array(atts[:only]) if atts[:only].present? except = Array(atts[:except]) if atts[:except].present? actions.select! do |_, opts| action = opts[:action] if only.present? && !only.include?(action) false elsif except.present? && except.include?(action) false elsif atts[action].respond_to?(:call) Effective::ResourceExec.new(self, resource).instance_exec(&atts[action]) else atts[action] != false end end # Select Partial partial = if partial.kind_of?(Symbol) "effective/resource/actions_#{partial}" else partial.presence || 'effective/resource/actions' end # Assign Locals locals = { resource: resource, effective_resource: effective_resource, format_block: (block if block_given?), namespace: namespace, actions: actions, btn_class: (btn_class || '') }.compact.merge(locals) if resource.kind_of?(Array) render( partial: partial, formats: [:html], collection: resource, as: :resource, locals: locals.except(:resource), spacer_template: spacer_template ) else render(partial: partial, formats: [:html], locals: locals) end end |
#render_resource_buttons(resource, atts = {}, &block) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'app/helpers/effective_resources_helper.rb', line 38 def (resource, atts = {}, &block) effective_resource = find_effective_resource actions = controller.try(:buttons) || effective_resource.() actions = if resource.kind_of?(Class) actions.select { |_, v| effective_resource.collection_get_actions.include?(v[:action]) } elsif resource.respond_to?(:persisted?) && resource.persisted? actions.select { |_, v| effective_resource.member_actions.include?(v[:action]) } else {} end render_resource_actions(resource, atts.merge(actions: actions), &block) end |
#render_resource_form(resource, atts = {}) ⇒ Object
When called from /admin/things/new.html.haml this will render ‘admin/things/form’, or ‘things/form’, or ‘thing/form’
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 |
# File 'app/helpers/effective_resources_helper.rb', line 141 def render_resource_form(resource, atts = {}) unless resource.kind_of?(ActiveRecord::Base) || resource.class.ancestors.include?(ActiveModel::Model) raise 'expected first argument to be an ActiveRecord or ActiveModel object' end raise 'expected attributes to be a Hash' unless atts.kind_of?(Hash) effective_resource = (atts.delete(:effective_resource) || find_effective_resource) action = atts.delete(:action) safe = atts.delete(:safe) atts = { :namespace => (effective_resource.namespace.to_sym if effective_resource.namespace), effective_resource.name.to_sym => resource }.compact.merge(atts) if lookup_context.template_exists?("form_#{action}", controller._prefixes, :partial) return render("form_#{action}", atts) end if lookup_context.template_exists?('form', controller._prefixes, :partial) return render('form', atts) end effective_resource.view_paths.each do |view_path| if lookup_context.template_exists?("form_#{action}", [view_path], :partial) return render(view_path + '/' + "form_#{action}", atts) end if lookup_context.template_exists?('form', [view_path], :partial) return render(view_path + '/' + 'form', atts) end end # Will raise the regular error return ''.html_safe if safe render('form', atts) end |
#render_resource_partial(resource, atts = {}) ⇒ Object Also known as: render_resource
Similar to render_resource_form
179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 |
# File 'app/helpers/effective_resources_helper.rb', line 179 def render_resource_partial(resource, atts = {}) unless resource.kind_of?(ActiveRecord::Base) || resource.class.ancestors.include?(ActiveModel::Model) raise 'expected first argument to be an ActiveRecord or ActiveModel object' end raise 'expected attributes to be a Hash' unless atts.kind_of?(Hash) effective_resource = (atts.delete(:effective_resource) || find_effective_resource) action = atts.delete(:action) safe = atts.delete(:safe) atts = { :namespace => (effective_resource.namespace.to_sym if effective_resource.namespace), effective_resource.name.to_sym => resource }.compact.merge(atts) partial = (action.present? ? action.to_s : effective_resource.name) if lookup_context.template_exists?(partial, controller._prefixes, :partial) return render(partial, atts) end effective_resource.view_paths.each do |view_path| if lookup_context.template_exists?(partial, [view_path], :partial) return render(view_path + '/' + partial, atts) end end # Will raise the regular error return ''.html_safe if safe render(resource, atts) end |
#return_to_dashboard_path ⇒ Object
296 297 298 299 300 301 302 |
# File 'app/helpers/effective_resources_helper.rb', line 296 def return_to_dashboard_path path = (Tenant.routes.dashboard_path rescue nil) if defined?(Tenant) && Tenant.routes.respond_to?(:dashboard_path) path ||= (main_app.dashboard_path rescue nil) if main_app.respond_to?(:dashboard_path) path ||= (main_app.root_path rescue nil) if main_app.respond_to?(:root_path) path || '/' end |
#simple_form_submit(form, options = {}, &block) ⇒ Object
effective_form_inputs
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'app/helpers/effective_resources_helper.rb', line 18 def simple_form_submit(form, = {}, &block) actions = controller.try(:submits) || raise('controller must be an Effective::CrudController') actions = permitted_resource_actions(form.object, actions) submits = actions.map { |name, opts| form.(:submit, name, opts.except(:action, :title, 'data-method')) } # I think this is a bug. I can't override default button class when passing my own class: variable. it merges them. if (btn_class = SimpleForm.).present? submits = submits.map { |submit| submit.sub(btn_class, '') } end submits = submits.join(' ').html_safe = { class: 'form-actions' }.merge(.delete(:wrapper_html) || {}) content_tag(:div, ) do (block_given? ? capture(&block) : ''.html_safe) + submits end end |
#tableize_hash(obj, table: 'table', th: true, sub_table: 'table', sub_th: true, flatten: true) ⇒ Object
Tableize attributes This is used by effective_orders, effective_logging, effective_trash and effective_mergery
229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 |
# File 'app/helpers/effective_resources_helper.rb', line 229 def tableize_hash(obj, table: 'table', th: true, sub_table: 'table', sub_th: true, flatten: true) case obj when Hash if flatten && obj[:attributes].kind_of?(Hash) obj = obj[:attributes].merge(obj.except(:attributes)) end content_tag(:table, class: table.presence) do content_tag(:tbody) do obj.map do |key, value| content_tag(:tr, class: key.to_param) do content_tag((th == true ? :th : :td), key) + content_tag(:td) { tableize_hash(value, table: sub_table, th: sub_th, sub_table: sub_table, sub_th: sub_th, flatten: flatten) } end end.join.html_safe end end when Array obj.map { |value| tableize_hash(value, table: sub_table, th: sub_th, sub_table: sub_table, sub_th: sub_th, flatten: flatten) }.join('<br>') when Symbol ":#{obj}" when NilClass '-' else obj.to_s.presence || '""' end.html_safe end |
#wizard_card(resource, &block) ⇒ Object
268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 |
# File 'app/helpers/effective_resources_helper.rb', line 268 def wizard_card(resource, &block) raise('expected a block') unless block_given? raise('expected an acts_as_wizard resource') unless resource.class.respond_to?(:acts_as_wizard?) step = resource.render_step raise('expected a render_step') unless step.present? title = resource.wizard_step_title(step) raise("expected a title for step #{step}") unless title.present? link = if edit_effective_wizard? && resource.is_a?(controller.resource_klass) && resource.can_visit_step?(step) link_to('Edit', wizard_path(step), title: "Edit #{title}") end content_tag(:div, class: 'card mb-4') do content_tag(:div, class: 'card-body') do content_tag(:div, class: 'row') do content_tag(:div, class: 'col-sm') do content_tag(:h5, title, class: 'card-title') end + content_tag(:div, class: 'col-sm-auto text-right') do (link || '') end end + capture(&block) end end end |