diff --git a/lib/dry/rails/features/safe_params.rb b/lib/dry/rails/features/safe_params.rb index bc095f0..80990c8 100644 --- a/lib/dry/rails/features/safe_params.rb +++ b/lib/dry/rails/features/safe_params.rb @@ -63,7 +63,13 @@ def safe_params # # @api public def schemas - self.class.schemas + return @schemas if defined? @schemas + + @schemas = if self.class.superclass.include?(Dry::Rails::Features::SafeParams) + self.class.schemas.merge(self.class.superclass.schemas) + else + self.class.schemas + end end private diff --git a/spec/dummy/app/controllers/inherited_safe_params_callbacks_controller.rb b/spec/dummy/app/controllers/inherited_safe_params_callbacks_controller.rb new file mode 100644 index 0000000..0e03649 --- /dev/null +++ b/spec/dummy/app/controllers/inherited_safe_params_callbacks_controller.rb @@ -0,0 +1,4 @@ +# frozen_string_literal: true + +class InheritedSafeParamsCallbacksController < SafeParamsCallbacksController +end diff --git a/spec/dummy/config/routes.rb b/spec/dummy/config/routes.rb index aac2a20..8098fac 100644 --- a/spec/dummy/config/routes.rb +++ b/spec/dummy/config/routes.rb @@ -5,6 +5,7 @@ get "users/new/:id" => "users#new" get "safe_params_callbacks/show/:id" => "safe_params_callbacks#show" + get "inherited_safe_params_callbacks/show/:id" => "inherited_safe_params_callbacks#show" get "/api/users/show/:id" => "api_users#show" get "/api/users/new/:id" => "api_users#new" diff --git a/spec/requests/inherited_safe_params_callbacks_spec.rb b/spec/requests/inherited_safe_params_callbacks_spec.rb new file mode 100644 index 0000000..005afe3 --- /dev/null +++ b/spec/requests/inherited_safe_params_callbacks_spec.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +RSpec.describe "InheritedSafeParamsCallbacksController", type: :request do + describe "GET /inherited_safe_params_callbacks/show" do + it "returns a successful response code" do + get "/inherited_safe_params_callbacks/show/312" + + expect(response).to have_http_status(200) + end + + it "returns errors" do + get "/inherited_safe_params_callbacks/show/oops" + + expect(response).to have_http_status(422) + end + end +end