diff --git a/lib/ransack/nodes/condition.rb b/lib/ransack/nodes/condition.rb index af69c037..44e946a7 100644 --- a/lib/ransack/nodes/condition.rb +++ b/lib/ransack/nodes/condition.rb @@ -1,3 +1,5 @@ +require 'ransack/invalid_search_error' + module Ransack module Nodes class Condition < Node @@ -38,7 +40,7 @@ def extract_values_for_condition(key, context = nil) predicate = Predicate.named(name) unless predicate || Ransack.options[:ignore_unknown_conditions] - raise ArgumentError, "No valid predicate for #{key}" + raise InvalidSearchError, "No valid predicate for #{key}" end if context.present? diff --git a/spec/ransack/adapters/active_record/base_spec.rb b/spec/ransack/adapters/active_record/base_spec.rb index d41cd6d0..73c7012f 100644 --- a/spec/ransack/adapters/active_record/base_spec.rb +++ b/spec/ransack/adapters/active_record/base_spec.rb @@ -131,8 +131,8 @@ module ActiveRecord expect { Person.ransack('') }.to_not raise_error end - it 'raises exception if ransack! called with unknown condition' do - expect { Person.ransack!(unknown_attr_eq: 'Ernie') }.to raise_error(ArgumentError) + it 'raises InvalidSearchError exception if ransack! called with unknown condition' do + expect { Person.ransack!(unknown_attr_eq: 'Ernie') }.to raise_error(InvalidSearchError) end it 'does not modify the parameters' do diff --git a/spec/ransack/nodes/condition_spec.rb b/spec/ransack/nodes/condition_spec.rb index 29596cac..e693dacb 100644 --- a/spec/ransack/nodes/condition_spec.rb +++ b/spec/ransack/nodes/condition_spec.rb @@ -64,6 +64,7 @@ module Nodes end specify { expect { subject }.to raise_error ArgumentError } + specify { expect { subject }.to raise_error InvalidSearchError } end context "when ignore_unknown_conditions is true" do diff --git a/spec/ransack/search_spec.rb b/spec/ransack/search_spec.rb index 6426a20a..ed3c4c50 100644 --- a/spec/ransack/search_spec.rb +++ b/spec/ransack/search_spec.rb @@ -270,6 +270,7 @@ module Ransack end specify { expect { subject }.to raise_error ArgumentError } + specify { expect { subject }.to raise_error InvalidSearchError } end context 'when ignore_unknown_conditions configuration option is true' do @@ -300,6 +301,7 @@ module Ransack context 'when ignore_unknown_conditions search parameter is false' do specify { expect { with_ignore_unknown_conditions_false }.to raise_error ArgumentError } + specify { expect { with_ignore_unknown_conditions_false }.to raise_error InvalidSearchError } end context 'when ignore_unknown_conditions search parameter is true' do @@ -614,6 +616,18 @@ def remove_quotes_and_backticks(str) expect(@s.result.first.id).to eq 1 end + it 'raises ArgumentError when an invalid argument is sent' do + expect do + @s.sorts = 1234 + end.to raise_error(ArgumentError, "Invalid argument (Integer) supplied to sorts=") + end + + it 'raises InvalidSearchError when an invalid argument is sent' do + expect do + @s.sorts = 1234 + end.to raise_error(Ransack::InvalidSearchError, "Invalid argument (Integer) supplied to sorts=") + end + it "PG's sort option", if: ::ActiveRecord::Base.connection.adapter_name == "PostgreSQL" do default = Ransack.options.clone