@aroben Last night, I tried alternative solutions, but I wasn't happy.

1. Building `WHITELIST` from many smaller constants
1. Swapping `WHITELIST` for `Whitelist` (module or instance)

The `WHITELIST` constant seems clearest.  The `SanitizationFilter` signature mimics the  `Sanitize` gem signature.

Also, after thinking about it, `Hash#dup` seems more intention revealing than `Hash#[]`.  I think, we should stick with your original implementation. :+1: 

Finally, I found a small bug when setting context to `FULL`.

```ruby
>> WHITELIST = {}
=> {}
>> FULL = { :elements => [] }
=> {:elements=>[]}
>> context = {:whitelist=>FULL}
=> {:whitelist=>{:elements=>[]}}
>> whitelist = (context[:whitelist] || WHITELIST).dup
=> {:elements=>[]}
>> whitelist[:protocols] = whitelist[:protocols].dup
TypeError: can't dup NilClass
	from (irb):5:in `dup'
	from (irb):5
	from /Users/simeon/.rbenv/versions/2.0.0-p247/bin/irb:12:in `<main>'
```

I wrote a [fix with a test](https://github.com/simeonwillbanks/html-pipeline/commit/707366792680febdcb3022fe68228458e6b98713) for you :smile: 

Hope this helps; its been fun!