From 3312030ce3a88203cd459804391472936d0788bd Mon Sep 17 00:00:00 2001 From: evazion Date: Tue, 7 Jan 2020 00:01:14 -0600 Subject: [PATCH] =?UTF-8?q?Fix=20#4240:=20`only=3D=E2=80=A6`=20param=20mal?= =?UTF-8?q?functioning=20on=20autocomplete=20API.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/logical/application_responder.rb | 2 +- app/models/application_record.rb | 2 ++ test/functional/tags_controller_test.rb | 7 +++++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/app/logical/application_responder.rb b/app/logical/application_responder.rb index 1ac4a1d75..eb9baac34 100644 --- a/app/logical/application_responder.rb +++ b/app/logical/application_responder.rb @@ -17,7 +17,7 @@ class ApplicationResponder < ActionController::Responder options[:root] ||= resource.table_name.dasherize if resource.respond_to?(:table_name) end - options[:only] ||= params["only"].scan(/\w+/).map(&:to_sym) if params["only"] + options[:only] ||= params["only"].scan(/\w+/) if params["only"] super end diff --git a/app/models/application_record.rb b/app/models/application_record.rb index 767c92a18..cb7877af3 100644 --- a/app/models/application_record.rb +++ b/app/models/application_record.rb @@ -294,6 +294,8 @@ class ApplicationRecord < ActiveRecord::Base options[:include] ||= [] options[:methods] ||= [] + options[:only] = options[:only].map(&:to_sym) + attributes, methods = api_attributes.partition { |attr| has_attribute?(attr) } methods += options[:methods] includes = options[:include] diff --git a/test/functional/tags_controller_test.rb b/test/functional/tags_controller_test.rb index 6d458fb07..b555957ba 100644 --- a/test/functional/tags_controller_test.rb +++ b/test/functional/tags_controller_test.rb @@ -49,6 +49,13 @@ class TagsControllerTest < ActionDispatch::IntegrationTest get autocomplete_tags_path, params: { search: { name_matches: "t" }, format: :json } assert_response :success end + + should "respect the only param" do + get autocomplete_tags_path, params: { search: { name_matches: "t", only: "name" }, format: :json } + + assert_response :success + assert_equal "touhou", response.parsed_body.first["name"] + end end context "show action" do