cacheable_flash 0.3.1 → 0.3.2
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/CHANGELOG +3 -0
- data/cacheable_flash.gemspec +0 -1
- data/lib/cacheable_flash.rb +6 -1
- data/lib/cacheable_flash/config.rb +11 -9
- data/lib/cacheable_flash/cookie_flash.rb +20 -10
- data/lib/cacheable_flash/middleware.rb +2 -0
- data/lib/cacheable_flash/version.rb +1 -1
- data/spec/controllers/comparison_cotroller_spec.rb +2 -0
- data/spec/controllers/dummy_controller_spec.rb +1 -0
- data/spec/requests/integration_spec.rb +1 -0
- metadata +2 -2
data/CHANGELOG
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
0.3.2 - AUG.23.2012
|
2
|
+
* Properly handles stacked flash in cookie flash according to config :append_as option [Peter Boling]
|
3
|
+
|
1
4
|
0.3.1 - AUG.22.2012
|
2
5
|
* Add specs for non stacking use [Peter Boling]
|
3
6
|
* Use stackable_flash/test_helpers instead of reinventing the wheel [Peter Boling]
|
data/cacheable_flash.gemspec
CHANGED
@@ -7,7 +7,6 @@ Gem::Specification.new do |s|
|
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
9
9
|
s.authors = ["Peter H. Boling", "Brian Takita"]
|
10
|
-
s.date = "2012-08-13"
|
11
10
|
s.description = "Allows caching of pages with flash messages by rendering flash\nmessages from a cookie using JavaScript, instead of statically in your Rails\nview template. Flash contents are converted to JSON and placed in\na cookie by an after_filter (default) or a Rack Middleware (option)."
|
12
11
|
s.email = "peter.boling@gmail.com"
|
13
12
|
s.extra_rdoc_files = [
|
data/lib/cacheable_flash.rb
CHANGED
@@ -13,7 +13,7 @@ module CacheableFlash
|
|
13
13
|
# By default stacking is false, but it can be turned on with:
|
14
14
|
# CacheableFlash.configure do |config|
|
15
15
|
# config[:stacking] = true
|
16
|
-
# config[:append_as] = :br
|
16
|
+
# config[:append_as] = :br # Pick a value, set your own proc, or don't: passes the JSON'd array to the cookie
|
17
17
|
# end
|
18
18
|
StackableFlash.stacking = false
|
19
19
|
|
@@ -37,4 +37,9 @@ module CacheableFlash
|
|
37
37
|
# because flashes are only removed from cookies when they are used.
|
38
38
|
flash.clear
|
39
39
|
end
|
40
|
+
|
41
|
+
# simply abstracts the StackableFlash.stacking method
|
42
|
+
def self.stacking
|
43
|
+
StackableFlash.stacking
|
44
|
+
end
|
40
45
|
end
|
@@ -21,17 +21,19 @@ module CacheableFlash
|
|
21
21
|
yield @config
|
22
22
|
if @config[:stacking]
|
23
23
|
StackableFlash.stacking = true
|
24
|
-
StackableFlash::Config.configure do
|
25
|
-
|
24
|
+
StackableFlash::Config.configure do |config|
|
25
|
+
# by default behave like regular non-stacking flash
|
26
26
|
if @config[:append_as].respond_to?(:call)
|
27
|
-
|
27
|
+
config[:stack_with_proc] = @config[:append_as]
|
28
28
|
else
|
29
|
-
|
30
|
-
|
31
|
-
when :
|
32
|
-
when :
|
33
|
-
when :
|
34
|
-
when :
|
29
|
+
config[:stack_with_proc] = case @config[:append_as]
|
30
|
+
# Escape as many strings as we can!
|
31
|
+
when :br then Proc.new {|arr| arr.map { |x| x.kind_of?(String) && !x.html_safe? ? ERB::Util.html_escape(x) : x }.join('<br/>') }
|
32
|
+
when :array then Proc.new {|arr| arr.map { |x| x.kind_of?(String) && !x.html_safe? ? ERB::Util.html_escape(x) : x } }
|
33
|
+
when :p then Proc.new {|arr| arr.map! {|x| "<p>#{x.kind_of?(String) && !x.html_safe? ? ERB::Util.html_escape(x) : x }</p>"}.join }
|
34
|
+
when :ul then Proc.new {|arr| '<ul>' + arr.map! {|x| "<li>#{x.kind_of?(String) && !x.html_safe? ? ERB::Util.html_escape(x) : x }</li>"}.join + '</ul>' }
|
35
|
+
when :ol then Proc.new {|arr| '<ol>' + arr.map! {|x| "<li>#{x.kind_of?(String) && !x.html_safe? ? ERB::Util.html_escape(x) : x }</li>"}.join + '</ol>' }
|
36
|
+
else Proc.new {|arr| arr.map { |x| x.kind_of?(String) && !x.html_safe? ? ERB::Util.html_escape(x) : x }.join('<br/>') }
|
35
37
|
end
|
36
38
|
end
|
37
39
|
end
|
@@ -1,23 +1,33 @@
|
|
1
1
|
module CacheableFlash
|
2
2
|
module CookieFlash
|
3
|
+
|
4
|
+
# @parameters
|
5
|
+
# cookies -
|
6
|
+
# There might be crusty flash from a previous request, or set elsewhere, already in the cookie.
|
7
|
+
# Pull it out and parse it so we can preserve it.
|
8
|
+
# flash -
|
9
|
+
# This is the fresh, super-stacked (by stackable_flash gem) FlashHash from the current request.
|
10
|
+
# Needs to be added to the cookie flash.
|
3
11
|
def cookie_flash(flash, cookies)
|
4
12
|
cflash = (JSON.parse(cookies['flash']) if cookies['flash']) || {} rescue {}
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
end
|
13
|
+
|
14
|
+
flash.each do |key, value| # key like :notice, or :error, or :sticky
|
15
|
+
# When stacking we won't be escaping anything here, because will be array, not string
|
16
|
+
value = ERB::Util.html_escape(value) if value.kind_of?(String) && !value.html_safe? # Since v0.3.0 only escaping strings
|
10
17
|
skey = key.to_s
|
11
18
|
# This allows any data type to be stored in the cookie; important for using an array as the value with
|
12
19
|
# stackable_flash
|
13
|
-
|
14
|
-
|
15
|
-
|
20
|
+
# The cookie flash will generally be set to a value stacked according to the :stack_with_proc of stackable_flash
|
21
|
+
# But when there is already a value for the cookie when we get here, we need to join them somehow.
|
22
|
+
stacked_value = value.respond_to?(:stack) ? value.stack : value
|
23
|
+
if cflash[skey].kind_of?(Array) # Just because it could be an array
|
24
|
+
if stacked_value.kind_of?(Array)
|
25
|
+
cflash[skey] += stacked_value
|
16
26
|
else
|
17
|
-
cflash[skey] <<
|
27
|
+
cflash[skey] << stacked_value
|
18
28
|
end
|
19
29
|
else
|
20
|
-
cflash[skey] =
|
30
|
+
cflash[skey] = stacked_value
|
21
31
|
end
|
22
32
|
end
|
23
33
|
# I have forgotten why the gsub + matters, so NOTE: to future self: document weird shit.
|
@@ -15,11 +15,13 @@ module CacheableFlash
|
|
15
15
|
env_flash = env[FLASH_HASH_KEY]
|
16
16
|
|
17
17
|
if env_flash
|
18
|
+
# There is a flash set from this request, merge it into the cookie flash (which may already be populated)
|
18
19
|
response = Rack::Response.new(body, status, headers)
|
19
20
|
cookies = env["rack.cookies"] || {}
|
20
21
|
response.set_cookie("flash", { :value => cookie_flash(env_flash, cookies), :path => "/" })
|
21
22
|
response.finish
|
22
23
|
else
|
24
|
+
# There is no flash set in this request but there are leftovers from previous requests still in the cookie
|
23
25
|
request = ActionDispatch::Request.new(env)
|
24
26
|
cflash = request.respond_to?(:cookie_jar) ?
|
25
27
|
request.cookie_jar['flash'] :
|
@@ -39,6 +39,7 @@ describe ComparisonController do
|
|
39
39
|
before(:each) do
|
40
40
|
CacheableFlash::Config.configure do |config|
|
41
41
|
config[:stacking] = true
|
42
|
+
config[:append_as] = :array
|
42
43
|
end
|
43
44
|
end
|
44
45
|
after(:each) do
|
@@ -164,6 +165,7 @@ describe ComparisonController do
|
|
164
165
|
before(:each) do
|
165
166
|
CacheableFlash::Config.configure do |config|
|
166
167
|
config[:stacking] = true
|
168
|
+
config[:append_as] = :array
|
167
169
|
end
|
168
170
|
end
|
169
171
|
after(:each) do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cacheable_flash
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-08-
|
13
|
+
date: 2012-08-23 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: stackable_flash
|