From 54a5680ca204afd391f209bdebf12e91dbfb54ff Mon Sep 17 00:00:00 2001 From: Michael Camilleri Date: Tue, 24 Dec 2019 00:54:15 +0900 Subject: [PATCH] Fix parsing of 'false' as boolean option value --- lib/rouge/lexer.rb | 2 +- spec/lexer_spec.rb | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/lib/rouge/lexer.rb b/lib/rouge/lexer.rb index 77445fb511..a547a9ad54 100644 --- a/lib/rouge/lexer.rb +++ b/lib/rouge/lexer.rb @@ -318,7 +318,7 @@ def initialize(opts={}) def as_bool(val) case val - when nil, false, 0, '0', 'off' + when nil, false, 0, '0', 'false', 'off' false when Array val.empty? ? true : as_bool(val.last) diff --git a/spec/lexer_spec.rb b/spec/lexer_spec.rb index bcda29b9ce..7256dba2b7 100644 --- a/spec/lexer_spec.rb +++ b/spec/lexer_spec.rb @@ -185,4 +185,23 @@ def self.detect? refute { NonDetectableLexer.methods(false).include?(:detect?) } refute { NonDetectableLexer.detectable? } end + + it 'handles boolean options' do + option_lexer = Class.new(Rouge::RegexLexer) do + option :bool_opt, 'An example boolean option' + + def initialize(*) + super + @bool_opt = bool_option(:bool_opt) { nil } + end + end + + assert_equal true, option_lexer.new({bool_opt: 'true'}).instance_variable_get(:@bool_opt) + assert_equal false, option_lexer.new({bool_opt: nil}).instance_variable_get(:@bool_opt) + assert_equal false, option_lexer.new({bool_opt: false}).instance_variable_get(:@bool_opt) + assert_equal false, option_lexer.new({bool_opt: 0}).instance_variable_get(:@bool_opt) + assert_equal false, option_lexer.new({bool_opt: '0'}).instance_variable_get(:@bool_opt) + assert_equal false, option_lexer.new({bool_opt: 'false'}).instance_variable_get(:@bool_opt) + assert_equal false, option_lexer.new({bool_opt: 'off'}).instance_variable_get(:@bool_opt) + end end