yjp 1 year ago
parent
commit
7e9388e774
2 changed files with 62 additions and 2 deletions
  1. 55 0
      approve_former/and.go
  2. 7 2
      test/approve_former_test.go

+ 55 - 0
approve_former/and.go

@@ -1 +1,56 @@
 package approve_former
+
+import "strings"
+
+type And struct {
+	childNodes []Node
+}
+
+func NewAnd(childNodes ...Node) *And {
+	return &And{
+		childNodes: childNodes,
+	}
+}
+
+func (and *And) GetDepends() string {
+	var depends string
+	for _, childNode := range and.childNodes {
+		if depends == "" {
+			depends = childNode.GetDepends()
+		} else {
+			depends = depends + " && " + childNode.GetDepends()
+		}
+	}
+
+	return depends
+}
+
+func (and *And) GetWhen() string {
+	var when string
+	for _, childNode := range and.childNodes {
+		if when == "" {
+			when = "(" + childNode.GetWhen() + ")"
+		} else {
+			when = when + " && " + "(" + childNode.GetWhen() + ")"
+		}
+	}
+
+	return when
+}
+
+func (and *And) Render(upperNode Node) (string, error) {
+	var content string
+
+	for _, childNode := range and.childNodes {
+		childNodeContent, err := childNode.Render(upperNode)
+		if err != nil {
+			return "", err
+		}
+
+		content = content + childNodeContent + "\n"
+	}
+
+	content = strings.TrimSuffix(content, "\n")
+
+	return content, nil
+}

+ 7 - 2
test/approve_former_test.go

@@ -8,8 +8,13 @@ import (
 
 func TestApproveFormer(t *testing.T) {
 	flow := approve_former.NewFlow("flow",
-		approve_former.NewSign("sign1"),
-		approve_former.NewSign("sign2"))
+		approve_former.NewSign("A"),
+		approve_former.NewAnd(
+			approve_former.NewSign("B"),
+			approve_former.NewSign("C"),
+		),
+		approve_former.NewSign("E"),
+	)
 
 	flowDefinition, err := flow.Render(nil)
 	if err != nil {