From ac0f6087fc52cdcb2177c417a97b9a33886a5f9d Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Sun, 30 Jan 2022 13:11:47 -0500 Subject: [PATCH] Add Task#[] --- build_tests/tasks/tasks.rb | 8 ++++++++ lib/rscons/task.rb | 15 +++++++++++++++ spec/build_tests_spec.rb | 21 +++++++++++++++++++++ 3 files changed, 44 insertions(+) diff --git a/build_tests/tasks/tasks.rb b/build_tests/tasks/tasks.rb index c49ccea..dc2e3ec 100644 --- a/build_tests/tasks/tasks.rb +++ b/build_tests/tasks/tasks.rb @@ -18,3 +18,11 @@ task "four", desc: "Task four", params: [ puts "myparam:" + params["myparam"].inspect puts "myp2:" + params["myp2"].inspect end + +task "five" do + puts "four myparam value is #{Task["four"]["myparam"]}" +end + +task "six" do |task| + puts task["nope"] +end diff --git a/lib/rscons/task.rb b/lib/rscons/task.rb index 6d34833..42da156 100644 --- a/lib/rscons/task.rb +++ b/lib/rscons/task.rb @@ -131,6 +131,21 @@ module Rscons modify(options, &block) end + # Get a parameter's value. + # + # @param param_name [String] + # Parameter name. + # + # @return [String] + # Parameter value. + def [](param_name) + param = @params[param_name] + unless param + raise RsconsError.new("Could not find parameter '#{param_name}'") + end + param.value + end + # Execute a task's actions. # # @return [void] diff --git a/spec/build_tests_spec.rb b/spec/build_tests_spec.rb index 6aef8fe..6aa82ed 100644 --- a/spec/build_tests_spec.rb +++ b/spec/build_tests_spec.rb @@ -2885,6 +2885,27 @@ EOF expect(result.stdout).to eq %[four\nmyparam:"cli-value"\nmyp2:"--myp2"\none\n] end + it "allows accessing task arguments via Task#[]" do + test_dir "tasks" + result = run_rscons(args: %w[-f tasks.rb configure]) + result = run_rscons(args: %w[-f tasks.rb five]) + expect(result.stderr).to eq "" + expect(result.status).to eq 0 + expect(result.stdout).to match /four myparam value is defaultvalue/ + result = run_rscons(args: %w[-f tasks.rb four --myparam=v42 five]) + expect(result.stderr).to eq "" + expect(result.status).to eq 0 + expect(result.stdout).to match /four myparam value is v42/ + end + + it "exits with an error when attempting to get a nonexistent parameter value" do + test_dir "tasks" + result = run_rscons(args: %w[-f tasks.rb configure]) + result = run_rscons(args: %w[-f tasks.rb six]) + expect(result.stderr).to match /Could not find parameter 'nope'/ + expect(result.status).to_not eq 0 + end + it "displays tasks and their arguments in the help info" do test_dir "tasks" result = run_rscons(args: %w[-f tasks.rb -h])