This commit is contained in:
Mike Farah 2021-01-09 11:33:39 +11:00
parent 4d8b64d05c
commit 34bc33d5c5
5 changed files with 60 additions and 4 deletions

View File

@ -0,0 +1,21 @@
## Read boolean environment variable as a string
Running
```bash
myenv="true" yq eval --null-input 'strenv(myenv)'
```
will output
```yaml
12
```
## Read numeric environment variable as a string
Running
```bash
myenv="12" yq eval --null-input 'strenv(myenv)'
```
will output
```yaml
12
```

View File

@ -70,6 +70,7 @@ var TraverseArray = &OperationType{Type: "TRAVERSE_ARRAY", NumArgs: 1, Precedenc
var DocumentFilter = &OperationType{Type: "DOCUMENT_FILTER", NumArgs: 0, Precedence: 50, Handler: TraversePathOperator}
var SelfReference = &OperationType{Type: "SELF", NumArgs: 0, Precedence: 50, Handler: SelfOperator}
var ValueOp = &OperationType{Type: "VALUE", NumArgs: 0, Precedence: 50, Handler: ValueOperator}
var EnvOp = &OperationType{Type: "ENV", NumArgs: 0, Precedence: 50, Handler: EnvOperator}
var Not = &OperationType{Type: "NOT", NumArgs: 0, Precedence: 50, Handler: NotOperator}
var Empty = &OperationType{Type: "EMPTY", NumArgs: 50, Handler: EmptyOperator}

View File

@ -27,5 +27,5 @@ func TestEnvOperatorScenarios(t *testing.T) {
for _, tt := range envOperatorScenarios {
testScenario(t, &tt)
}
documentScenarios(t, "Env Variable Operators", addOperatorScenarios)
documentScenarios(t, "Env Variable Operators", envOperatorScenarios)
}

View File

@ -17,6 +17,7 @@ import (
type expressionScenario struct {
description string
subdescription string
environmentVariable string
document string
document2 string
expression string
@ -61,6 +62,10 @@ func testScenario(t *testing.T, s *expressionScenario) {
}
if s.environmentVariable != "" {
os.Setenv("myenv", s.environmentVariable)
}
results, err = treeNavigator.GetMatchingNodes(inputs, node)
if err != nil {
@ -162,6 +167,13 @@ func documentInput(w *bufio.Writer, s expressionScenario) (string, string) {
formattedDoc := ""
formattedDoc2 := ""
command := "eval"
envCommand := ""
if(s.environmentVariable != "") {
envCommand = fmt.Sprintf("myenv=\"%v\" ", s.environmentVariable)
}
if s.document != "" {
if s.dontFormatInputForDoc {
formattedDoc = s.document + "\n"
@ -188,14 +200,16 @@ func documentInput(w *bufio.Writer, s expressionScenario) (string, string) {
}
writeOrPanic(w, "then\n")
if s.expression != "" {
writeOrPanic(w, fmt.Sprintf("```bash\nyq %v '%v' %v\n```\n", command, s.expression, files))
writeOrPanic(w, fmt.Sprintf("```bash\n%vyq %v '%v' %v\n```\n", envCommand, command, s.expression, files))
} else {
writeOrPanic(w, fmt.Sprintf("```bash\nyq %v %v\n```\n", command, files))
writeOrPanic(w, fmt.Sprintf("```bash\n%vyq %v %v\n```\n", envCommand, command, files))
}
} else {
writeOrPanic(w, "Running\n")
writeOrPanic(w, fmt.Sprintf("```bash\nyq %v --null-input '%v'\n```\n", command, s.expression))
writeOrPanic(w, fmt.Sprintf("```bash\n%vyq %v --null-input '%v'\n```\n", envCommand, command, s.expression))
}
return formattedDoc, formattedDoc2
}

View File

@ -178,6 +178,25 @@ func stringValue(wrapped bool) lex.Action {
}
}
func envOp(strenv bool) lex.Action {
return func(s *lex.Scanner, m *machines.Match) (interface{}, error) {
value := string(m.Bytes)
if strenv {
// strenv( )
value = value[7:len(value)-1]
} else {
//env( )
value = value[4:len(value)-1]
}
envOperation := CreateValueOperation(value, value)
envOperation.OperationType = EnvOp
return &Token{TokenType: OperationToken, Operation: envOperation}, nil
}
}
func nullValue() lex.Action {
return func(s *lex.Scanner, m *machines.Match) (interface{}, error) {
return &Token{TokenType: OperationToken, Operation: CreateValueOperation(nil, string(m.Bytes))}, nil
@ -266,6 +285,7 @@ func initLexer() (*lex.Lexer, error) {
lexer.Add([]byte(`~`), nullValue())
lexer.Add([]byte(`"[^"]*"`), stringValue(true))
lexer.Add([]byte(`strenv\([^\)]+\)`), envOp(true))
lexer.Add([]byte(`\[`), literalToken(OpenCollect, false))
lexer.Add([]byte(`\]`), literalToken(CloseCollect, true))