def self.merge_options(options)
opts = {}
merge_logic = proc do |key, existing_val, new_val|
if [:if, :unless].include?(key)
if existing_val.is_a?(Hash) && new_val.is_a?(Hash)
existing_val.merge(new_val)
elsif new_val.is_a?(Hash)
(opts["#{key}_extras".to_sym] ||= []) << existing_val
new_val
else
(opts["#{key}_extras".to_sym] ||= []) << new_val
existing_val
end
else
new_val
end
end
@block_options ||= []
opts.merge @block_options.inject({}) { |final, step|
final.merge(step, &merge_logic)
}.merge(valid_options(options), &merge_logic)
end