responders 0.8.0 → 0.9.0
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/.travis.yml +13 -0
- data/CHANGELOG.md +37 -0
- data/Gemfile +3 -3
- data/README.md +135 -0
- data/gemfiles/Gemfile-rails.3.1.x +6 -0
- data/lib/responders.rb +5 -3
- data/lib/responders/flash_responder.rb +12 -9
- data/lib/responders/version.rb +1 -1
- data/test/flash_responder_test.rb +26 -2
- metadata +9 -13
- data/CHANGELOG.rdoc +0 -32
- data/README.rdoc +0 -110
data/.travis.yml
ADDED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
## 0.9
|
2
|
+
|
3
|
+
* Disable namespace lookup by default
|
4
|
+
|
5
|
+
## 0.8
|
6
|
+
|
7
|
+
* Allow embedded HTML in flash messages
|
8
|
+
|
9
|
+
## 0.7
|
10
|
+
|
11
|
+
* Support Rails 3.1 onward
|
12
|
+
* Support namespaced engines
|
13
|
+
|
14
|
+
## 0.6
|
15
|
+
|
16
|
+
* Allow engine detection in generators
|
17
|
+
* HTTP Cache is no longer triggered for collections
|
18
|
+
* `:js` now sets the `flash.now` by default, instead of `flash`
|
19
|
+
* Renamed `responders_install` generator to `responders:install`
|
20
|
+
* Added `CollectionResponder` which allows you to always redirect to the collection path
|
21
|
+
(index action) after POST/PUT/DELETE
|
22
|
+
|
23
|
+
## 0.5
|
24
|
+
|
25
|
+
* Added Railtie and better Rails 3 support
|
26
|
+
* Added `:flash_now` as option
|
27
|
+
|
28
|
+
## 0.4
|
29
|
+
|
30
|
+
* Added `Responders::FlashResponder.flash_keys` and default to `[ :notice, :alert ]`
|
31
|
+
* Added support to `respond_with(@resource, :notice => "Yes!", :alert => "No!")``
|
32
|
+
|
33
|
+
## 0.1
|
34
|
+
|
35
|
+
* Added `FlashResponder`
|
36
|
+
* Added `HttpCacheResponder`
|
37
|
+
* Added responders generators
|
data/Gemfile
CHANGED
data/README.md
ADDED
@@ -0,0 +1,135 @@
|
|
1
|
+
# Responders
|
2
|
+
|
3
|
+
A set of responders modules to dry up your Rails 3 app. If you are interested in the version
|
4
|
+
to be used with Rails 2.3 together with Inherited Resources, please check this branch instead:
|
5
|
+
|
6
|
+
http://github.com/plataformatec/responders/tree/v0.4
|
7
|
+
|
8
|
+
## Responders Types
|
9
|
+
|
10
|
+
### FlashResponder
|
11
|
+
|
12
|
+
Sets the flash based on the controller action and resource status.
|
13
|
+
For instance, if you do: `respond_with(@post)` on a POST request and the resource `@post`
|
14
|
+
does not contain errors, it will automatically set the flash message to
|
15
|
+
`"Post was successfully created"` as long as you configure your I18n file:
|
16
|
+
|
17
|
+
```yaml
|
18
|
+
flash:
|
19
|
+
actions:
|
20
|
+
create:
|
21
|
+
notice: "%{resource_name} was successfully created."
|
22
|
+
update:
|
23
|
+
notice: "%{resource_name} was successfully updated."
|
24
|
+
destroy:
|
25
|
+
notice: "%{resource_name} was successfully destroyed."
|
26
|
+
alert: "%{resource_name} could not be destroyed."
|
27
|
+
```
|
28
|
+
|
29
|
+
In case the resource contains errors, you should use the failure key on I18n. This is
|
30
|
+
useful to dry up flash messages from your controllers. If you need a specific message
|
31
|
+
for a controller, let's say, for `PostsController`, you can also do:
|
32
|
+
|
33
|
+
```yaml
|
34
|
+
flash:
|
35
|
+
posts:
|
36
|
+
create:
|
37
|
+
notice: "Your post was created and will be published soon"
|
38
|
+
```
|
39
|
+
|
40
|
+
This responder is activated in all non get requests. By default it will use the keys
|
41
|
+
`:notice` and `:alert`, but they can be changed in your application:
|
42
|
+
|
43
|
+
```ruby
|
44
|
+
config.responders.flash_keys = [ :success, :failure ]
|
45
|
+
```
|
46
|
+
|
47
|
+
You can also have embedded HTML. Just create a `_html` scope.
|
48
|
+
|
49
|
+
```yaml
|
50
|
+
flash:
|
51
|
+
actions:
|
52
|
+
create:
|
53
|
+
alert_html: "<strong>OH NOES!</strong> You did it wrong!"
|
54
|
+
posts:
|
55
|
+
create:
|
56
|
+
notice_html: "<strong>Yay!</strong> You did it!"
|
57
|
+
```
|
58
|
+
|
59
|
+
### HttpCacheResponder
|
60
|
+
|
61
|
+
Automatically adds Last-Modified headers to API requests. This
|
62
|
+
allows clients to easily query the server if a resource changed and if the client tries
|
63
|
+
to retrieve a resource that has not been modified, it returns not_modified status.
|
64
|
+
|
65
|
+
### CollectionResponder
|
66
|
+
|
67
|
+
Makes your create and update action redirect to the collection on success.
|
68
|
+
|
69
|
+
## Configuring your own responder
|
70
|
+
|
71
|
+
The first step is instal responders gem and configure it in your application:
|
72
|
+
|
73
|
+
```console
|
74
|
+
gem install responders
|
75
|
+
```
|
76
|
+
|
77
|
+
In your Gemfile, add this line:
|
78
|
+
|
79
|
+
```ruby
|
80
|
+
gem 'responders'
|
81
|
+
```
|
82
|
+
|
83
|
+
Responders only provides a set of modules, to use them, you have to create your own
|
84
|
+
responder. This can be done inside the lib folder for example:
|
85
|
+
|
86
|
+
```ruby
|
87
|
+
# lib/app_responder.rb
|
88
|
+
class AppResponder < ActionController::Responder
|
89
|
+
include Responders::FlashResponder
|
90
|
+
include Responders::HttpCacheResponder
|
91
|
+
end
|
92
|
+
```
|
93
|
+
|
94
|
+
And then you need to configure your application to use it:
|
95
|
+
|
96
|
+
```ruby
|
97
|
+
# app/controllers/application_controller.rb
|
98
|
+
require "app_responder"
|
99
|
+
|
100
|
+
class ApplicationController < ActionController::Base
|
101
|
+
self.responder = AppResponder
|
102
|
+
respond_to :html
|
103
|
+
end
|
104
|
+
```
|
105
|
+
|
106
|
+
Or, for your convenience, just do:
|
107
|
+
|
108
|
+
```console
|
109
|
+
rails generate responders:install
|
110
|
+
```
|
111
|
+
|
112
|
+
## Controller method
|
113
|
+
|
114
|
+
This gem also includes the controller method `responders`, which allows you to cherry-pick which
|
115
|
+
responders you want included in your controller.
|
116
|
+
|
117
|
+
```ruby
|
118
|
+
class InvitationsController < ApplicationController
|
119
|
+
responders :flash, :http_cache
|
120
|
+
end
|
121
|
+
```
|
122
|
+
|
123
|
+
## Generator
|
124
|
+
|
125
|
+
This gem also includes a responders controller generator, so your scaffold can be customized
|
126
|
+
to use `respond_with` instead of default `respond_to` blocks. Installing this gem automatically
|
127
|
+
sets the generator.
|
128
|
+
|
129
|
+
## Bugs and Feedback
|
130
|
+
|
131
|
+
If you discover any bugs or want to drop a line, feel free to create an issue on GitHub.
|
132
|
+
|
133
|
+
http://github.com/plataformatec/responders/issues
|
134
|
+
|
135
|
+
MIT License. Copyright 2012 Plataforma Tecnologia. http://blog.plataformatec.com.br
|
data/lib/responders.rb
CHANGED
@@ -9,6 +9,9 @@ module Responders
|
|
9
9
|
|
10
10
|
class Railtie < ::Rails::Railtie
|
11
11
|
config.responders = ActiveSupport::OrderedOptions.new
|
12
|
+
config.responders.flash_keys = [ :notice, :alert ]
|
13
|
+
config.responders.namespace_lookup = false
|
14
|
+
|
12
15
|
if config.respond_to?(:app_generators)
|
13
16
|
config.app_generators.scaffold_controller = :responders_controller
|
14
17
|
else
|
@@ -20,9 +23,8 @@ module Responders
|
|
20
23
|
I18n.load_path << File.expand_path('../responders/locales/en.yml', __FILE__)
|
21
24
|
|
22
25
|
initializer "responders.flash_responder" do |app|
|
23
|
-
|
24
|
-
|
25
|
-
end
|
26
|
+
Responders::FlashResponder.flash_keys = app.config.responders.flash_keys
|
27
|
+
Responders::FlashResponder.namespace_lookup = app.config.responders.namespace_lookup
|
26
28
|
end
|
27
29
|
end
|
28
30
|
end
|
@@ -83,18 +83,20 @@ module Responders
|
|
83
83
|
# and :alert.
|
84
84
|
#
|
85
85
|
module FlashResponder
|
86
|
-
|
87
|
-
|
86
|
+
class << self
|
87
|
+
attr_accessor :flash_keys, :namespace_lookup, :helper
|
88
|
+
end
|
88
89
|
|
89
|
-
|
90
|
-
|
90
|
+
self.flash_keys = [ :notice, :alert ]
|
91
|
+
self.namespace_lookup = false
|
92
|
+
self.helper = Object.new.extend(ActionView::Helpers::TranslationHelper)
|
91
93
|
|
92
94
|
def initialize(controller, resources, options={})
|
93
95
|
super
|
94
96
|
@flash = options.delete(:flash)
|
95
97
|
@notice = options.delete(:notice)
|
96
98
|
@alert = options.delete(:alert)
|
97
|
-
@flash_now = options.delete(:flash_now)
|
99
|
+
@flash_now = options.delete(:flash_now) { :on_failure }
|
98
100
|
end
|
99
101
|
|
100
102
|
def to_html
|
@@ -163,10 +165,11 @@ module Responders
|
|
163
165
|
def flash_defaults_by_namespace(status) #:nodoc:
|
164
166
|
defaults = []
|
165
167
|
slices = controller.controller_path.split('/')
|
168
|
+
lookup = Responders::FlashResponder.namespace_lookup
|
166
169
|
|
167
|
-
|
170
|
+
begin
|
168
171
|
controller_scope = :"flash.#{slices.fill(controller.controller_name, -1).join('.')}.#{controller.action_name}.#{status}"
|
169
|
-
actions_scope = :"flash.#{slices.fill(
|
172
|
+
actions_scope = :"flash.#{slices.fill('actions', -1).join('.')}.#{controller.action_name}.#{status}"
|
170
173
|
|
171
174
|
defaults << :"#{controller_scope}_html"
|
172
175
|
defaults << controller_scope
|
@@ -175,9 +178,9 @@ module Responders
|
|
175
178
|
defaults << actions_scope
|
176
179
|
|
177
180
|
slices.shift
|
178
|
-
end
|
181
|
+
end while slices.size > 0 && lookup
|
179
182
|
|
180
183
|
defaults << ""
|
181
184
|
end
|
182
185
|
end
|
183
|
-
end
|
186
|
+
end
|
data/lib/responders/version.rb
CHANGED
@@ -34,6 +34,11 @@ class AddressesController < ApplicationController
|
|
34
34
|
respond_with(@resource)
|
35
35
|
end
|
36
36
|
|
37
|
+
def flexible
|
38
|
+
options = params[:responder_options] || {}
|
39
|
+
respond_with(@resource, options)
|
40
|
+
end
|
41
|
+
|
37
42
|
protected
|
38
43
|
|
39
44
|
def interpolation_options
|
@@ -154,6 +159,16 @@ class FlashResponderTest < ActionController::TestCase
|
|
154
159
|
assert_equal "<strong>Yay!</strong> <script>alert(1)</script>", flash[:xss]
|
155
160
|
end
|
156
161
|
|
162
|
+
def test_sets_flash_now_on_failure_by_default
|
163
|
+
post :another, :fail => true
|
164
|
+
assert_flash_now :alert
|
165
|
+
end
|
166
|
+
|
167
|
+
def test_never_set_flash_now
|
168
|
+
post :flexible, :fail => true, :responder_options => { :flash_now => false, :alert => "Warning" }
|
169
|
+
assert_not_flash_now :alert
|
170
|
+
end
|
171
|
+
|
157
172
|
# If we have flash.now, it's always marked as used.
|
158
173
|
def assert_flash_now(k)
|
159
174
|
assert flash.instance_variable_get(:@used).to_a.include?(k.to_sym),
|
@@ -161,7 +176,8 @@ class FlashResponderTest < ActionController::TestCase
|
|
161
176
|
end
|
162
177
|
|
163
178
|
def assert_not_flash_now(k)
|
164
|
-
assert
|
179
|
+
assert flash[k], "Expected #{k} to be set"
|
180
|
+
assert !flash.instance_variable_get(:@used).include?(k.to_sym),
|
165
181
|
"Expected #{k} to not be in flash.now, but it is."
|
166
182
|
end
|
167
183
|
end
|
@@ -185,7 +201,15 @@ class NamespacedFlashResponderTest < ActionController::TestCase
|
|
185
201
|
end
|
186
202
|
|
187
203
|
def test_fallbacks_to_non_namespaced_controller_flash_message
|
204
|
+
Responders::FlashResponder.namespace_lookup = true
|
188
205
|
delete :destroy
|
189
206
|
assert_equal "Successfully deleted the chosen address at Ocean Avenue", flash[:notice]
|
207
|
+
ensure
|
208
|
+
Responders::FlashResponder.namespace_lookup = false
|
209
|
+
end
|
210
|
+
|
211
|
+
def test_does_not_fallbacks_to_non_namespaced_controller_flash_message_if_disabled
|
212
|
+
delete :destroy
|
213
|
+
assert_equal nil, flash[:notice]
|
190
214
|
end
|
191
|
-
end
|
215
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: responders
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-03-
|
12
|
+
date: 2012-03-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: railties
|
16
|
-
requirement: &
|
16
|
+
requirement: &2156123020 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,19 +21,21 @@ dependencies:
|
|
21
21
|
version: '3.1'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2156123020
|
25
25
|
description: A set of Rails 3 responders to dry up your application
|
26
26
|
email: contact@plataformatec.com.br
|
27
27
|
executables: []
|
28
28
|
extensions: []
|
29
29
|
extra_rdoc_files: []
|
30
30
|
files:
|
31
|
-
-
|
31
|
+
- .travis.yml
|
32
|
+
- CHANGELOG.md
|
32
33
|
- Gemfile
|
33
34
|
- Gemfile.lock
|
34
35
|
- MIT-LICENSE
|
35
|
-
- README.
|
36
|
+
- README.md
|
36
37
|
- Rakefile
|
38
|
+
- gemfiles/Gemfile-rails.3.1.x
|
37
39
|
- lib/generators/rails/USAGE
|
38
40
|
- lib/generators/rails/responders_controller_generator.rb
|
39
41
|
- lib/generators/rails/templates/controller.rb
|
@@ -67,21 +69,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
67
69
|
- - ! '>='
|
68
70
|
- !ruby/object:Gem::Version
|
69
71
|
version: '0'
|
70
|
-
segments:
|
71
|
-
- 0
|
72
|
-
hash: -73151246775261150
|
73
72
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
74
73
|
none: false
|
75
74
|
requirements:
|
76
75
|
- - ! '>='
|
77
76
|
- !ruby/object:Gem::Version
|
78
77
|
version: '0'
|
79
|
-
segments:
|
80
|
-
- 0
|
81
|
-
hash: -73151246775261150
|
82
78
|
requirements: []
|
83
79
|
rubyforge_project: responders
|
84
|
-
rubygems_version: 1.8.
|
80
|
+
rubygems_version: 1.8.15
|
85
81
|
signing_key:
|
86
82
|
specification_version: 3
|
87
83
|
summary: A set of Rails 3 responders to dry up your application
|
data/CHANGELOG.rdoc
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
== 0.8
|
2
|
-
|
3
|
-
* Allow embedded HTML in flash messages
|
4
|
-
|
5
|
-
== 0.7
|
6
|
-
|
7
|
-
* Support Rails 3.1 onward
|
8
|
-
* Support namespaced engines
|
9
|
-
|
10
|
-
== 0.6
|
11
|
-
|
12
|
-
* Allow engine detection in generators
|
13
|
-
* HTTP Cache is no longer triggered for collections
|
14
|
-
* :js now sets the flash.now by default, instead of flash
|
15
|
-
* Renamed responders_install generator to responders:install
|
16
|
-
* Added CollectionResponder which allows you to always redirect to the collection path (index action) after POST/PUT/DELETE
|
17
|
-
|
18
|
-
== 0.5
|
19
|
-
|
20
|
-
* Added Railtie and better Rails 3 support
|
21
|
-
* Added :flash_now as option
|
22
|
-
|
23
|
-
== 0.4
|
24
|
-
|
25
|
-
* Added Responders::FlashResponder.flash_keys and default to [ :notice, :alert ]
|
26
|
-
* Added support to respond_with(@resource, :notice => "Yes!", :alert => "No!")
|
27
|
-
|
28
|
-
== 0.1
|
29
|
-
|
30
|
-
* Added FlashResponder
|
31
|
-
* Added HttpCacheResponder
|
32
|
-
* Added responders generators
|
data/README.rdoc
DELETED
@@ -1,110 +0,0 @@
|
|
1
|
-
== Responders
|
2
|
-
|
3
|
-
A set of responders modules to dry up your Rails 3 app. If you are interested in the version
|
4
|
-
to be used with Rails 2.3 together with Inherited Resources, please check this branch instead:
|
5
|
-
|
6
|
-
http://github.com/plataformatec/responders/tree/v0.4
|
7
|
-
|
8
|
-
* FlashResponder - Sets the flash based on the controller action and resource status.
|
9
|
-
For instance, if you do: respond_with(@post) on a POST request and the resource @post
|
10
|
-
does not contain errors, it will automatically set the flash message to
|
11
|
-
"Post was successfully created" as long as you configure your I18n file:
|
12
|
-
|
13
|
-
flash:
|
14
|
-
actions:
|
15
|
-
create:
|
16
|
-
notice: "%{resource_name} was successfully created."
|
17
|
-
update:
|
18
|
-
notice: "%{resource_name} was successfully updated."
|
19
|
-
destroy:
|
20
|
-
notice: "%{resource_name} was successfully destroyed."
|
21
|
-
alert: "%{resource_name} could not be destroyed."
|
22
|
-
|
23
|
-
In case the resource contains errors, you should use the failure key on I18n. This is
|
24
|
-
useful to dry up flash messages from your controllers. If you need a specific message
|
25
|
-
for a controller, let's say, for PostsController, you can also do:
|
26
|
-
|
27
|
-
flash:
|
28
|
-
posts:
|
29
|
-
create:
|
30
|
-
notice: "Your post was created and will be published soon"
|
31
|
-
|
32
|
-
This responder is activated in all non get requests. By default it will use the keys
|
33
|
-
:notice and :alert, but they can be changed in your application:
|
34
|
-
|
35
|
-
config.responders.flash_keys = [ :success, :failure ]
|
36
|
-
|
37
|
-
Or:
|
38
|
-
|
39
|
-
Responders::FlashResponder.flash_keys = [ :success, :failure ]
|
40
|
-
|
41
|
-
You can also have embedded HTML. Just create a <tt>_html</tt> scope.
|
42
|
-
|
43
|
-
flash:
|
44
|
-
actions:
|
45
|
-
create:
|
46
|
-
alert_html: "<strong>OH NOES!</strong> You did it wrong!"
|
47
|
-
posts:
|
48
|
-
create:
|
49
|
-
notice_html: "<strong>Yay!</strong> You did it!"
|
50
|
-
|
51
|
-
* HttpCacheResponder - Automatically adds Last-Modified headers to API requests. This
|
52
|
-
allows clients to easily query the server if a resource changed and if the client tries
|
53
|
-
to retrieve a resource that has not been modified, it returns not_modified status.
|
54
|
-
|
55
|
-
* CollectionResponder - Makes your create and update action redirect to the collection on success.
|
56
|
-
|
57
|
-
== Configuring your own responder
|
58
|
-
|
59
|
-
The first step is instal responders gem and configure it in your application:
|
60
|
-
|
61
|
-
gem install responders
|
62
|
-
|
63
|
-
In your Gemfile, add this line:
|
64
|
-
|
65
|
-
gem "responders"
|
66
|
-
|
67
|
-
Responders only provides a set of modules, to use them, you have to create your own
|
68
|
-
responder. This can be done inside the lib folder for example:
|
69
|
-
|
70
|
-
# lib/app_responder.rb
|
71
|
-
class AppResponder < ActionController::Responder
|
72
|
-
include Responders::FlashResponder
|
73
|
-
include Responders::HttpCacheResponder
|
74
|
-
end
|
75
|
-
|
76
|
-
And then you need to configure your application to use it:
|
77
|
-
|
78
|
-
# app/controllers/application_controller.rb
|
79
|
-
require "app_responder"
|
80
|
-
|
81
|
-
class ApplicationController < ActionController::Base
|
82
|
-
self.responder = AppResponder
|
83
|
-
respond_to :html
|
84
|
-
end
|
85
|
-
|
86
|
-
Or, for your convenience, just do:
|
87
|
-
|
88
|
-
rails generate responders:install
|
89
|
-
|
90
|
-
== Controller method
|
91
|
-
|
92
|
-
This gem also includes the controller method 'responders', which allows you to cherry-pick which responders you want included in your controller.
|
93
|
-
|
94
|
-
class InvitationsController < ApplicationController
|
95
|
-
responders :flash, :http_cache
|
96
|
-
end
|
97
|
-
|
98
|
-
== Generator
|
99
|
-
|
100
|
-
This gem also includes a responders controller generator, so your scaffold can be customized
|
101
|
-
to use respond_with instead of default respond_to blocks. Installing this gem automatically
|
102
|
-
sets the generator.
|
103
|
-
|
104
|
-
== Bugs and Feedback
|
105
|
-
|
106
|
-
If you discover any bugs or want to drop a line, feel free to create an issue on GitHub.
|
107
|
-
|
108
|
-
http://github.com/plataformatec/responders/issues
|
109
|
-
|
110
|
-
MIT License. Copyright 2012 Plataforma Tecnologia. http://blog.plataformatec.com.br
|