Skip to content

Commit 0094689

Browse files
committed
implemented jsonmunge, add vcard2json to build process
1 parent b635fc4 commit 0094689

File tree

3 files changed

+171
-14
lines changed

3 files changed

+171
-14
lines changed

Makefile

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ VERSION = $(shell grep -m1 'Version = ' $(PROJECT).go | cut -d\" -f 2)
77

88
BRANCH = $(shell git branch | grep '* ' | cut -d\ -f 2)
99

10-
build: bin/csvcols bin/csvrows bin/csvfind bin/csvjoin bin/jsoncols bin/jsonrange bin/xlsx2json bin/xlsx2csv bin/csv2mdtable bin/csv2xlsx bin/csv2json bin/vcard2json
10+
build: bin/csvcols bin/csvrows bin/csvfind bin/csvjoin bin/jsoncols bin/jsonrange bin/xlsx2json bin/xlsx2csv bin/csv2mdtable bin/csv2xlsx bin/csv2json bin/vcard2json bin/jsonmunge
1111

1212
bin/csvcols: datatools.go cmds/csvcols/csvcols.go
1313
go build -o bin/csvcols cmds/csvcols/csvcols.go
@@ -45,6 +45,8 @@ bin/csvfind: datatools.go cmds/csvfind/csvfind.go
4545
bin/vcard2json: datatools.go cmds/vcard2json/vcard2json.go
4646
go build -o bin/vcard2json cmds/vcard2json/vcard2json.go
4747

48+
bin/jsonmunge: datatools.go cmds/jsonmunge/jsonmunge.go
49+
go build -o bin/jsonmunge cmds/jsonmunge/jsonmunge.go
4850

4951

5052
test:
@@ -85,6 +87,7 @@ install:
8587
env GOBIN=$(HOME)/bin go install cmds/csv2xlsx/csv2xlsx.go
8688
env GOBIN=$(HOME)/bin go install cmds/csv2json/csv2json.go
8789
env GOBIN=$(HOME)/bin go install cmds/vcard2json/vcard2json.go
90+
env GOBIN=$(HOME)/bin go install cmds/jsonmunge/jsonmunge.go
8891

8992
dist/linux-amd64:
9093
mkdir -p dist/bin
@@ -99,6 +102,8 @@ dist/linux-amd64:
99102
env GOOS=linux GOARCH=amd64 go build -o dist/bin/csv2mdtable cmds/csv2mdtable/csv2mdtable.go
100103
env GOOS=linux GOARCH=amd64 go build -o dist/bin/csv2xlsx cmds/csv2xlsx/csv2xlsx.go
101104
env GOOS=linux GOARCH=amd64 go build -o dist/bin/csv2json cmds/csv2json/csv2json.go
105+
env GOOS=linux GOARCH=amd64 go build -o dist/bin/jsonmunge cmds/jsonmunge/jsonmunge.go
106+
env GOOS=linux GOARCH=amd64 go build -o dist/bin/vcard2json cmds/vcard2json/vcard2json.go
102107
cd dist && zip -r $(PROJECT)-$(VERSION)-linux-amd64.zip README.md LICENSE INSTALL.md bin/* docs/* how-to/* demos/*
103108
rm -fR dist/bin
104109

@@ -115,6 +120,8 @@ dist/macosx-amd64:
115120
env GOOS=darwin GOARCH=amd64 go build -o dist/bin/csv2mdtable cmds/csv2mdtable/csv2mdtable.go
116121
env GOOS=darwin GOARCH=amd64 go build -o dist/bin/csv2xlsx cmds/csv2xlsx/csv2xlsx.go
117122
env GOOS=darwin GOARCH=amd64 go build -o dist/bin/csv2json cmds/csv2json/csv2json.go
123+
env GOOS=darwin GOARCH=amd64 go build -o dist/bin/vcard2json cmds/vcard2json/vcard2json.go
124+
env GOOS=darwin GOARCH=amd64 go build -o dist/bin/jsonmunge cmds/jsonmunge/jsonmunge.go
118125
cd dist && zip -r $(PROJECT)-$(VERSION)-macosx-amd64.zip README.md LICENSE INSTALL.md bin/* docs/* how-to/* demos/*
119126
rm -fR dist/bin
120127

@@ -131,6 +138,8 @@ dist/windows-amd64:
131138
env GOOS=windows GOARCH=amd64 go build -o dist/bin/csv2mdtable.exe cmds/csv2mdtable/csv2mdtable.go
132139
env GOOS=windows GOARCH=amd64 go build -o dist/bin/csv2xlsx.exe cmds/csv2xlsx/csv2xlsx.go
133140
env GOOS=windows GOARCH=amd64 go build -o dist/bin/csv2json.exe cmds/csv2json/csv2json.go
141+
env GOOS=windows GOARCH=amd64 go build -o dist/bin/vcard2json.exe cmds/vcard2json/vcard2json.go
142+
env GOOS=windows GOARCH=amd64 go build -o dist/bin/jsonmunge.exe cmds/jsonmunge/jsonmunge.go
134143
cd dist && zip -r $(PROJECT)-$(VERSION)-windows-amd64.zip README.md LICENSE INSTALL.md bin/* docs/* how-to/* demos/*
135144
rm -fR dist/bin
136145

@@ -148,6 +157,8 @@ dist/raspbian-arm7:
148157
env GOOS=linux GOARCH=arm GOARM=7 go build -o dist/bin/csv2mdtable cmds/csv2mdtable/csv2mdtable.go
149158
env GOOS=linux GOARCH=arm GOARM=7 go build -o dist/bin/csv2xlsx cmds/csv2xlsx/csv2xlsx.go
150159
env GOOS=linux GOARCH=arm GOARM=7 go build -o dist/bin/csv2json cmds/csv2json/csv2json.go
160+
env GOOS=linux GOARCH=arm GOARM=7 go build -o dist/bin/vcard2json cmds/vcard2json/vcard2json.go
161+
env GOOS=linux GOARCH=arm GOARM=7 go build -o dist/bin/jsonmunge cmds/jsonmunge/jsonmunge.go
151162
cd dist && zip -r $(PROJECT)-$(VERSION)-raspbian-arm7.zip README.md LICENSE INSTALL.md bin/* docs/* how-to/* demos/*
152163
rm -fR dist/bin
153164

@@ -157,19 +168,12 @@ distribute_docs:
157168
cp -v README.md dist/
158169
cp -v LICENSE dist/
159170
cp -v INSTALL.md dist/
160-
cp -v docs/csv2json.md dist/docs/
161-
cp -v docs/csv2mdtable.md dist/docs/
162-
cp -v docs/csv2xlsx.md dist/docs/
163-
cp -v docs/csvcols.md dist/docs/
164-
cp -v docs/csvrows.md dist/docs/
165-
cp -v docs/csvfind.md dist/docs/
166-
cp -v docs/csvjoin.md dist/docs/
167-
cp -v docs/index.md dist/docs/
168-
cp -v docs/jsoncols.md dist/docs/
169-
cp -v docs/jsonrange.md dist/docs/
170-
cp -v docs/xlsx2csv.md dist/docs/
171-
cp -v docs/xlsx2json.md dist/docs/
171+
cp -v docs/*.md dist/docs/
172+
if [ -f dist/docs/nav.md ]; then rm dist/docs/nav.md; fi
173+
if [ -f dist/docs/index.md ]; then rm dist/docs/index.md; fi
172174
cp -v how-to/*.md dist/how-to/
175+
if [ -f dist/how-to/nav.md ]; then rm dist/how-to/nav.md; fi
176+
if [ -f dist/how-to/index.md ]; then rm dist/how-to/index.md; fi
173177
cp -vR demos dist/
174178

175179
release: distribute_docs dist/linux-amd64 dist/macosx-amd64 dist/windows-amd64 dist/raspbian-arm7

cmds/jsonmunge/jsonmunge.go

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
//
2+
// jsonmunge is a command line tool that takes a JSON document and
3+
// a Go text/template rendering the result. Useful for
4+
// reshaping a JSON document or transforming into a new format,
5+
// or filter for specific content.
6+
//
7+
// @author R. S. Doiel, <[email protected]>
8+
//
9+
package main
10+
11+
import (
12+
"flag"
13+
"fmt"
14+
"io/ioutil"
15+
"os"
16+
"path"
17+
"text/template"
18+
19+
// Caltech Library Packages
20+
"github.com/caltechlibrary/cli"
21+
"github.com/caltechlibrary/datatools"
22+
"github.com/caltechlibrary/dotpath"
23+
"github.com/caltechlibrary/tmplfn"
24+
)
25+
26+
var (
27+
usage = `USAGE: %s [OPTIONS] TEMPLATE_FILENAME`
28+
29+
description = `
30+
SYSNOPSIS
31+
32+
%s is a command line tool that takes a JSON document and
33+
one or more Go templates rendering the results. Useful for
34+
reshaping a JSON document, transforming into a new format,
35+
or filter for specific content.
36+
37+
+ TEMPLATE_FILENAME is the name of a Go text tempate file used to render
38+
the outbound JSON document
39+
`
40+
41+
examples = `
42+
EXAMPLES
43+
44+
If data.json contained
45+
46+
{"name": "Doe, Jane", "email":"[email protected]", "age": 42}
47+
48+
and the template, name.tmpl, contained
49+
50+
{{- .name -}}
51+
52+
Getting just the name could be done with
53+
54+
cat data.json | %s name.tmpl
55+
56+
This would yeild
57+
58+
"Doe, Jane"
59+
`
60+
61+
// Basic Options
62+
showHelp bool
63+
showLicense bool
64+
showVersion bool
65+
inputFName string
66+
outputFName string
67+
68+
// Application Specific Options
69+
)
70+
71+
func init() {
72+
// Basic Options
73+
flag.BoolVar(&showHelp, "h", false, "display help")
74+
flag.BoolVar(&showLicense, "l", false, "display license")
75+
flag.BoolVar(&showVersion, "v", false, "display version")
76+
flag.StringVar(&inputFName, "i", "", "input filename")
77+
flag.StringVar(&inputFName, "input", "", "input filename")
78+
flag.StringVar(&outputFName, "o", "", "output filename")
79+
flag.StringVar(&outputFName, "output", "", "output filename")
80+
81+
// Application Specific Options
82+
}
83+
84+
func main() {
85+
appName := path.Base(os.Args[0])
86+
flag.Parse()
87+
args := flag.Args()
88+
89+
// Configuration and command line interation
90+
cfg := cli.New(appName, "DATATOOLS", fmt.Sprintf(datatools.LicenseText, appName, datatools.Version), datatools.Version)
91+
cfg.UsageText = fmt.Sprintf(usage, appName)
92+
cfg.DescriptionText = fmt.Sprintf(description, appName)
93+
cfg.ExampleText = fmt.Sprintf(examples, appName)
94+
95+
if showHelp == true {
96+
fmt.Println(cfg.Usage())
97+
os.Exit(0)
98+
}
99+
100+
if showLicense == true {
101+
fmt.Println(cfg.License())
102+
os.Exit(0)
103+
}
104+
105+
if showVersion == true {
106+
fmt.Println(cfg.Version())
107+
os.Exit(0)
108+
}
109+
110+
if len(args) == 0 {
111+
fmt.Fprintf(os.Stderr, "Need to provide at least one template name\n")
112+
os.Exit(1)
113+
}
114+
// Read in and compile our templates
115+
tmpl, err := template.New(path.Base(args[0])).Funcs(tmplfn.AllFuncs()).ParseFiles(args...)
116+
if err != nil {
117+
fmt.Fprintf(os.Stderr, "%s\n", err)
118+
os.Exit(1)
119+
}
120+
121+
in, err := cli.Open(inputFName, os.Stdin)
122+
if err != nil {
123+
fmt.Fprintf(os.Stderr, "%s\n", err)
124+
os.Exit(1)
125+
}
126+
defer cli.CloseFile(inputFName, in)
127+
128+
out, err := cli.Create(outputFName, os.Stdout)
129+
if err != nil {
130+
fmt.Fprintf(os.Stderr, "%s\n", err)
131+
os.Exit(1)
132+
}
133+
defer cli.CloseFile(outputFName, out)
134+
135+
// READ in the JSON document
136+
buf, err := ioutil.ReadAll(in)
137+
if err != nil {
138+
fmt.Fprintf(os.Stderr, "%s\n", err)
139+
os.Exit(1)
140+
}
141+
// JSON Decode our document
142+
data, err := dotpath.JSONDecode(buf)
143+
if err != nil {
144+
fmt.Fprintf(os.Stderr, "%s\n", err)
145+
os.Exit(1)
146+
}
147+
148+
// Execute template with data
149+
if err := tmpl.Execute(out, data); err != nil {
150+
fmt.Fprintf(os.Stderr, "%s\n", err)
151+
os.Exit(1)
152+
}
153+
}

mk-website.bash

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ done
102102

103103

104104
# Generate the individual command docuumentation pages
105-
for FNAME in csvcols csvfind csvjoin csv2json csv2mdtable csv2xlsx jsoncols jsonrange xlsx2json xlsx2csv; do
105+
for FNAME in csvcols csvfind csvjoin csv2json csv2mdtable csv2xlsx jsoncols jsonrange xlsx2json xlsx2csv vcard2json jsonmunge; do
106106
echo "Generating docs/$FNAME.html"
107107
MakePage docs/nav.md "docs/$FNAME.md" "docs/$FNAME.html"
108108
done

0 commit comments

Comments
 (0)