summaryrefslogtreecommitdiff
path: root/app/controllers/controller_extension/flash.rb
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/controller_extension/flash.rb
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/controller_extension/flash.rb')
-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