From 47be5c0737fc12674d4574ce63b31ca6b1163a32 Mon Sep 17 00:00:00 2001
From: Henk <henk.van.der.veen@gmail.com>
Date: Wed, 24 Mar 2021 22:06:21 +0100
Subject: [PATCH] Convert options = {} to **options in the dsl. to remove
 warnings

---
 lib/quby/compiler/dsl/base.rb                 |  4 +-
 lib/quby/compiler/dsl/calls_custom_methods.rb |  3 +-
 .../compiler/dsl/charting/chart_builder.rb    |  6 +--
 .../dsl/charting/overview_chart_builder.rb    |  2 +-
 lib/quby/compiler/dsl/helpers.rb              |  6 +--
 lib/quby/compiler/dsl/panel_builder.rb        | 23 ++++++----
 lib/quby/compiler/dsl/question_builder.rb     |  4 +-
 .../compiler/dsl/questionnaire_builder.rb     | 46 +++++++++----------
 lib/quby/compiler/dsl/questions/base.rb       | 14 +++---
 .../questions/checkbox_question_builder.rb    |  2 +-
 .../dsl/questions/date_question_builder.rb    |  2 +-
 .../questions/deprecated_question_builder.rb  |  2 +-
 .../dsl/questions/float_question_builder.rb   |  2 +-
 .../dsl/questions/integer_question_builder.rb |  2 +-
 .../dsl/questions/radio_question_builder.rb   |  2 +-
 .../dsl/questions/select_question_builder.rb  |  2 +-
 .../dsl/questions/string_question_builder.rb  |  2 +-
 .../dsl/questions/text_question_builder.rb    |  2 +-
 lib/quby/compiler/dsl/score_builder.rb        |  2 +-
 lib/quby/compiler/dsl/table_builder.rb        | 10 ++--
 lib/quby/compiler/entities/questionnaire.rb   |  4 +-
 .../dsl/charting/bar_chart_builder_spec.rb    |  4 +-
 .../dsl/charting/chart_builder_spec.rb        |  4 +-
 .../dsl/charting/line_chart_builder_spec.rb   |  6 +--
 .../dsl/charting/radar_chart_builder_spec.rb  |  4 +-
 .../dsl/questionnaire_builder_spec.rb         |  2 +-
 26 files changed, 82 insertions(+), 80 deletions(-)

diff --git a/lib/quby/compiler/dsl/base.rb b/lib/quby/compiler/dsl/base.rb
index 8b1c67a..9949fcd 100644
--- a/lib/quby/compiler/dsl/base.rb
+++ b/lib/quby/compiler/dsl/base.rb
@@ -9,8 +9,8 @@ module Quby
       class Base
         include Helpers
 
-        def self.build(*args, &block)
-          builder = new(*args)
+        def self.build(*args, **kwargs, &block)
+          builder = new(*args, **kwargs)
           builder.instance_eval(&block) if block
           builder.build
         end
diff --git a/lib/quby/compiler/dsl/calls_custom_methods.rb b/lib/quby/compiler/dsl/calls_custom_methods.rb
index b2324fb..724593e 100644
--- a/lib/quby/compiler/dsl/calls_custom_methods.rb
+++ b/lib/quby/compiler/dsl/calls_custom_methods.rb
@@ -6,8 +6,7 @@ module Quby
       module CallsCustomMethods
         attr_reader :custom_methods
 
-        def initialize(*args)
-          options = args.last.is_a?(::Hash) ? args.last : {}
+        def initialize(*args, **options)
           @custom_methods = options[:custom_methods] || {}
           super
         end
diff --git a/lib/quby/compiler/dsl/charting/chart_builder.rb b/lib/quby/compiler/dsl/charting/chart_builder.rb
index 3dd669b..57a512b 100644
--- a/lib/quby/compiler/dsl/charting/chart_builder.rb
+++ b/lib/quby/compiler/dsl/charting/chart_builder.rb
@@ -16,8 +16,8 @@ module Quby
           @chart_class
         end
 
-        def initialize(questionnaire, key, options = {})
-          @chart = self.class.chart_class.new(key, options)
+        def initialize(questionnaire, key, **options)
+          @chart = self.class.chart_class.new(key, **options)
           @questionnaire = questionnaire
         end
 
@@ -49,7 +49,7 @@ module Quby
           @chart.plotlines << {value: value, color: color}
         end
 
-        def plot(key, options = {})
+        def plot(key, **options)
           unless plottable = @questionnaire.find_plottable(key)
             fail "Questionnaire #{@questionnaire.key} chart #{@chart.key} references unknown score or question #{key}"
           end
diff --git a/lib/quby/compiler/dsl/charting/overview_chart_builder.rb b/lib/quby/compiler/dsl/charting/overview_chart_builder.rb
index 8d0a442..f871cbf 100644
--- a/lib/quby/compiler/dsl/charting/overview_chart_builder.rb
+++ b/lib/quby/compiler/dsl/charting/overview_chart_builder.rb
@@ -7,7 +7,7 @@ module Quby
       class OverviewChartBuilder < ChartBuilder
         set_chart_class(Entities::Charting::OverviewChart)
 
-        def initialize(questionnaire, options = {})
+        def initialize(questionnaire, **options)
           @questionnaire = questionnaire
           @chart = self.class.chart_class.new
         end
diff --git a/lib/quby/compiler/dsl/helpers.rb b/lib/quby/compiler/dsl/helpers.rb
index 1d1f000..4b9f019 100644
--- a/lib/quby/compiler/dsl/helpers.rb
+++ b/lib/quby/compiler/dsl/helpers.rb
@@ -7,8 +7,8 @@ module Quby
         include ActionView::Helpers::TagHelper
         include ActionView::Helpers::OutputSafetyHelper
 
-        def image_tag(source, options = {})
-          tag.img(options.reverse_merge(src: source, alt: image_alt(source)))
+        def image_tag(source, **options)
+          tag.img(**options.reverse_merge(src: source, alt: image_alt(source)))
         end
 
         # Copied from ActionController::Base.helpers.image_alt, because it will be removed from Rails 6.0, but we want
@@ -18,7 +18,7 @@ module Quby
         end
 
         def check_question_keys_uniqueness(key, options, questionnaire)
-          keys = QuestionBuilder.build(key, options).claimed_keys
+          keys = QuestionBuilder.build(key, **options).claimed_keys
           if keys.any? { |k| questionnaire.key_in_use? k }
             fail "#{questionnaire.key}:#{key}: A question or option with input key #{key} is already defined."
           end
diff --git a/lib/quby/compiler/dsl/panel_builder.rb b/lib/quby/compiler/dsl/panel_builder.rb
index fec3479..9a95977 100644
--- a/lib/quby/compiler/dsl/panel_builder.rb
+++ b/lib/quby/compiler/dsl/panel_builder.rb
@@ -9,9 +9,9 @@ module Quby
         attr_reader :title
         attr_reader :questionnaire
 
-        def initialize(title, options = {})
-          @panel = Entities::Panel.new(options.merge(title: title, items: []))
-          @default_question_options = options[:default_question_options] || {}
+        def initialize(title, default_question_options: {}, **options)
+          @panel = Entities::Panel.new({title: title, items: [], **options})
+          @default_question_options = default_question_options
           @questionnaire = options[:questionnaire]
           @custom_methods = options[:custom_methods] || {}
         end
@@ -41,25 +41,28 @@ module Quby
           @panel.items << Entities::Text.new('', raw_content: video_html)
         end
 
-        def default_question_options(options = {})
+        def default_question_options(**options)
           @default_question_options = @default_question_options.merge(options)
         end
 
-        def question(key, options = {}, &block)
+        def question(key, **options, &block)
           options = @default_question_options.merge(options).merge(questionnaire: @panel.questionnaire)
 
           check_question_keys_uniqueness key, options, @questionnaire
 
-          question = QuestionBuilder.build(key, options, &block)
+          question = QuestionBuilder.build(key, **options, &block)
 
           @questionnaire.register_question(question)
           @panel.items << question
         end
 
-        def table(options = {}, &block)
-          table_builder = TableBuilder.new(@panel, options.merge(questionnaire: @panel.questionnaire,
-                                                                 default_question_options: @default_question_options,
-                                                                 custom_methods: @custom_methods))
+        def table(**options, &block)
+          table_builder = TableBuilder.new \
+            @panel,
+            questionnaire: @panel.questionnaire,
+            default_question_options: @default_question_options,
+            custom_methods: @custom_methods,
+            **options
           table_builder.instance_eval(&block) if block
         end
 
diff --git a/lib/quby/compiler/dsl/question_builder.rb b/lib/quby/compiler/dsl/question_builder.rb
index 8f4ec18..1e85a29 100644
--- a/lib/quby/compiler/dsl/question_builder.rb
+++ b/lib/quby/compiler/dsl/question_builder.rb
@@ -31,8 +31,8 @@ module Quby
           'hidden'    => Questions::DeprecatedQuestionBuilder
         }
 
-        def self.build(key, options = {}, &block)
-          BUILDERS.fetch(options.fetch(:type).to_s).build(key, options, &block)
+        def self.build(key, **options, &block)
+          BUILDERS.fetch(options.fetch(:type).to_s).build(key, **options, &block)
         end
       end
     end
diff --git a/lib/quby/compiler/dsl/questionnaire_builder.rb b/lib/quby/compiler/dsl/questionnaire_builder.rb
index f18c8f0..cad578f 100644
--- a/lib/quby/compiler/dsl/questionnaire_builder.rb
+++ b/lib/quby/compiler/dsl/questionnaire_builder.rb
@@ -148,7 +148,7 @@ module Quby
         end
 
         def panel(title = nil, options = {}, &block)
-          panel = PanelBuilder.build(title, options.merge(default_panel_options), &block)
+          panel = PanelBuilder.build(title, **options, **default_panel_options, &block)
           @questionnaire.add_panel(panel)
         end
 
@@ -167,28 +167,28 @@ module Quby
           @questionnaire.lookup_tables[key] = {levels: levels, tree: tree}
         end
 
-        def default_question_options(options = {})
+        def default_question_options(**options)
           @default_question_options.merge!(options)
         end
 
         # Short-circuit the question command to perform an implicit panel
-        def question(key, options = {}, &block)
+        def question(key, **options, &block)
           panel(nil, default_panel_options) do
-            question(key, @default_question_options.merge(options).merge(questionnaire: @questionnaire), &block)
+            question(key, questionnaire: @questionnaire, **@default_question_options, **options, &block)
           end
         end
 
         # Short-circuit the text command to perform an implicit panel
-        def text(value, options = {})
-          panel(nil, default_panel_options) do
-            text(value, options)
+        def text(value, **options)
+          panel(nil, **default_panel_options) do
+            text(value, **options)
           end
         end
 
         # Short-circuit the table command to perform an implicit panel
-        def table(options = {}, &block)
-          panel(nil, default_panel_options) do
-            table(options, &block)
+        def table(**options, &block)
+          panel(nil, **default_panel_options) do
+            table(**options, &block)
           end
         end
 
@@ -197,15 +197,15 @@ module Quby
         #   # variables are private to the score calculation
         #   q01 + q02 + q03
         # end
-        def variable(key, options = {}, &block)
-          @questionnaire.add_score_calculation ScoreBuilder.new(key, options, &block).build
+        def variable(key, **options, &block)
+          @questionnaire.add_score_calculation ScoreBuilder.new(key, **options, &block).build
         end
 
-        def score(key, options = {}, &block)
+        def score(key, **options, &block)
           @questionnaire.errors.add "Score #{key}", 'misses label in score call' if options[:label].blank?
           schema = options.delete(:schema)
           score_schema(key, options[:label], schema) if schema.present?
-          variable(key, options.reverse_merge(score: true), &block)
+          variable(key, score: true, **options, &block)
         end
 
         def score_schema(key, label, options = nil, &block)
@@ -222,16 +222,16 @@ module Quby
           end
         end
 
-        def attention(options = {}, &block)
-          variable(:attention, options.reverse_merge(action: true), &block)
+        def attention(**options, &block)
+          variable(:attention, action: true, **options, &block)
         end
 
-        def alarm(options = {}, &block)
-          variable(:alarm, options.reverse_merge(action: true), &block)
+        def alarm(**options, &block)
+          variable(:alarm, action: true, **options, &block)
         end
 
-        def completion(options = {}, &block)
-          variable(:completion, options.reverse_merge(completion: true), &block)
+        def completion(**options, &block)
+          variable(:completion, completion: true, **options, &block)
         end
 
         def overview_chart(*args, &block)
@@ -255,15 +255,15 @@ module Quby
           @questionnaire.add_chart(builder.build(&block))
         end
 
-        def flag(flag_options)
+        def flag(**flag_options)
           @questionnaire.add_flag flag_options
         end
 
-        def textvar(textvar_options)
+        def textvar(**textvar_options)
           @questionnaire.add_textvar textvar_options
         end
 
-        def outcome_table(table_options)
+        def outcome_table(**table_options)
           @questionnaire.add_outcome_table table_options
         end
 
diff --git a/lib/quby/compiler/dsl/questions/base.rb b/lib/quby/compiler/dsl/questions/base.rb
index c78d3d9..033c912 100644
--- a/lib/quby/compiler/dsl/questions/base.rb
+++ b/lib/quby/compiler/dsl/questions/base.rb
@@ -10,8 +10,8 @@ module Quby
           attr_reader :type
           attr_reader :questionnaire
 
-          def initialize(key, options = {})
-            @questionnaire = options[:questionnaire]
+          def initialize(key, questionnaire:, **options)
+            @questionnaire = questionnaire
           end
 
           def build
@@ -111,7 +111,7 @@ module Quby
         end
 
         module Subquestions
-          def initialize(key, options = {}, &block)
+          def initialize(key, **options, &block)
             super
             @default_question_options = options[:default_question_options] || {}
             @title_question = nil
@@ -126,7 +126,7 @@ module Quby
             super
           end
 
-          def title_question(key, options = {}, &block)
+          def title_question(key, **options, &block)
             options = @default_question_options.merge({depends_on: @question.key,
                                                        questionnaire: @questionnaire,
                                                        parent: @question,
@@ -135,13 +135,13 @@ module Quby
 
             check_question_keys_uniqueness key, options, @questionnaire
 
-            question = QuestionBuilder.build(key, options, &block)
+            question = QuestionBuilder.build(key, **options, &block)
 
             @questionnaire.register_question(question)
             @title_question = question
           end
 
-          def question(key, options = {}, &block)
+          def question(key, **options, &block)
             options = @default_question_options.merge(options)
                                                .merge(questionnaire: @questionnaire,
                                                       parent: @question,
@@ -149,7 +149,7 @@ module Quby
 
             check_question_keys_uniqueness key, options, @questionnaire
 
-            question = QuestionBuilder.build(key, options, &block)
+            question = QuestionBuilder.build(key, **options, &block)
 
             @questionnaire.register_question(question)
             @question.options.last.questions << question
diff --git a/lib/quby/compiler/dsl/questions/checkbox_question_builder.rb b/lib/quby/compiler/dsl/questions/checkbox_question_builder.rb
index 0fb9e1b..2a16098 100644
--- a/lib/quby/compiler/dsl/questions/checkbox_question_builder.rb
+++ b/lib/quby/compiler/dsl/questions/checkbox_question_builder.rb
@@ -9,7 +9,7 @@ module Quby
           include Subquestions
           include InnerTitles
 
-          def initialize(key, options = {}, &block)
+          def initialize(key, **options, &block)
             super
             @question = Entities::Questions::CheckboxQuestion.new(key, options)
           end
diff --git a/lib/quby/compiler/dsl/questions/date_question_builder.rb b/lib/quby/compiler/dsl/questions/date_question_builder.rb
index bed7190..782edee 100644
--- a/lib/quby/compiler/dsl/questions/date_question_builder.rb
+++ b/lib/quby/compiler/dsl/questions/date_question_builder.rb
@@ -7,7 +7,7 @@ module Quby
         class DateQuestionBuilder < Base
           include MinMaxValidations
 
-          def initialize(key, options = {}, &block)
+          def initialize(key, **options, &block)
             super
             @question = Entities::Questions::DateQuestion.new(key, options)
           end
diff --git a/lib/quby/compiler/dsl/questions/deprecated_question_builder.rb b/lib/quby/compiler/dsl/questions/deprecated_question_builder.rb
index 7acad80..2897596 100644
--- a/lib/quby/compiler/dsl/questions/deprecated_question_builder.rb
+++ b/lib/quby/compiler/dsl/questions/deprecated_question_builder.rb
@@ -7,7 +7,7 @@ module Quby
         class DeprecatedQuestionBuilder < Base
           include MultipleChoice
 
-          def initialize(key, options = {}, &block)
+          def initialize(key, **options, &block)
             super
             @question = Entities::Questions::DeprecatedQuestion.new(key, options)
           end
diff --git a/lib/quby/compiler/dsl/questions/float_question_builder.rb b/lib/quby/compiler/dsl/questions/float_question_builder.rb
index 02796d9..89fd7ce 100644
--- a/lib/quby/compiler/dsl/questions/float_question_builder.rb
+++ b/lib/quby/compiler/dsl/questions/float_question_builder.rb
@@ -10,7 +10,7 @@ module Quby
           include Units
           include Sizes
 
-          def initialize(key, options = {}, &block)
+          def initialize(key, **options, &block)
             super
             @question = Entities::Questions::FloatQuestion.new(key, options)
           end
diff --git a/lib/quby/compiler/dsl/questions/integer_question_builder.rb b/lib/quby/compiler/dsl/questions/integer_question_builder.rb
index 0e5ef73..201604f 100644
--- a/lib/quby/compiler/dsl/questions/integer_question_builder.rb
+++ b/lib/quby/compiler/dsl/questions/integer_question_builder.rb
@@ -10,7 +10,7 @@ module Quby
           include Units
           include Sizes
 
-          def initialize(key, options = {}, &block)
+          def initialize(key, **options, &block)
             super
             @question = Entities::Questions::IntegerQuestion.new(key, options)
           end
diff --git a/lib/quby/compiler/dsl/questions/radio_question_builder.rb b/lib/quby/compiler/dsl/questions/radio_question_builder.rb
index 9b11f31..ec9a689 100644
--- a/lib/quby/compiler/dsl/questions/radio_question_builder.rb
+++ b/lib/quby/compiler/dsl/questions/radio_question_builder.rb
@@ -9,7 +9,7 @@ module Quby
           include Subquestions
           include InnerTitles
 
-          def initialize(key, options = {}, &block)
+          def initialize(key, **options, &block)
             super
             @question = Entities::Questions::RadioQuestion.new(key, options)
           end
diff --git a/lib/quby/compiler/dsl/questions/select_question_builder.rb b/lib/quby/compiler/dsl/questions/select_question_builder.rb
index fa9ec6d..d99e018 100644
--- a/lib/quby/compiler/dsl/questions/select_question_builder.rb
+++ b/lib/quby/compiler/dsl/questions/select_question_builder.rb
@@ -7,7 +7,7 @@ module Quby
         class SelectQuestionBuilder < Base
           include MultipleChoice
 
-          def initialize(key, options = {}, &block)
+          def initialize(key, **options, &block)
             super
             @question = Entities::Questions::SelectQuestion.new(key, options)
           end
diff --git a/lib/quby/compiler/dsl/questions/string_question_builder.rb b/lib/quby/compiler/dsl/questions/string_question_builder.rb
index 2dddd2d..f185361 100644
--- a/lib/quby/compiler/dsl/questions/string_question_builder.rb
+++ b/lib/quby/compiler/dsl/questions/string_question_builder.rb
@@ -9,7 +9,7 @@ module Quby
           include Units
           include Sizes
 
-          def initialize(key, options = {}, &block)
+          def initialize(key, **options, &block)
             super
             @question = Entities::Questions::StringQuestion.new(key, options)
           end
diff --git a/lib/quby/compiler/dsl/questions/text_question_builder.rb b/lib/quby/compiler/dsl/questions/text_question_builder.rb
index d7df15d..ad8b88c 100644
--- a/lib/quby/compiler/dsl/questions/text_question_builder.rb
+++ b/lib/quby/compiler/dsl/questions/text_question_builder.rb
@@ -7,7 +7,7 @@ module Quby
         class TextQuestionBuilder < Base
           include RegexpValidations
 
-          def initialize(key, options = {}, &block)
+          def initialize(key, **options, &block)
             super
             @question = Entities::Questions::TextQuestion.new(key, options)
           end
diff --git a/lib/quby/compiler/dsl/score_builder.rb b/lib/quby/compiler/dsl/score_builder.rb
index f898a3c..ea30451 100644
--- a/lib/quby/compiler/dsl/score_builder.rb
+++ b/lib/quby/compiler/dsl/score_builder.rb
@@ -9,7 +9,7 @@ module Quby
         attr_reader :key
         attr_reader :calculation
 
-        def initialize(key, options = {}, &block)
+        def initialize(key, **options, &block)
           @score = Entities::ScoreCalculation.new(key, options, &block)
         end
 
diff --git a/lib/quby/compiler/dsl/table_builder.rb b/lib/quby/compiler/dsl/table_builder.rb
index f44e8b2..0fadaee 100644
--- a/lib/quby/compiler/dsl/table_builder.rb
+++ b/lib/quby/compiler/dsl/table_builder.rb
@@ -9,10 +9,10 @@ module Quby
         prepend CallsCustomMethods
         include Helpers
 
-        def initialize(panel, options = {})
+        def initialize(panel, default_question_options: {}, **options)
           @panel = panel
           @table = Entities::Table.new(options)
-          @default_question_options = options[:default_question_options] || {}
+          @default_question_options = default_question_options
           @panel.items << @table
         end
 
@@ -24,11 +24,11 @@ module Quby
           @table.description = value
         end
 
-        def text(value, options = {})
+        def text(value, **options)
           @table.items << Entities::Text.new(value.to_s, options)
         end
 
-        def question(key, options = {}, &block)
+        def question(key, **options, &block)
           options = @default_question_options.merge(options)
                                              .merge(table: @table,
                                                     questionnaire: @panel.questionnaire)
@@ -36,7 +36,7 @@ module Quby
           check_question_keys_uniqueness key, options, @panel.questionnaire
           fail "You can't create a slider in a table at the moment" if options[:as] == :slider
 
-          question = QuestionBuilder.build(key, options, &block)
+          question = QuestionBuilder.build(key, **options, &block)
 
           @panel.questionnaire.register_question(question)
           @table.items << question
diff --git a/lib/quby/compiler/entities/questionnaire.rb b/lib/quby/compiler/entities/questionnaire.rb
index c22c25b..5a96efc 100755
--- a/lib/quby/compiler/entities/questionnaire.rb
+++ b/lib/quby/compiler/entities/questionnaire.rb
@@ -283,7 +283,7 @@ module Quby
           end
           flag_options[:key] = flag_key
           fail(ArgumentError, "Flag '#{flag_key}' already defined") if flags.key?(flag_key)
-          flags[flag_key] = Flag.new(flag_options)
+          flags[flag_key] = Flag.new(**flag_options)
         end
 
         def filter_flags(given_flags)
@@ -297,7 +297,7 @@ module Quby
           textvar_options[:key] = textvar_key
           validate_textvar_keys_unique(textvar_key)
           validate_depends_on_flag(textvar_key, textvar_options)
-          textvars[textvar_key] = Textvar.new(textvar_options)
+          textvars[textvar_key] = Textvar.new(**textvar_options)
         end
 
         def filter_textvars(given_textvars)
diff --git a/spec/quby/compiler/dsl/charting/bar_chart_builder_spec.rb b/spec/quby/compiler/dsl/charting/bar_chart_builder_spec.rb
index e6337b8..30bdbf5 100644
--- a/spec/quby/compiler/dsl/charting/bar_chart_builder_spec.rb
+++ b/spec/quby/compiler/dsl/charting/bar_chart_builder_spec.rb
@@ -12,8 +12,8 @@ module Quby::Compiler::DSL
       expect(dsl { }).to be_an_instance_of(::Quby::Compiler::Entities::Charting::BarChart)
     end
 
-    def dsl(key = :test, options = {}, &block)
-      builder = BarChartBuilder.new(questionnaire, key, options)
+    def dsl(key = :test, **options, &block)
+      builder = BarChartBuilder.new(questionnaire, key, **options)
       builder.build(&block)
     end
 
diff --git a/spec/quby/compiler/dsl/charting/chart_builder_spec.rb b/spec/quby/compiler/dsl/charting/chart_builder_spec.rb
index fd74c84..6ad0890 100644
--- a/spec/quby/compiler/dsl/charting/chart_builder_spec.rb
+++ b/spec/quby/compiler/dsl/charting/chart_builder_spec.rb
@@ -17,8 +17,8 @@ module Quby::Compiler::DSL
     before { ChartBuilder.set_chart_class(chart_class) }
     let(:chart_builder) { ChartBuilder.new questionnaire, 'chart_key' }
 
-    def dsl(key = :test, options = {}, &block)
-      builder = ChartBuilder.new(questionnaire, key, options)
+    def dsl(key = :test, **options, &block)
+      builder = ChartBuilder.new(questionnaire, key, **options)
       builder.build(&block)
     end
 
diff --git a/spec/quby/compiler/dsl/charting/line_chart_builder_spec.rb b/spec/quby/compiler/dsl/charting/line_chart_builder_spec.rb
index 6130e31..3c58f26 100644
--- a/spec/quby/compiler/dsl/charting/line_chart_builder_spec.rb
+++ b/spec/quby/compiler/dsl/charting/line_chart_builder_spec.rb
@@ -21,7 +21,7 @@ module Quby::Compiler::DSL
     end
 
     it 'raises when y-axis range is not specified' do
-      expect { dsl(:test, {}) { } }.to raise_error(/no range specified/)
+      expect { dsl(:test, y_range: nil) { } }.to raise_error(/no range specified/)
     end
 
     it 'sets tonality' do
@@ -40,8 +40,8 @@ module Quby::Compiler::DSL
       expect(dsl { }).to be_an_instance_of(::Quby::Compiler::Entities::Charting::LineChart)
     end
 
-    def dsl(key = :test, options = {y_range: (0..20)}, &block)
-      builder = LineChartBuilder.new(questionnaire, key, options)
+    def dsl(key = :test, y_range: (0..20), **options, &block)
+      builder = LineChartBuilder.new(questionnaire, key, y_range: y_range, **options)
       builder.build(&block)
     end
   end
diff --git a/spec/quby/compiler/dsl/charting/radar_chart_builder_spec.rb b/spec/quby/compiler/dsl/charting/radar_chart_builder_spec.rb
index 81a4809..b381af5 100644
--- a/spec/quby/compiler/dsl/charting/radar_chart_builder_spec.rb
+++ b/spec/quby/compiler/dsl/charting/radar_chart_builder_spec.rb
@@ -20,8 +20,8 @@ module Quby::Compiler::DSL
       expect(dsl { tick_interval 1 }.tick_interval).to eq 1
     end
 
-    def dsl(key = :test, options = {}, &block)
-      builder = RadarChartBuilder.new(questionnaire, key, options)
+    def dsl(key = :test, **options, &block)
+      builder = RadarChartBuilder.new(questionnaire, key, **options)
       builder.build(&block)
     end
   end
diff --git a/spec/quby/compiler/dsl/questionnaire_builder_spec.rb b/spec/quby/compiler/dsl/questionnaire_builder_spec.rb
index 03bbc36..3d82920 100644
--- a/spec/quby/compiler/dsl/questionnaire_builder_spec.rb
+++ b/spec/quby/compiler/dsl/questionnaire_builder_spec.rb
@@ -425,7 +425,7 @@ module Quby::Compiler::DSL
         }
 
         dsl do
-          add_lookup_tree :interpretations, lookup_options
+          add_lookup_tree :interpretations, **lookup_options
         end
 
         expect(questionnaire.lookup_tables[:interpretations]).to eq(lookup_options)
-- 
GitLab