Skip to content

Commit

Permalink
Merge pull request #3 from gavv/pr
Browse files Browse the repository at this point in the history
Add array support to NewAsciiFormatter(), add CompareArrays()
  • Loading branch information
yudai authored Nov 29, 2016
2 parents 07c0353 + 93a87f1 commit 4d06d22
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 6 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

## How to use

### Instllation
### Installation

```sh
go get github.com/yudai/gojsondiff
Expand Down
31 changes: 26 additions & 5 deletions formatter/ascii.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@ import (
diff "github.com/yudai/gojsondiff"
)

func NewAsciiFormatter(left map[string]interface{}) *AsciiFormatter {
func NewAsciiFormatter(left interface{}) *AsciiFormatter {
return &AsciiFormatter{
left: left,
ShowArrayIndex: false,
}
}

type AsciiFormatter struct {
left map[string]interface{}
left interface{}
ShowArrayIndex bool
buffer string
path []string
Expand All @@ -30,15 +30,36 @@ func (f *AsciiFormatter) Format(diff diff.Diff) (result string, err error) {
f.size = []int{}
f.inArray = []bool{}

if v, ok := f.left.(map[string]interface{}); ok {
f.formatObject(v, diff)
} else if v, ok := f.left.([]interface{}); ok {
f.formatArray(v, diff)
} else {
return "", fmt.Errorf("expected map[string]interface{} or []interface{}, got %T",
f.left)
}

return f.buffer, nil
}

func (f *AsciiFormatter) formatObject(left map[string]interface{}, df diff.Diff) {
f.printIndent(AsciiSame)
f.println("{")
f.push("ROOT", len(f.left), false)
f.processObject(f.left, diff.Deltas())
f.push("ROOT", len(left), false)
f.processObject(left, df.Deltas())
f.pop()
f.printIndent(AsciiSame)
f.println("}")
}

return f.buffer, nil
func (f *AsciiFormatter) formatArray(left []interface{}, df diff.Diff) {
f.printIndent(AsciiSame)
f.println("[")
f.push("ROOT", len(left), true)
f.processArray(left, df.Deltas())
f.pop()
f.printIndent(AsciiSame)
f.println("]")
}

func (f *AsciiFormatter) processArray(array []interface{}, deltas []diff.Delta) error {
Expand Down
10 changes: 10 additions & 0 deletions gojsondiff.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,16 @@ func (differ *Differ) CompareObjects(
return &diff{deltas: deltas}
}

// CompareArrays compares two JSON arrays as []interface{}
// and return a Diff object.
func (differ *Differ) CompareArrays(
left []interface{},
right []interface{},
) Diff {
deltas := differ.compareArrays(left, right)
return &diff{deltas: deltas}
}

func (differ *Differ) compareMaps(
left map[string]interface{},
right map[string]interface{},
Expand Down

0 comments on commit 4d06d22

Please sign in to comment.