1
0
Fork 0
mirror of https://github.com/thoughtbot/shoulda-matchers.git synced 2022-11-09 12:01:38 -05:00

Consolidate set_session and set_flash APIs

* Refactor so they both use SetSessionOrFlashMatcher internally
* Remove `set_session['key']` in favor of `set_session('key')`
* `set_flash['key'].to(nil)` no longer works if set_flash has never been
  set
This commit is contained in:
Elliot Winkler 2014-11-19 16:13:59 -07:00
parent 801f2c7c1e
commit 535fe05be8
10 changed files with 582 additions and 653 deletions

View file

@ -0,0 +1,95 @@
module Shoulda
module Matchers
module ActionController
# @private
class FlashStore
def self.future
new
end
def self.now
new.use_now!
end
attr_accessor :controller
def initialize
@use_now = false
end
def name
if @use_now
'flash.now'
else
'flash'
end
end
def has_key?(key)
values_to_check.include?(key)
end
def has_value?(expected_value)
values_to_check.values.any? do |actual_value|
expected_value === actual_value
end
end
def empty?
flash.empty?
end
def use_now!
@use_now = true
self
end
private
def flash
@_flash ||= copy_of_flash_from_controller
end
def copy_of_flash_from_controller
controller.flash.dup.tap do |flash|
copy_flashes(controller.flash, flash)
copy_discard_if_necessary(controller.flash, flash)
# sweep_flash_if_necessary(flash)
end
end
def copy_flashes(original_flash, new_flash)
flashes = original_flash.instance_variable_get('@flashes').dup
new_flash.instance_variable_set('@flashes', flashes)
end
def copy_discard_if_necessary(original_flash, new_flash)
discard = original_flash.instance_variable_get('@discard').dup
new_flash.instance_variable_set('@discard', discard)
end
def sweep_flash_if_necessary(flash)
unless @use_now
flash.sweep
end
end
def set_values
flash.instance_variable_get('@flashes')
end
def keys_to_discard
flash.instance_variable_get('@discard')
end
def values_to_check
if @use_now
set_values.slice(*keys_to_discard.to_a)
else
set_values.except(*keys_to_discard.to_a)
end
end
end
end
end
end