From 56bc47fb4f6c27f8a40ed7207fe7952a818aed88 Mon Sep 17 00:00:00 2001 From: Lorcan Coyle Date: Mon, 25 Apr 2016 20:28:48 +0100 Subject: [PATCH 1/2] Added a failing test for bad integer parsing --- spec/integer_filter_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/integer_filter_spec.rb b/spec/integer_filter_spec.rb index 5b690c2..db9f216 100644 --- a/spec/integer_filter_spec.rb +++ b/spec/integer_filter_spec.rb @@ -25,7 +25,7 @@ it "doesnt't allow other strings, nor does it allow random objects or symbols" do f = Mutations::IntegerFilter.new - ["zero","a1", {}, [], Object.new, :d].each do |thing| + ["zero", "6iamnotanumber", "a1", {}, [], Object.new, :d].each do |thing| _filtered, errors = f.filter(thing) assert_equal :integer, errors end From d68c093e61a33254651eec0a24b093a6a6bcd39a Mon Sep 17 00:00:00 2001 From: Lorcan Coyle Date: Tue, 3 May 2016 21:46:18 +0100 Subject: [PATCH 2/2] Added logic to forbid non-numeric input to be treated as an integer This implements the solution discussed in https://github.com/cypriss/mutations/issues/83#issuecomment-214496073 --- lib/mutations/integer_filter.rb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/mutations/integer_filter.rb b/lib/mutations/integer_filter.rb index 4b88b1a..d50ef51 100644 --- a/lib/mutations/integer_filter.rb +++ b/lib/mutations/integer_filter.rb @@ -25,8 +25,12 @@ def filter(data) # Ensure it's the correct data type (Integer) if !data.is_a?(Integer) - if data.is_a?(String) && data =~ /^-?\d/ - data = data.to_i + if data.is_a?(String) + begin + data = Integer(data) + rescue ArgumentError + return [data, :integer] + end else return [data, :integer] end