github.com/altipla-consulting/ravendb-go-client@v0.1.3/java_script_array.go (about)

     1  package ravendb
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  )
     7  
     8  // JavaScriptArray builds arguments for patch operation on array fields
     9  type JavaScriptArray struct {
    10  	suffix     int
    11  	argCounter int
    12  
    13  	pathToArray string
    14  
    15  	scriptLines []string
    16  	Parameters  map[string]interface{}
    17  }
    18  
    19  // NewJavaScriptArray creates a new JavaScriptArray
    20  func NewJavaScriptArray(suffix int, pathToArray string) *JavaScriptArray {
    21  	return &JavaScriptArray{
    22  		suffix:      suffix,
    23  		pathToArray: pathToArray,
    24  		Parameters:  map[string]interface{}{},
    25  	}
    26  }
    27  
    28  // Add builds expression that adds an elements to array
    29  func (a *JavaScriptArray) Add(args ...interface{}) *JavaScriptArray {
    30  	// TODO: more efficient if len(args) > 1
    31  	for _, u := range args {
    32  		argumentName := a.getNextArgumentName()
    33  
    34  		s := "this." + a.pathToArray + ".push(args." + argumentName + ")"
    35  		a.scriptLines = append(a.scriptLines, s)
    36  		a.Parameters[argumentName] = u
    37  	}
    38  
    39  	return a
    40  }
    41  
    42  // RemoveAt builds expression that removes an element at index from array
    43  func (a *JavaScriptArray) RemoveAt(index int) *JavaScriptArray {
    44  	argumentName := a.getNextArgumentName()
    45  
    46  	s := "this." + a.pathToArray + ".splice(args." + argumentName + ", 1)"
    47  	a.scriptLines = append(a.scriptLines, s)
    48  	a.Parameters[argumentName] = index
    49  
    50  	return a
    51  }
    52  
    53  func (a *JavaScriptArray) getNextArgumentName() string {
    54  	s := fmt.Sprintf("val_%d_%d", a.argCounter, a.suffix)
    55  	a.argCounter++
    56  	return s
    57  }
    58  
    59  func (a *JavaScriptArray) GetScript() string {
    60  	return strings.Join(a.scriptLines, "\r")
    61  }