def encode_directives(h, variant)
encode = {:domain => :list_to_space_quoted_string, :algorithm => false, :stale => :bool_to_str, :nc => :int_to_hex}
if [:credentials, :auth].include? variant
encode.merge! :qop => false
elsif variant == :challenge
encode.merge! :qop => :list_to_comma_quoted_string
else
raise ArgumentError.new("#{variant} is not a valid value for `variant' use :auth, :credentials or :challenge")
end
(variant == :auth ? '' : 'Digest ') + h.collect do |directive, value|
'' << directive.to_s << '=' << if encode[directive]
begin
Conversions.send encode[directive], value
rescue NoMethodError, ArgumentError
raise ArgumentError.new("Can't encode #{directive}(#{value.inspect}) with #{encode[directive]}")
end
elsif encode[directive].nil?
begin
Conversions.quote_string value
rescue NoMethodError, ArgumentError
raise ArgumentError.new("Can't encode #{directive}(#{value.inspect}) with quote_string")
end
else
value
end
end.join(", ")
end