From 1d5ecb244d6da0ad9aae02fab88542ed660f4662 Mon Sep 17 00:00:00 2001 From: Mike Farah Date: Fri, 8 Jan 2021 21:07:46 +1100 Subject: [PATCH] wip --- pkg/yqlib/operator_env.go | 32 +++++++++++ pkg/yqlib/operator_env_test.go | 100 +++++++++++++++++++++++++++++++++ 2 files changed, 132 insertions(+) create mode 100644 pkg/yqlib/operator_env.go create mode 100644 pkg/yqlib/operator_env_test.go diff --git a/pkg/yqlib/operator_env.go b/pkg/yqlib/operator_env.go new file mode 100644 index 00000000..597a62be --- /dev/null +++ b/pkg/yqlib/operator_env.go @@ -0,0 +1,32 @@ +package yqlib + +import ( + "container/list" + "os" + + yaml "gopkg.in/yaml.v3" +) + +// type EnvOpPreferences struct { +// StringValue bool +// } + +func EnvOperator(d *dataTreeNavigator, matchMap *list.List, pathNode *PathTreeNode) (*list.List, error) { + envName := pathNode.Operation.CandidateNode.Node.Value + log.Debug("EnvOperator, env name:", envName) + + rawValue := os.Getenv(envName) + + target := &CandidateNode{ + Path: make([]interface{}, 0), + Document: 0, + Filename: "", + Node: &yaml.Node{ + Kind: yaml.ScalarNode, + Tag: "!!str", + Value: rawValue, + }, + } + + return nodeToMap(target), nil +} diff --git a/pkg/yqlib/operator_env_test.go b/pkg/yqlib/operator_env_test.go new file mode 100644 index 00000000..33c28127 --- /dev/null +++ b/pkg/yqlib/operator_env_test.go @@ -0,0 +1,100 @@ +package yqlib + +import ( + "testing" +) + +var envOperatorScenarios = []expressionScenario{ + { + document: ``, + expression: `1`, + expected: []string{ + "D0, P[], (!!int)::1\n", + }, + }, + { + document: ``, + expression: `-1`, + expected: []string{ + "D0, P[], (!!int)::-1\n", + }, + }, { + document: ``, + expression: `1.2`, + expected: []string{ + "D0, P[], (!!float)::1.2\n", + }, + }, { + document: ``, + expression: `-5.2e11`, + expected: []string{ + "D0, P[], (!!float)::-5.2e11\n", + }, + }, { + document: ``, + expression: `5e-10`, + expected: []string{ + "D0, P[], (!!float)::5e-10\n", + }, + }, + { + document: ``, + expression: `"cat"`, + expected: []string{ + "D0, P[], (!!str)::cat\n", + }, + }, + { + document: ``, + expression: `"frog jumps"`, + expected: []string{ + "D0, P[], (!!str)::frog jumps\n", + }, + }, + { + document: ``, + expression: `"1.3"`, + expected: []string{ + "D0, P[], (!!str)::\"1.3\"\n", + }, + }, { + document: ``, + expression: `"true"`, + expected: []string{ + "D0, P[], (!!str)::\"true\"\n", + }, + }, { + document: ``, + expression: `true`, + expected: []string{ + "D0, P[], (!!bool)::true\n", + }, + }, { + document: ``, + expression: `false`, + expected: []string{ + "D0, P[], (!!bool)::false\n", + }, + }, + { + document: ``, + expression: `Null`, + expected: []string{ + "D0, P[], (!!null)::Null\n", + }, + }, + { + document: ``, + expression: `~`, + expected: []string{ + "D0, P[], (!!null)::~\n", + }, + }, +} + +func TestEnvOperatorScenarios(t *testing.T) { + for _, tt := range envOperatorScenarios { + testScenario(t, &tt) + } + documentScenarios(t, "Env Variable Operators", addOperatorScenarios) +}