diff --git a/lib/websocket/extensions/parser.rb b/lib/websocket/extensions/parser.rb index f8d8891..fab504c 100644 --- a/lib/websocket/extensions/parser.rb +++ b/lib/websocket/extensions/parser.rb @@ -43,7 +43,8 @@ def self.parse_header(header) end if offer.has_key?(key) - offer[key] = [*offer[key]] + [data] + offer[key] = [offer[key]] unless offer[key].is_a?(Array) + offer[key].push(data) else offer[key] = data end diff --git a/spec/websocket/extensions/parser_spec.rb b/spec/websocket/extensions/parser_spec.rb index 7458210..9a6d488 100644 --- a/spec/websocket/extensions/parser_spec.rb +++ b/spec/websocket/extensions/parser_spec.rb @@ -67,6 +67,12 @@ def parse(string) ] end + it "preserves more than two duplicate params in order" do + expect(parse "a; b=1; b=2; b=3").to eq [ + { :name => "a", :params => { "b" => [1, 2, 3] } } + ] + end + it "parses multiple complex offers" do expect(parse 'a; b=1, c, b; d, c; e="hi, there"; e, a; b').to eq [ { :name => "a", :params => { "b" => 1 } },