Class: ActionDispatch::Flash::FlashHash

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
actionpack/lib/action_dispatch/middleware/flash.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Enumerable

#as_json, #compact_blank, #exclude?, #excluding, #including, #index_by, #index_with, #many?, #pluck, #sum, #without

Constructor Details

#initialize(flashes = {}, discard = []) ⇒ FlashHash

:nodoc:



141
142
143
144
145
# File 'actionpack/lib/action_dispatch/middleware/flash.rb', line 141

def initialize(flashes = {}, discard = []) #:nodoc:
  @discard = Set.new(stringify_array(discard))
  @flashes = flashes.stringify_keys
  @now     = nil
end

Class Method Details

.from_session_value(value) ⇒ Object

:nodoc:



114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'actionpack/lib/action_dispatch/middleware/flash.rb', line 114

def self.from_session_value(value) #:nodoc:
  case value
  when FlashHash # Rails 3.1, 3.2
    flashes = value.instance_variable_get(:@flashes)
    if discard = value.instance_variable_get(:@used)
      flashes.except!(*discard)
    end
    new(flashes, flashes.keys)
  when Hash # Rails 4.0
    flashes = value["flashes"]
    if discard = value["discard"]
      flashes.except!(*discard)
    end
    new(flashes, flashes.keys)
  else
    new
  end
end

Instance Method Details

#[](k) ⇒ Object



161
162
163
# File 'actionpack/lib/action_dispatch/middleware/flash.rb', line 161

def [](k)
  @flashes[k.to_s]
end

#[]=(k, v) ⇒ Object



155
156
157
158
159
# File 'actionpack/lib/action_dispatch/middleware/flash.rb', line 155

def []=(k, v)
  k = k.to_s
  @discard.delete k
  @flashes[k] = v
end

#alertObject

Convenience accessor for flash[:alert].



262
263
264
# File 'actionpack/lib/action_dispatch/middleware/flash.rb', line 262

def alert
  self[:alert]
end

#alert=(message) ⇒ Object

Convenience accessor for flash[:alert]=.



267
268
269
# File 'actionpack/lib/action_dispatch/middleware/flash.rb', line 267

def alert=(message)
  self[:alert] = message
end

#clearObject



194
195
196
197
# File 'actionpack/lib/action_dispatch/middleware/flash.rb', line 194

def clear
  @discard.clear
  @flashes.clear
end

#delete(key) ⇒ Object



179
180
181
182
183
184
# File 'actionpack/lib/action_dispatch/middleware/flash.rb', line 179

def delete(key)
  key = key.to_s
  @discard.delete key
  @flashes.delete key
  self
end

#discard(k = nil) ⇒ Object

Marks the entire flash or a single flash entry to be discarded by the end of the current action:

flash.discard              # discard the entire flash at the end of the current action
flash.discard(:warning)    # discard only the "warning" entry at the end of the current action


247
248
249
250
251
# File 'actionpack/lib/action_dispatch/middleware/flash.rb', line 247

def discard(k = nil)
  k = k.to_s if k
  @discard.merge Array(k || keys)
  k ? self[k] : self
end

#each(&block) ⇒ Object



199
200
201
# File 'actionpack/lib/action_dispatch/middleware/flash.rb', line 199

def each(&block)
  @flashes.each(&block)
end

#empty?Boolean

Returns:

  • (Boolean)


190
191
192
# File 'actionpack/lib/action_dispatch/middleware/flash.rb', line 190

def empty?
  @flashes.empty?
end

#initialize_copy(other) ⇒ Object



147
148
149
150
151
152
153
# File 'actionpack/lib/action_dispatch/middleware/flash.rb', line 147

def initialize_copy(other)
  if other.now_is_loaded?
    @now = other.now.dup
    @now.flash = self
  end
  super
end

#keep(k = nil) ⇒ Object

Keeps either the entire current flash or a specific flash entry available for the next action:

flash.keep            # keeps the entire flash
flash.keep(:notice)   # keeps only the "notice" entry, the rest of the flash is discarded


237
238
239
240
241
# File 'actionpack/lib/action_dispatch/middleware/flash.rb', line 237

def keep(k = nil)
  k = k.to_s if k
  @discard.subtract Array(k || keys)
  k ? self[k] : self
end

#key?(name) ⇒ Boolean

Returns:

  • (Boolean)


175
176
177
# File 'actionpack/lib/action_dispatch/middleware/flash.rb', line 175

def key?(name)
  @flashes.key? name.to_s
end

#keysObject



171
172
173
# File 'actionpack/lib/action_dispatch/middleware/flash.rb', line 171

def keys
  @flashes.keys
end

#noticeObject

Convenience accessor for flash[:notice].



272
273
274
# File 'actionpack/lib/action_dispatch/middleware/flash.rb', line 272

def notice
  self[:notice]
end

#notice=(message) ⇒ Object

Convenience accessor for flash[:notice]=.



277
278
279
# File 'actionpack/lib/action_dispatch/middleware/flash.rb', line 277

def notice=(message)
  self[:notice] = message
end

#nowObject

Sets a flash that will not be available to the next action, only to the current.

flash.now[:message] = "Hello current action"

This method enables you to use the flash as a central messaging system in your app. When you need to pass an object to the next action, you use the standard flash assign ([]=). When you need to pass an object to the current action, you use now, and your object will vanish when the current action is done.

Entries set via now are accessed the same way as standard entries: flash['my-key'].

Also, brings two convenience accessors:

flash.now.alert = "Beware now!"
# Equivalent to flash.now[:alert] = "Beware now!"

flash.now.notice = "Good luck now!"
# Equivalent to flash.now[:notice] = "Good luck now!"


229
230
231
# File 'actionpack/lib/action_dispatch/middleware/flash.rb', line 229

def now
  @now ||= FlashNow.new(self)
end

#replace(h) ⇒ Object

:nodoc:



205
206
207
208
209
# File 'actionpack/lib/action_dispatch/middleware/flash.rb', line 205

def replace(h) #:nodoc:
  @discard.clear
  @flashes.replace h.stringify_keys
  self
end

#sweepObject

Mark for removal entries that were kept, and delete unkept ones.

This method is called automatically by filters, so you generally don’t need to care about it.



256
257
258
259
# File 'actionpack/lib/action_dispatch/middleware/flash.rb', line 256

def sweep #:nodoc:
  @discard.each { |k| @flashes.delete k }
  @discard.replace @flashes.keys
end

#to_hashObject



186
187
188
# File 'actionpack/lib/action_dispatch/middleware/flash.rb', line 186

def to_hash
  @flashes.dup
end

#to_session_valueObject

Builds a hash containing the flashes to keep for the next request. If there are none to keep, returns nil.



135
136
137
138
139
# File 'actionpack/lib/action_dispatch/middleware/flash.rb', line 135

def to_session_value #:nodoc:
  flashes_to_keep = @flashes.except(*@discard)
  return nil if flashes_to_keep.empty?
  { "discard" => [], "flashes" => flashes_to_keep }
end

#update(h) ⇒ Object Also known as: merge!

:nodoc:



165
166
167
168
169
# File 'actionpack/lib/action_dispatch/middleware/flash.rb', line 165

def update(h) #:nodoc:
  @discard.subtract stringify_array(h.keys)
  @flashes.update h.stringify_keys
  self
end