bootstrap_flash_messages 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ .DS_Store
2
+ bootstrap_flash_messages*.gem
3
+ .bundle
4
+ pkg
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in lorem.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,133 @@
1
+ # bootstrap_flash_messages
2
+
3
+ version 0.0.1
4
+ Robin Brouwer
5
+ 45north
6
+
7
+ Bootstrap alerts and Rails flash messages combined in one easy-to-use gem.
8
+
9
+
10
+ ## Installation
11
+
12
+ You can use this gem by putting the following inside your Gemfile:
13
+
14
+ gem "bootstrap_flash_messages"
15
+
16
+ Now you need flash.en.yml for the flash messages.
17
+
18
+ rails g bootstrap_flash_messages:locale
19
+
20
+ And that's it!
21
+
22
+
23
+ ## Changes
24
+
25
+ Version 0.0.1 changes (08/08/2012):
26
+
27
+ - Changed redirect_to method
28
+ - Added flash! and flash_now! methods
29
+ - Added flash_messages helper
30
+ - Made a gem out of it
31
+
32
+
33
+ ## Usage
34
+
35
+ You need [Twitter Bootstrap](http://twitter.github.com/bootstrap) for the styling and close button. You can still use it without Bootstrap, but you need to style it yourself. This gem uses the [Bootstrap alerts](http://twitter.github.com/bootstrap/components.html#alerts).
36
+
37
+ All flash messages are defined inside config/locales/flash.en.yml. They are nested like this:
38
+
39
+ en:
40
+ flash_messages:
41
+ controller_name:
42
+ action_name:
43
+ success: "It worked!"
44
+ info: "There's something you need to know..."
45
+ warning: "You should watch out now."
46
+ error: "Oh no! Something went wrong."
47
+
48
+ You have four keys:
49
+
50
+ :success
51
+ :info
52
+ :warning
53
+ :error
54
+
55
+ When you've defined the messages it's really easy to call them inside your Controller.
56
+
57
+ class PostsController
58
+ def create
59
+ @post = Post.new(params[:post])
60
+ if @post.save
61
+ redirect_to(@post, :flash => :success)
62
+ else
63
+ flash_now!(:error)
64
+ render("new")
65
+ end
66
+ end
67
+ end
68
+
69
+ You can use the `:flash` parameter inside the `redirect_to` method (note: this gem changes the redirect_to method!) to set the flash messages. You only need to pass the corresponding key and the gem will automatically set `gflash[:success]` to `t("flash_messages.posts.create.success")`. The `:flash` parameter also accepts an Array.
70
+
71
+ redirect_to(@post, :flash => [:success, :info])
72
+
73
+ You can still use a Hash to use the default `redirect_to` behavior. When you don't want to use the `redirect_to` method to set the flash messages, you can use the `flash!` method.
74
+
75
+ flash!(:success, :info)
76
+ redirect_to(@post)
77
+
78
+ When you need to use `flash.now` you can use the new `flash_now!` method.
79
+
80
+ flash_now!(:error, :warning)
81
+
82
+ You use `flash_now!` in combination with rendering a view instead of redirecting.
83
+
84
+ Now's the time to show these messages to the user. Inside the layout (or any other view), add the following:
85
+
86
+ <div id="flash_messages"><%= flash_messages %></div>
87
+
88
+ And that's it! To change the flash messages inside a `.js.erb` file, you can do the following:
89
+
90
+ $("#flash_messages").html("#{j(flash_messages)}");
91
+
92
+ The `flash_messages` helper shows a simple Bootstrap alert box. If you want to add a close button you can add the :close option.
93
+
94
+ <%= flash_messages(:close) %>
95
+
96
+ Want to use the `.alert-block` class? Just add :block.
97
+
98
+ <%= flash_messages(:close, :block) %>
99
+
100
+ Want a heading? Add :heading. The headings inside flash.en.yml are used.
101
+
102
+ <%= flash_messages(:close, :block, :heading) %>
103
+
104
+ And that's it! Have fun. :)
105
+
106
+
107
+ ## Why I created this gem
108
+
109
+ I created the [gritter gem](https://github.com/RobinBrouwer/gritter) and used it in a lot of projects.
110
+ I started using Twitter Bootstrap and really liked the alerts. I loved the way gritter allowed you to set messages
111
+ and decided to do the same for the Bootstrap alerts. And this is the result!
112
+
113
+ ## Copyright
114
+
115
+ Copyright (C) 2012 Robin Brouwer
116
+
117
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
118
+ this software and associated documentation files (the "Software"), to deal in
119
+ the Software without restriction, including without limitation the rights to
120
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
121
+ of the Software, and to permit persons to whom the Software is furnished to do
122
+ so, subject to the following conditions:
123
+
124
+ The above copyright notice and this permission notice shall be included in all
125
+ copies or substantial portions of the Software.
126
+
127
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
128
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
129
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
130
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
131
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
132
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
133
+ SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "bootstrap_flash_messages/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "bootstrap_flash_messages"
7
+ s.version = BootstrapFlashMessages::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Robin Brouwer"]
10
+ s.email = ["robin@45north.nl"]
11
+ s.homepage = "http://www.45north.nl"
12
+ s.summary = %q{Bootstrap alerts and Rails flash messages combined in one easy-to-use gem.}
13
+ s.description = %q{Bootstrap alerts and Rails flash messages combined in one easy-to-use gem.}
14
+
15
+ s.rubyforge_project = "nowarning"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+ end
data/init.rb ADDED
@@ -0,0 +1,2 @@
1
+ require 'bootstrap_flash_messages'
2
+ BootstrapFlashMessages.initialize
@@ -0,0 +1,37 @@
1
+ module BootstrapFlashMessages
2
+ module FlashMessages
3
+ def redirect_to(options = {}, response_status_and_flash = {})
4
+ messages = response_status_and_flash[:flash]
5
+ if messages && (messages.is_a?(Symbol) || messages.is_a?(Array))
6
+ flashes = {}
7
+ if messages.is_a?(Array)
8
+ messages.each do |key|
9
+ flashes[key] = flash_messages(params[:controller], params[:action], key)
10
+ end
11
+ else
12
+ flashes[messages] = flash_messages(params[:controller], params[:action], messages)
13
+ end
14
+ response_status_and_flash[:flash] = flashes
15
+ end
16
+ super(options, response_status_and_flash)
17
+ end
18
+
19
+ private
20
+
21
+ def flash!(*args)
22
+ args.each do |key|
23
+ flash[key] = flash_messages(params[:controller], params[:action], key)
24
+ end
25
+ end
26
+
27
+ def flash_now!(*args)
28
+ args.each do |key|
29
+ flash.now[key] = flash_messages(params[:controller], params[:action], key)
30
+ end
31
+ end
32
+
33
+ def flash_messages(*args)
34
+ I18n.t("flash_messages.#{args.join(".")}")
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,29 @@
1
+ module BootstrapFlashMessages
2
+ module Helpers
3
+ def flash_messages(*args)
4
+ if flash.present?
5
+ block = args.include?(:block)
6
+ show_heading = args.include?(:heading)
7
+ show_close = args.include?(:close)
8
+
9
+ messages = []
10
+ flash.each do |key, value|
11
+ heading = ""
12
+ if show_heading
13
+ heading_text = I18n.t("flash_messages.headings.#{key}")
14
+ heading = (block ? content_tag(:h4, heading_text, :class => "alert-heading") : content_tag(:strong, heading_text))
15
+ end
16
+ close = ""
17
+ if show_close
18
+ close = link_to("x", "#", :class => "close", :data => { :dismiss => "alert" })
19
+ end
20
+
21
+ messages << content_tag(:div, :class => "alert alert-#{key} #{"alert-block" if block}") do
22
+ close + heading + " " + value
23
+ end
24
+ end
25
+ raw(messages.join)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,9 @@
1
+ if defined?(Rails::Railtie)
2
+ module BootstrapFlashMessages
3
+ class Railtie < Rails::Railtie
4
+ initializer :bootstrap_flash_messages do
5
+ BootstrapFlashMessages.initialize
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ module BootstrapFlashMessages
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,16 @@
1
+ require 'bootstrap_flash_messages/helpers'
2
+ require 'bootstrap_flash_messages/flash_messages'
3
+
4
+ module BootstrapFlashMessages
5
+ def self.initialize
6
+ return if @initialized
7
+ raise "ActionController is not available yet." unless defined?(ActionController)
8
+ ActionController::Base.send(:helper, BootstrapFlashMessages::Helpers)
9
+ ActionController::Base.send(:include, BootstrapFlashMessages::FlashMessages)
10
+ @initialized = true
11
+ end
12
+ end
13
+
14
+ if defined?(Rails::Railtie)
15
+ require 'bootstrap_flash_messages/railtie'
16
+ end
@@ -0,0 +1,7 @@
1
+ Available generators:
2
+ bootstrap_flash_messages:locale
3
+
4
+ Examples:
5
+ rails g bootstrap_flash_messages:locale
6
+ This will create:
7
+ config/locales/flash.en.yml
@@ -0,0 +1,9 @@
1
+ module BootstrapFlashMessages
2
+ class LocaleGenerator < Rails::Generators::Base
3
+ source_root File.expand_path('../templates', __FILE__)
4
+
5
+ def copy_gflash_locale
6
+ copy_file "flash.en.yml", "config/locales/flash.en.yml"
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,35 @@
1
+ en:
2
+ flash_messages:
3
+ #
4
+ # These are the translations for the different headings.
5
+ #
6
+ headings:
7
+ success: "Success!"
8
+ info: "Info!"
9
+ warning: "Warning!"
10
+ error: "Error!"
11
+ #
12
+ # Add flash messages for controller actions:
13
+ # products:
14
+ # create:
15
+ # success: "This is a notification"
16
+ # error: "Something went wrong"
17
+ #
18
+ # Inside controller:
19
+ # def create
20
+ # flash!(:success, :error)
21
+ # redirect_to(:root)
22
+ # end
23
+ #
24
+ # OR
25
+ #
26
+ # def create
27
+ # redirect_to(:root, :flash => [:success, :error])
28
+ # end
29
+ #
30
+ # OR
31
+ #
32
+ # def create
33
+ # flash_now!(:success, :error)
34
+ # render("new")
35
+ # end
metadata ADDED
@@ -0,0 +1,81 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bootstrap_flash_messages
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Robin Brouwer
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2012-08-08 00:00:00 +02:00
19
+ default_executable:
20
+ dependencies: []
21
+
22
+ description: Bootstrap alerts and Rails flash messages combined in one easy-to-use gem.
23
+ email:
24
+ - robin@45north.nl
25
+ executables: []
26
+
27
+ extensions: []
28
+
29
+ extra_rdoc_files: []
30
+
31
+ files:
32
+ - .gitignore
33
+ - Gemfile
34
+ - README.md
35
+ - Rakefile
36
+ - bootstrap_flash_messages.gemspec
37
+ - init.rb
38
+ - lib/bootstrap_flash_messages.rb
39
+ - lib/bootstrap_flash_messages/flash_messages.rb
40
+ - lib/bootstrap_flash_messages/helpers.rb
41
+ - lib/bootstrap_flash_messages/railtie.rb
42
+ - lib/bootstrap_flash_messages/version.rb
43
+ - lib/generators/bootstrap_flash_messages/USAGE
44
+ - lib/generators/bootstrap_flash_messages/locale_generator.rb
45
+ - lib/generators/bootstrap_flash_messages/templates/flash.en.yml
46
+ has_rdoc: true
47
+ homepage: http://www.45north.nl
48
+ licenses: []
49
+
50
+ post_install_message:
51
+ rdoc_options: []
52
+
53
+ require_paths:
54
+ - lib
55
+ required_ruby_version: !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ hash: 3
61
+ segments:
62
+ - 0
63
+ version: "0"
64
+ required_rubygems_version: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ hash: 3
70
+ segments:
71
+ - 0
72
+ version: "0"
73
+ requirements: []
74
+
75
+ rubyforge_project: nowarning
76
+ rubygems_version: 1.3.7
77
+ signing_key:
78
+ specification_version: 3
79
+ summary: Bootstrap alerts and Rails flash messages combined in one easy-to-use gem.
80
+ test_files: []
81
+