stackable_flash 0.0.4 → 0.0.5

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 CHANGED
@@ -1,3 +1,13 @@
1
+ Version 0.0.5 - AUG.22.2012
2
+ - Added Rspec Matchers and Test::Unit helpers.
3
+
4
+ Version 0.0.4 - AUG.21.2012
5
+ - Refactoring
6
+ - Added ability to cold boot a flash so you can call flash[:notice] << 'Hello' without initializing it first
7
+
8
+ Version 0.0.3 - AUG.20.2012
9
+ - Switch to proper Railtie
10
+
1
11
  Version 0.0.2 - AUG.18.2012
2
12
  - Added rake dependency
3
13
  - Expanded README
data/README.md CHANGED
@@ -3,7 +3,7 @@ stackable_flash
3
3
 
4
4
  Allows flashes to stack intelligently, while preserving existing behavior of Rails' FlashHash.
5
5
 
6
- Stackable Flash overrides the :[]= method of Rails' FlashHash with the result being that each flash key is an array.
6
+ Stackable Flash overrides the `:[]=` method of Rails' FlashHash with the result being that each flash key is an array.
7
7
  It is designed following the "Principle of least surprise", so in most ways the flash works as it always has.
8
8
  Only now you can push things onto the array with `:<<`, and generally interact with the flash as an array.
9
9
  In order to be as compatible as possible with existing implementations of the FlashHash on websites, `:[]=` will still
@@ -109,8 +109,8 @@ This gem is used by the cacheable_flash gem to provide stacking flashes. You ca
109
109
  5. Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
110
110
  6. Create new Pull Request
111
111
 
112
- == Copyright
112
+ ## Copyright
113
113
 
114
114
  Licensed under the MIT License.
115
115
 
116
- - Copyright (c) 2012 Peter H. Boling (http://peterboling.com). See LICENSE for further details.
116
+ * Copyright (c) 2012 Peter H. Boling (http://peterboling.com). See LICENSE for further details.
@@ -0,0 +1,21 @@
1
+ require 'stackable_flash/test_helpers'
2
+
3
+ module StackableFlash
4
+ module RspecMatchers
5
+ include StackableFlash::TestHelpers
6
+ RSpec::Matchers.define :have_stackable_flash do |expecting|
7
+ define_method :has_stackable_flash? do |slash|
8
+ flash_in_stack(slash, expecting)
9
+ end
10
+
11
+ match{|slash| has_stackable_flash?(slash)}
12
+
13
+ failure_message_for_should do |slash|
14
+ "expected flash to be or include #{expected.inspect}, but got #{slash}"
15
+ end
16
+ failure_message_for_should_not do |slash|
17
+ "expected flash to not be and not include #{expected.inspect}, but got #{slash}"
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,15 @@
1
+ module StackableFlash
2
+ module TestHelpers
3
+
4
+ def flash_in_stack(slash_for_status, expecting)
5
+ return true if slash_for_status == expecting
6
+ if slash_for_status.kind_of?(Array)
7
+ matches = slash_for_status.select do |to_check|
8
+ to_check == expecting
9
+ end
10
+ return matches.length > 0
11
+ end
12
+ end
13
+
14
+ end
15
+ end
@@ -1,3 +1,3 @@
1
1
  module StackableFlash
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
data/spec/spec_helper.rb CHANGED
@@ -4,6 +4,7 @@ require File.expand_path("../dummy/config/environment", __FILE__)
4
4
 
5
5
  require 'rspec/rails'
6
6
  require 'stackable_flash'
7
+ require 'stackable_flash/rspec_matchers'
7
8
 
8
9
  ENGINE_RAILS_ROOT=File.join(File.dirname(__FILE__), '../')
9
10
 
@@ -22,4 +23,6 @@ RSpec.configure do |config|
22
23
  # --seed 1234
23
24
  config.order = 'random'
24
25
 
26
+ config.include StackableFlash::RspecMatchers
27
+
25
28
  end
@@ -0,0 +1,217 @@
1
+ require 'spec_helper'
2
+
3
+ describe StackableFlash::StackLayer do
4
+ before(:each) do
5
+ @flash = ActionDispatch::Flash::FlashHash.new
6
+ end
7
+ describe "tests against strange things" do
8
+ context "should" do
9
+ it "should be able to test against odd values like an Object.new" do
10
+ lambda {@flash[:notice].should have_stackable_flash(Object.new)}.should raise_error RSpec::Expectations::ExpectationNotMetError
11
+ end
12
+ it "should be able to test against odd values like {:hello => 'asdf'}" do
13
+ lambda {@flash[:notice].should have_stackable_flash({:hello => 'asdf'})}.should raise_error RSpec::Expectations::ExpectationNotMetError
14
+ end
15
+ end
16
+ context "should_not" do
17
+ it "should be able to test against odd values like an Object.new" do
18
+ lambda {@flash[:notice].should_not have_stackable_flash(Object.new)}.should_not raise_exception
19
+ end
20
+ it "should be able to test against odd values like {:hello => 'asdf'}" do
21
+ lambda {@flash[:notice].should_not have_stackable_flash({:hello => 'asdf'})}.should_not raise_exception
22
+ end
23
+ end
24
+ end
25
+
26
+ describe "have_stackable_flash after using :[]=" do
27
+ context "a string" do
28
+ context "when there is not an existing flash message" do
29
+ context "sets the flash message" do
30
+ before(:each) do
31
+ @flash[:notice] = 'message'
32
+ end
33
+ it "should match the value itself" do
34
+ @flash[:notice].should have_stackable_flash('message')
35
+ end
36
+ it "should match the entire array" do
37
+ @flash[:notice].should have_stackable_flash(['message'])
38
+ end
39
+ end
40
+ end
41
+ context "when there is an existing flash message" do
42
+ context "overwrite the original string" do
43
+ before(:each) do
44
+ @flash[:notice] = 'original'
45
+ @flash[:notice] = ''
46
+ end
47
+ it "should match the value itself" do
48
+ @flash[:notice].should have_stackable_flash('')
49
+ end
50
+ it "should match the entire array" do
51
+ @flash[:notice].should have_stackable_flash([''])
52
+ end
53
+ end
54
+ context "overwrite the original array" do
55
+ before(:each) do
56
+ @flash[:notice] = ['original']
57
+ @flash[:notice] = ''
58
+ end
59
+ it "should match the value itself" do
60
+ @flash[:notice].should_not have_stackable_flash('original')
61
+ @flash[:notice].should_not have_stackable_flash(['original'])
62
+ @flash[:notice].should have_stackable_flash('')
63
+ end
64
+ it "should match the entire array" do
65
+ @flash[:notice].should have_stackable_flash([''])
66
+ end
67
+ end
68
+ end
69
+ end
70
+ context "an array" do
71
+ context "when there is not an existing flash message" do
72
+ context "sets the flash message" do
73
+ before(:each) do
74
+ @flash[:notice] = ['message']
75
+ end
76
+ it "should match the value itself" do
77
+ @flash[:notice].should have_stackable_flash('message')
78
+ end
79
+ it "should match the entire array" do
80
+ @flash[:notice].should have_stackable_flash(['message'])
81
+ end
82
+ end
83
+ end
84
+ context "when there is an existing flash message" do
85
+ context "overwrite the original string" do
86
+ before(:each) do
87
+ @flash[:notice] = 'original'
88
+ @flash[:notice] = ['message']
89
+ end
90
+ it "should match the value itself" do
91
+ @flash[:notice].should_not have_stackable_flash('original')
92
+ @flash[:notice].should have_stackable_flash('message')
93
+ end
94
+ it "should match the entire array" do
95
+ @flash[:notice].should have_stackable_flash(['message'])
96
+ end
97
+ end
98
+ context "overwrite the original array" do
99
+ before(:each) do
100
+ @flash[:notice] = ['original']
101
+ @flash[:notice] = ['message']
102
+ end
103
+ it "should match the value itself" do
104
+ @flash[:notice].should_not have_stackable_flash(['original'])
105
+ @flash[:notice].should_not have_stackable_flash('original')
106
+ @flash[:notice].should have_stackable_flash('message')
107
+ end
108
+ it "should match the entire array" do
109
+ @flash[:notice].should have_stackable_flash(['message'])
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
115
+ # Actually testing how it interacts with Array's :<< method
116
+ describe "have_stackable_flash after using :<<" do
117
+ context "a string" do
118
+ context "should build a stack" do
119
+ before(:each) do
120
+ @flash[:notice] = 'original'
121
+ @flash[:notice] << 'message'
122
+ end
123
+ it "should match the value itself" do
124
+ @flash[:notice].should have_stackable_flash('original')
125
+ @flash[:notice].should have_stackable_flash('message')
126
+ end
127
+ it "should match the entire array" do
128
+ @flash[:notice].should have_stackable_flash(['original','message'])
129
+ end
130
+ end
131
+ end
132
+ context "an array" do
133
+ context "should build a stack" do
134
+ before(:each) do
135
+ @flash[:notice] = ['original']
136
+ @flash[:notice] << 'message'
137
+ end
138
+ it "should match the value itself" do
139
+ @flash[:notice].should_not have_stackable_flash(['original'])
140
+ @flash[:notice].should have_stackable_flash('original')
141
+ @flash[:notice].should have_stackable_flash('message')
142
+ end
143
+ it "should match the entire array" do
144
+ @flash[:notice].should have_stackable_flash(['original','message'])
145
+ end
146
+ end
147
+ context "should allow any data type" do
148
+ before(:each) do
149
+ @flash[:notice] = ['original']
150
+ @flash[:notice] << ['nested']
151
+ @flash[:notice] << 123
152
+ end
153
+ it "should match the value itself" do
154
+ @flash[:notice].should have_stackable_flash('original')
155
+ @flash[:notice].should_not have_stackable_flash(['original'])
156
+ @flash[:notice].should have_stackable_flash(['nested'])
157
+ @flash[:notice].should_not have_stackable_flash('nested')
158
+ @flash[:notice].should have_stackable_flash(123)
159
+ end
160
+ it "should match the entire array" do
161
+ @flash[:notice].should have_stackable_flash(['original',['nested'],123])
162
+ end
163
+ end
164
+ end
165
+ end
166
+
167
+ describe "mixed use" do
168
+ after(:each) do
169
+ StackableFlash.stacking = true
170
+ end
171
+ context "when StackableFlash is turned off and on" do
172
+ it "should not fail for strings" do
173
+ StackableFlash.stacking = false
174
+ @flash[:notice] = 'original'
175
+ StackableFlash.stacking = true
176
+ @flash[:notice] << 'message'
177
+ @flash[:notice].should have_stackable_flash('originalmessage')
178
+ end
179
+ it "should not fail for an array" do
180
+ StackableFlash.stacking = false
181
+ @flash[:notice] = ['original']
182
+ StackableFlash.stacking = true
183
+ @flash[:notice] << 'message'
184
+ @flash[:notice].should have_stackable_flash('original')
185
+ @flash[:notice].should have_stackable_flash('message')
186
+ @flash[:notice].should have_stackable_flash(['original','message'])
187
+ end
188
+ end
189
+ context "when StackableFlash is turned on and off" do
190
+ it "should not fail for strings" do
191
+ StackableFlash.stacking = true
192
+ @flash[:notice] = 'original'
193
+ StackableFlash.stacking = false
194
+ @flash[:notice] << 'message'
195
+ @flash[:notice].should have_stackable_flash('original')
196
+ @flash[:notice].should have_stackable_flash('message')
197
+ @flash[:notice].should have_stackable_flash(['original','message'])
198
+ end
199
+ end
200
+ end
201
+
202
+ describe "when stackable_flash is off" do
203
+ context "StackableFlash.not_stacked" do
204
+ it "should not fail for strings" do
205
+ StackableFlash.not_stacked do
206
+ @flash[:notice] = 'original'
207
+ @flash[:notice] << 'message'
208
+ @flash[:notice].should have_stackable_flash('originalmessage')
209
+ @flash[:notice].should_not have_stackable_flash('original')
210
+ @flash[:notice].should_not have_stackable_flash('message')
211
+ @flash[:notice].should_not have_stackable_flash(['original','message'])
212
+ end
213
+ end
214
+ end
215
+
216
+ end
217
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stackable_flash
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -126,7 +126,9 @@ files:
126
126
  - lib/stackable_flash/config.rb
127
127
  - lib/stackable_flash/flash_stack.rb
128
128
  - lib/stackable_flash/railtie.rb
129
+ - lib/stackable_flash/rspec_matchers.rb
129
130
  - lib/stackable_flash/stack_layer.rb
131
+ - lib/stackable_flash/test_helpers.rb
130
132
  - lib/stackable_flash/version.rb
131
133
  - spec/controllers/dummy_controller_spec.rb
132
134
  - spec/dummy/Rakefile
@@ -165,6 +167,7 @@ files:
165
167
  - spec/dummy/script/rails
166
168
  - spec/spec_helper.rb
167
169
  - spec/stackable_flash/flash_stack_spec.rb
170
+ - spec/stackable_flash/rspec_matchers_spec.rb
168
171
  - stackable_flash.gemspec
169
172
  homepage: https://github.com/pboling/stackable_flash
170
173
  licenses: []
@@ -228,3 +231,4 @@ test_files:
228
231
  - spec/dummy/script/rails
229
232
  - spec/spec_helper.rb
230
233
  - spec/stackable_flash/flash_stack_spec.rb
234
+ - spec/stackable_flash/rspec_matchers_spec.rb