From da2831c17d627fa51ed300238ab92eb0923e318c Mon Sep 17 00:00:00 2001 From: "Brian J. Cardiff" Date: Mon, 5 Dec 2016 10:38:46 -0300 Subject: [PATCH] validate boolean option in connection string. proper downcase. --- spec/db_spec.cr | 4 ++++ src/db.cr | 11 ++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/spec/db_spec.cr b/spec/db_spec.cr index ec42f30..c619c9d 100644 --- a/spec/db_spec.cr +++ b/spec/db_spec.cr @@ -107,5 +107,9 @@ describe DB do DB.fetch_bool(HTTP::Params.parse("bar=true"), "foo", false).should be_false DB.fetch_bool(HTTP::Params.parse("bar=true"), "foo", true).should be_true + + expect_raises(ArgumentError, %(invalid "other" value for option "foo")) do + DB.fetch_bool(HTTP::Params.parse("foo=other"), "foo", true) + end end end diff --git a/src/db.cr b/src/db.cr index 43a90f4..74e3d98 100644 --- a/src/db.cr +++ b/src/db.cr @@ -123,10 +123,15 @@ module DB # :nodoc: def self.fetch_bool(params : HTTP::Params, name, default : Bool) - if value = params[name]? - value.underscore == "true" - else + case (value = params[name]?).try &.downcase + when nil default + when "true" + true + when "false" + false + else + raise ArgumentError.new(%(invalid "#{value}" value for option "#{name}")) end end end