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:
parent
801f2c7c1e
commit
535fe05be8
10 changed files with 582 additions and 653 deletions
95
lib/shoulda/matchers/action_controller/flash_store.rb
Normal file
95
lib/shoulda/matchers/action_controller/flash_store.rb
Normal 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
|
Loading…
Add table
Add a link
Reference in a new issue