diff --git a/app/presenters/details_presenter.rb b/app/presenters/details_presenter.rb index b4ef094f2..12dd4d453 100644 --- a/app/presenters/details_presenter.rb +++ b/app/presenters/details_presenter.rb @@ -22,29 +22,30 @@ def details private - def govspeak_content?(value) - wrapped = Array.wrap(value) - wrapped.all? { |hsh| hsh.is_a?(Hash) } && - wrapped.one? { |hsh| hsh[:content_type] == "text/govspeak" } && - wrapped.none? { |hsh| hsh[:content_type] == "text/html" } - end - - def html_content?(value) - wrapped = Array.wrap(value) - wrapped.all? { |hsh| hsh.is_a?(Hash) } && - wrapped.one? { |hsh| hsh[:content_type] == "text/html" } + def content_type(value) + if value.one? { |hsh| hsh[:content_type] == "text/html" } + "text/html" + elsif value.one? { |hsh| hsh[:content_type] == "text/govspeak" } + "text/govspeak" + end end def recursively_transform_govspeak(obj) - return obj if !obj.respond_to?(:map) || html_content?(obj) - return render_govspeak(obj) if govspeak_content?(obj) - - if obj.is_a?(Hash) + if obj.is_a?(Array) && obj.all?(Hash) && (obj_content_type = content_type(obj)) + case obj_content_type + when "text/html" + obj + when "text/govspeak" + render_govspeak(obj) + end + elsif obj.is_a?(Array) + obj.map { |o| recursively_transform_govspeak(o) } + elsif obj.is_a?(Hash) obj.transform_values do |value| recursively_transform_govspeak(value) end else - obj.map { |o| recursively_transform_govspeak(o) } + obj end end