Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add feature : Run with a initial query #30

Merged
merged 1 commit into from
Dec 4, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
}