summaryrefslogtreecommitdiff
path: root/app/controllers
diff options
context:
space:
mode:
authorAzul <azul@leap.se>2014-05-20 13:09:59 +0200
committerAzul <azul@leap.se>2014-05-26 12:59:26 +0200
commitc10f9311678ff2183443bc03e153b30d3b68ff74 (patch)
treea81a236e2e7d0429d45c24efa5592a7233a63ab3 /app/controllers
parent467dd712a19d48fc653cfc0e58201e6657d2c1f9 (diff)
Controller#flash_for instead of FlashResponder
FlashResponder added a flash before responding. However at the point of responding objects have already been saved. So there is no way to test if they were changed. Now instead we can call flash_for resource before resource.save and it will add the flash messages only if the resource was actually changed.
Diffstat (limited to 'app/controllers')
-rw-r--r--app/controllers/controller_extension/flash.rb33
1 files changed, 33 insertions, 0 deletions
diff --git a/app/controllers/controller_extension/flash.rb b/app/controllers/controller_extension/flash.rb
new file mode 100644
index 0000000..6a62351
--- /dev/null
+++ b/app/controllers/controller_extension/flash.rb
@@ -0,0 +1,33 @@
+module ControllerExtension::Flash
+ extend ActiveSupport::Concern
+
+ protected
+
+ def flash_for(resource, options = {})
+ return unless resource.changed?
+ message = flash_message_for(resource)
+ type = flash_type(resource)
+ if message.present?
+ flash[type] = [message, flash[type]].join(' ')
+ end
+ end
+
+ def flash_message_for(resource)
+ I18n.t flash_i18n_key(resource),
+ scope: :flash,
+ cascade: true,
+ resource: resource.class.model_name.human
+ end
+
+ def flash_i18n_key(resource)
+ namespace = [action_name]
+ namespace += controller_path.split('/')
+ namespace << flash_type(resource)
+ namespace.join(".")
+ end
+
+ def flash_type(resource)
+ resource.valid? ? :success : :error
+ end
+
+end