diff --git a/kafo.gemspec b/kafo.gemspec index 4f14c02e..b3b0ca34 100644 --- a/kafo.gemspec +++ b/kafo.gemspec @@ -20,7 +20,7 @@ Gem::Specification.new do |spec| spec.required_ruby_version = '>= 2.7' spec.add_development_dependency 'bundler', '>= 1.3', '< 3' - spec.add_development_dependency 'minitest' + spec.add_development_dependency 'minitest', '< 6' spec.add_development_dependency 'minitest-reporters' spec.add_development_dependency 'rake' spec.add_development_dependency 'simplecov' diff --git a/lib/kafo/data_types/boolean.rb b/lib/kafo/data_types/boolean.rb index d180b29c..ef02f7cc 100644 --- a/lib/kafo/data_types/boolean.rb +++ b/lib/kafo/data_types/boolean.rb @@ -1,6 +1,10 @@ module Kafo module DataTypes class Boolean < DataType + def initialize(*permitted) + @permitted = permitted + end + def typecast(value) case value when '0', 'false', 'f', 'n', false @@ -16,6 +20,12 @@ def valid?(input, errors = []) (input.is_a?(::TrueClass) || input.is_a?(::FalseClass)).tap do |valid| errors << "#{input.inspect} is not a valid boolean" unless valid end + + unless @permitted.empty? || @permitted.include?(input) + errors << "#{input} must be one of #{@permitted.join(', ')}" + end + + return errors.empty? end end diff --git a/lib/kafo/data_types/struct.rb b/lib/kafo/data_types/struct.rb index fc9a9fb4..6242ef37 100644 --- a/lib/kafo/data_types/struct.rb +++ b/lib/kafo/data_types/struct.rb @@ -5,10 +5,12 @@ def initialize(spec) @spec = ::Hash[spec.map do |k,v| begin k = DataType.new_from_string(k) - rescue ConfigurationException; end + rescue ConfigurationException + end begin v = DataType.new_from_string(v) - rescue ConfigurationException; end + rescue ConfigurationException + end [k, v] end] end diff --git a/test/kafo/data_types/boolean_test.rb b/test/kafo/data_types/boolean_test.rb index 4a0faf5b..832aafde 100644 --- a/test/kafo/data_types/boolean_test.rb +++ b/test/kafo/data_types/boolean_test.rb @@ -5,6 +5,7 @@ module DataTypes describe Boolean do describe "registered" do it { _(DataType.new_from_string('Boolean')).must_be_instance_of Boolean } + it { _(DataType.new_from_string('Boolean[false]')).must_be_instance_of Boolean } end describe "#typecast" do @@ -21,6 +22,8 @@ module DataTypes it { _(Boolean.new.valid?(true)).must_equal true } it { _(Boolean.new.valid?(false)).must_equal true } it { _(Boolean.new.valid?('foo')).must_equal false } + it { _(Boolean.new(false).valid?(true)).must_equal false } + it { _(Boolean.new(false).valid?(false)).must_equal true } end end end