Skip to content

Commit

Permalink
Merge pull request #30 from simeji/add-run-with-query
Browse files Browse the repository at this point in the history
Add feature : Run with a initial query
  • Loading branch information
simeji committed Dec 4, 2016
2 parents dde1cd2 + 22c86d3 commit 4358a76
Show file tree
Hide file tree
Showing 5 changed files with 68 additions and 31 deletions.
12 changes: 12 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ Json Incremental Digger
It's very simple tool.
You can drill down interactively by using filtering queries like [jq](https://stedolan.github.io/jq/).

**Suggestion** and **Auto completion** of this tool will provide you very comfotable JSON drill down.

## Demo

![demo-jid-main](https://github.com/simeji/jid/wiki/images/demo-jid-main-640.gif)
Expand Down Expand Up @@ -44,6 +46,7 @@ go get github.com/stretchr/testify/assert

* [simple json example](#simple-json-example)
* [simple json example2](#simple-json-example2)
* [with initial query](#with-initial-query)
* [with curl](#with-curl)

#### simple json example
Expand Down Expand Up @@ -77,6 +80,13 @@ This json is used by [demo section](https://github.com/simeji/jid#demo).
echo '{"info":{"date":"2016-10-23","version":1.0},"users":[{"name":"simeji","uri":"https://github.com/simeji","id":1},{"name":"simeji2","uri":"https://example.com/simeji","id":2},{"name":"simeji3","uri":"https://example.com/simeji3","id":3}],"userCount":3}}'|jid
```

#### With initial query

First argument of `jid` is initial query.
(Use JSON same as [Demo](#demo))

![demo-jid-with-query](https://github.com/simeji/jid/wiki/images/demo-jid-with-query-640.gif)

#### with curl

Sample for using [RDAP](https://datatracker.ietf.org/wg/weirds/documents/) data.
Expand All @@ -101,4 +111,6 @@ curl -s http://rdg.afilias.info/rdap/domain/example.info | jid

### Option

First argument: Initial query

-q : Print query (for jq)
18 changes: 12 additions & 6 deletions cmd/jid/jid.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,27 +11,33 @@ import (
func main() {
content := os.Stdin

var query bool
var qm bool
qs := "."

flag.BoolVar(&query, "q", false, "output query")
flag.BoolVar(&qm, "q", false, "Output query mode")
flag.Parse()

e, err := jid.NewEngine(content)
args := flag.Args()
if len(args) > 0 {
qs = args[0]
}

e, err := jid.NewEngine(content, qs)

if err != nil {
fmt.Println(err)
os.Exit(1)
}
os.Exit(run(e, query))
os.Exit(run(e, qm))
}

func run(e jid.EngineInterface, query bool) int {
func run(e jid.EngineInterface, qm bool) int {

result := e.Run()
if result.GetError() != nil {
return 2
}
if query {
if qm {
fmt.Printf("%s", result.GetQueryString())
} else {
fmt.Printf("%s", result.GetContent())
Expand Down
9 changes: 5 additions & 4 deletions cmd/jid/jid_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ package main

import (
"fmt"
"github.com/simeji/jid"
"github.com/stretchr/testify/assert"
"os"
"testing"

"github.com/simeji/jid"
"github.com/stretchr/testify/assert"
)

var called int = 0
Expand All @@ -16,7 +17,7 @@ func TestMain(m *testing.M) {
defer os.Exit(code)
}

func TestjidRun(t *testing.T) {
func TestJidRun(t *testing.T) {
var assert = assert.New(t)

e := &EngineMock{err: nil}
Expand All @@ -31,7 +32,7 @@ func TestjidRun(t *testing.T) {
assert.Zero(result)
}

func TestjidRunWithError(t *testing.T) {
func TestJidRunWithError(t *testing.T) {
called = 0
var assert = assert.New(t)
e := &EngineMock{err: fmt.Errorf("")}
Expand Down
5 changes: 3 additions & 2 deletions engine.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,15 +37,15 @@ type Engine struct {
cursorOffsetX int
}

func NewEngine(s io.Reader) (EngineInterface, error) {
func NewEngine(s io.Reader, qs string) (EngineInterface, error) {
j, err := NewJsonManager(s)
if err != nil {
return nil, err
}
e := &Engine{
manager: j,
term: NewTerminal(FilterPrompt, DefaultY),
query: NewQuery([]rune("")),
query: NewQuery([]rune(qs)),
complete: []string{"", ""},
keymode: false,
candidates: []string{},
Expand All @@ -55,6 +55,7 @@ func NewEngine(s io.Reader) (EngineInterface, error) {
queryConfirm: false,
cursorOffsetX: 0,
}
e.cursorOffsetX = len(e.query.Get())
return e, nil
}

Expand Down
55 changes: 36 additions & 19 deletions engine_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,34 @@ func TestNewEngine(t *testing.T) {
var assert = assert.New(t)

f, _ := os.Create("/dev/null")
e, err := NewEngine(f)
e, err := NewEngine(f, "")
assert.Nil(e)
assert.NotNil(err)

ee := getEngine(`{"name":"go"}`)
ee := getEngine(`{"name":"go"}`, "")
assert.NotNil(ee)
assert.Equal("", ee.query.StringGet())
assert.Equal(0, ee.cursorOffsetX)
}

func TestNewEngineWithQuery(t *testing.T) {
var assert = assert.New(t)
e := getEngine(`{"name":"go"}`, ".nam")
assert.Equal(".nam", e.query.StringGet())
assert.Equal(4, e.cursorOffsetX)

e = getEngine(`{"name":"go"}`, "nam")
assert.Equal("", e.query.StringGet())
assert.Equal(0, e.cursorOffsetX)

e = getEngine(`{"name":"go"}`, ".nam..")
assert.Equal("", e.query.StringGet())
assert.Equal(0, e.cursorOffsetX)
}

func TestDeleteChar(t *testing.T) {
var assert = assert.New(t)
e := getEngine(`{"name":"go"}`)
e := getEngine(`{"name":"go"}`, "")
e.query.StringSet(".name")
e.cursorOffsetX = 5

Expand All @@ -33,7 +50,7 @@ func TestDeleteChar(t *testing.T) {

func TestDeleteWordBackward(t *testing.T) {
var assert = assert.New(t)
e := getEngine(`{"name":"go"}`)
e := getEngine(`{"name":"go"}`, "")
e.query.StringSet(".name")

e.deleteWordBackward()
Expand All @@ -53,7 +70,7 @@ func TestDeleteWordBackward(t *testing.T) {

func TestScrollToAbove(t *testing.T) {
var assert = assert.New(t)
e := getEngine(`{"named":"go","NameTest":[1,2,3]}`)
e := getEngine(`{"named":"go","NameTest":[1,2,3]}`, "")
assert.Equal(0, e.contentOffset)
e.scrollToAbove()
assert.Equal(0, e.contentOffset)
Expand All @@ -66,7 +83,7 @@ func TestScrollToAbove(t *testing.T) {

func TestScrollToBelow(t *testing.T) {
var assert = assert.New(t)
e := getEngine(`{"named":"go","NameTest":[1,2,3]}`)
e := getEngine(`{"named":"go","NameTest":[1,2,3]}`, "")
e.scrollToBelow()
assert.Equal(1, e.contentOffset)
e.scrollToBelow()
Expand All @@ -77,13 +94,13 @@ func TestScrollToBelow(t *testing.T) {
func TestGetContents(t *testing.T) {
var assert = assert.New(t)

e := getEngine(`{"name":"go"}`)
e := getEngine(`{"name":"go"}`, "")
c := e.getContents()
assert.Equal([]string{`{`, ` "name": "go"`, "}"}, c)
assert.Equal([]string{}, e.candidates)
assert.Equal([]string{"", ""}, e.complete)

e = getEngine(`{"name":"go", "naming":"simeji", "foo":"bar"}`)
e = getEngine(`{"name":"go", "naming":"simeji", "foo":"bar"}`, "")
e.query.StringSet(".n")
c = e.getContents()
assert.Equal([]string{`{`, ` "foo": "bar",`, ` "name": "go",`, ` "naming": "simeji"`, "}"}, c)
Expand All @@ -99,7 +116,7 @@ func TestGetContents(t *testing.T) {

func TestSetCandidateData(t *testing.T) {
var assert = assert.New(t)
e := getEngine(`{"name":"go"}`)
e := getEngine(`{"name":"go"}`, "")

// case 1
e.candidates = []string{"test", "testing"}
Expand Down Expand Up @@ -160,7 +177,7 @@ func TestSetCandidateData(t *testing.T) {

func TestConfirmCandidate(t *testing.T) {
var assert = assert.New(t)
e := getEngine(`{"name":"go","NameTest":[1,2,3]}`)
e := getEngine(`{"name":"go","NameTest":[1,2,3]}`, "")
e.query.StringSet(".")
e.queryConfirm = false
e.candidates = []string{"test", "testing", "foo"}
Expand All @@ -178,7 +195,7 @@ func TestConfirmCandidate(t *testing.T) {
assert.True(e.queryConfirm)
assert.Equal(4, e.cursorOffsetX)

e = getEngine(`{"name":"go"}`)
e = getEngine(`{"name":"go"}`, "")
e.query.StringSet(".name.hoge")
e.candidates = []string{"aaa", "bbb", "ccc"}
e.candidateidx = 1
Expand All @@ -191,7 +208,7 @@ func TestConfirmCandidate(t *testing.T) {

func TestCtrllAction(t *testing.T) {
var assert = assert.New(t)
e := getEngine(`{"name":"go","NameTest":[1,2,3]}`)
e := getEngine(`{"name":"go","NameTest":[1,2,3]}`, "")
assert.False(e.keymode)
e.toggleKeymode()
assert.True(e.keymode)
Expand All @@ -201,7 +218,7 @@ func TestCtrllAction(t *testing.T) {

func TestTabAction(t *testing.T) {
var assert = assert.New(t)
e := getEngine(`{"name":"go","NameTest":[1,2,3]}`)
e := getEngine(`{"name":"go","NameTest":[1,2,3]}`, "")
e.query.StringSet(".namet")
e.complete = []string{"est", "NameTest"}

Expand All @@ -222,7 +239,7 @@ func TestTabAction(t *testing.T) {

func TestEscAction(t *testing.T) {
var assert = assert.New(t)
e := getEngine(`{"name":"go","NameTest":[1,2,3]}`)
e := getEngine(`{"name":"go","NameTest":[1,2,3]}`, "")
assert.False(e.candidatemode)
e.escapeCandidateMode()
assert.False(e.candidatemode)
Expand All @@ -233,7 +250,7 @@ func TestEscAction(t *testing.T) {

func TestInputChar(t *testing.T) {
var assert = assert.New(t)
e := getEngine(`{"name":"go"}`)
e := getEngine(`{"name":"go"}`, "")
e.query.StringSet(".name")
e.cursorOffsetX = len(e.query.Get())
assert.Equal(5, e.cursorOffsetX)
Expand All @@ -249,7 +266,7 @@ func TestInputChar(t *testing.T) {

func TestMoveCursorForwardAndBackward(t *testing.T) {
var assert = assert.New(t)
e := getEngine(`{"name":"simeji"}`)
e := getEngine(`{"name":"simeji"}`, "")
e.query.StringSet(".ne")

e.cursorOffsetX = 0
Expand All @@ -274,7 +291,7 @@ func TestMoveCursorForwardAndBackward(t *testing.T) {

func TestMoveCursorToTopAndEnd(t *testing.T) {
var assert = assert.New(t)
e := getEngine(`{"name":"simeji"}`)
e := getEngine(`{"name":"simeji"}`, "")
e.query.StringSet(".ne")

e.cursorOffsetX = 2
Expand All @@ -285,9 +302,9 @@ func TestMoveCursorToTopAndEnd(t *testing.T) {
assert.Equal(3, e.cursorOffsetX)
}

func getEngine(j string) *Engine {
func getEngine(j string, qs string) *Engine {
r := bytes.NewBufferString(j)
e, _ := NewEngine(r)
e, _ := NewEngine(r, qs)
ee := e.(*Engine)
return ee
}

0 comments on commit 4358a76

Please sign in to comment.