From b550694b77182756593e5c5c5d8796682f792290 Mon Sep 17 00:00:00 2001 From: Gregg Tanzillo Date: Wed, 3 Apr 2019 15:38:00 -0400 Subject: [PATCH] Added logic to support both string and symbol access to keys in dialog hash under options Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1694716 --- lib/services/api/request_parser.rb | 6 +++++- spec/lib/services/api/request_parser_spec.rb | 8 ++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/services/api/request_parser.rb b/lib/services/api/request_parser.rb index 39b286c320..1a55f5d104 100644 --- a/lib/services/api/request_parser.rb +++ b/lib/services/api/request_parser.rb @@ -10,7 +10,11 @@ def self.parse_user(data) def self.parse_options(data) raise BadRequestError, "Request is missing options" if data["options"].blank? - data["options"].deep_symbolize_keys + # Need to preserve string keys in dialog sub-hash while still supporting access by symbols + dialog = data["options"].delete("dialog") + data["options"].deep_symbolize_keys.tap do |hash| + hash[:dialog] = dialog.with_indifferent_access if dialog.present? + end end def self.parse_auto_approve(data) diff --git a/spec/lib/services/api/request_parser_spec.rb b/spec/lib/services/api/request_parser_spec.rb index 236912ad12..a6c7c120fe 100644 --- a/spec/lib/services/api/request_parser_spec.rb +++ b/spec/lib/services/api/request_parser_spec.rb @@ -33,6 +33,14 @@ expected = {:foo => "bar", :foobar => {:bazz => "foo"}} expect(actual).to eq(expected) end + + it "deep symbolizes keys except the dialog" do + actual = described_class.parse_options("options" => {"foo" => "bar", "dialog" => { "item" => "value"}}) + expected = {:foo => "bar", :dialog => { "item" => "value" }} + expect(actual).to eq(expected) + expect(actual[:dialog][:item]).to eq("value") + expect(actual[:dialog]["item"]).to eq("value") + end end describe ".parse_auto_approve" do