zn 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Dockerfile +17 -0
- data/README.md +94 -16
- data/bin/install +5 -0
- data/bin/release +5 -0
- data/bin/rspec-test +5 -0
- data/bin/smoke-test +140 -0
- data/bin/test +1 -1
- data/lib/zn/cli.rb +4 -3
- data/lib/zn/dataset.rb +1 -0
- data/lib/zn/repos/json_repo.rb +17 -12
- data/lib/zn/version.rb +1 -1
- data/zn.gemspec +1 -1
- metadata +10 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 169966541807052462e0dcc386a5a2946ee19c27
|
4
|
+
data.tar.gz: a9c201bb92ec31de84a59bcf20a552a839feb014
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 55f9ee7f95c5be03460fe30bd20ddac9677188200f6b41aec2b6f8ca17715119e3847c109f933eddb0b4bf5f4f3b1097408b75676ad7c68ab848096706e0cbbd
|
7
|
+
data.tar.gz: 82dd515ec234cffc7a43f7a49577c9975c0fb53e699906a3e2da4005c68ad1ff9e495d7a3083789b7640fa6d3e220508ef96833d34932ae011a2c1467f01ef9d
|
data/Dockerfile
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
FROM ruby:2.4
|
2
|
+
|
3
|
+
MAINTAINER Latheesh <latheeshp@gmail.com>
|
4
|
+
|
5
|
+
RUN apt-get update && apt-get install -yqq git bash make gcc vim
|
6
|
+
|
7
|
+
RUN { echo 'install: --no-document'; echo 'update: --no-document'; } >> /etc/gemrc
|
8
|
+
|
9
|
+
WORKDIR /app
|
10
|
+
|
11
|
+
COPY . /app
|
12
|
+
|
13
|
+
RUN bin/setup
|
14
|
+
RUN bin/install
|
15
|
+
|
16
|
+
WORKDIR /app
|
17
|
+
ENTRYPOINT ["bash"]
|
data/README.md
CHANGED
@@ -1,39 +1,117 @@
|
|
1
1
|
# Zn
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
TODO: Delete this and the text above, and describe your gem
|
3
|
+
Zn is a tool to search and correlate data sources (JSON files for now).
|
6
4
|
|
7
5
|
## Installation
|
8
6
|
|
9
|
-
|
7
|
+
### Local
|
10
8
|
|
11
|
-
```
|
12
|
-
|
9
|
+
```
|
10
|
+
$ git clone https://github.com/lpadukana/zn
|
11
|
+
$ bin/setup
|
12
|
+
$ bin/install
|
13
13
|
```
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
$ bundle
|
15
|
+
### Docker
|
18
16
|
|
19
|
-
|
17
|
+
```
|
18
|
+
$ docker run -it latheeshp/zn:latest
|
19
|
+
```
|
20
20
|
|
21
|
-
|
21
|
+
Note: For latest changes, please use `exe/zn` instead of depending on the installed version.
|
22
22
|
|
23
23
|
## Usage
|
24
24
|
|
25
|
-
|
25
|
+
This tool depends on an index to understand the relationship between datasets. An example is available at `spec/fixtures/starwars/index.yml`. In this case, this file defines how `people.json`, `planets.json` and `robots.json` are related.
|
26
|
+
|
27
|
+
### Search Examples
|
28
|
+
|
29
|
+
```sh
|
30
|
+
$ zn search \
|
31
|
+
--config-file=spec/fixtures/starwars/index.yml \
|
32
|
+
--dataset robots \
|
33
|
+
--key id \
|
34
|
+
--value r2
|
35
|
+
{"id":"r2","name":"R2-D2","owner_id":"obi"}
|
36
|
+
|
37
|
+
# config file can be set using environment variables
|
38
|
+
$ export ZN_CONFIG_FILE=spec/fixtures/starwars/index.yml
|
39
|
+
|
40
|
+
$ zn search --dataset people --key name --value Kenobi
|
41
|
+
{"id":"obi","name":"Obi Wan Kenobi","planet_id":"ste"}
|
42
|
+
```
|
43
|
+
|
44
|
+
### Search and Associate Example
|
45
|
+
|
46
|
+
```sh
|
47
|
+
$ export ZN_CONFIG_FILE=spec/fixtures/starwars/index.yml
|
48
|
+
|
49
|
+
$ zn search --dataset robots --key id --value r2 | zn associate --dataset robots
|
50
|
+
{"id":"r2","name":"R2-D2","owner_id":"obi","owner":{"id":"obi","name":"Obi Wan Kenobi","planet_id":"ste"}}
|
51
|
+
|
52
|
+
$ zn search --dataset people --key name --value Kenobi | zn associate --dataset people
|
53
|
+
{"id":"obi","name":"Obi Wan Kenobi","planet_id":"ste","robots":[{"id":"r2","name":"R2-D2","owner_id":"obi"},{"id":"c3po","name":"C-3PO","owner_id":"obi"}],"home_planet":{"id":"ste","name":"Stewjon"}}
|
54
|
+
```
|
55
|
+
|
56
|
+
### Search, Associate and Pretty-print Example
|
57
|
+
|
58
|
+
```sh
|
59
|
+
$ export ZN_CONFIG_FILE=spec/fixtures/starwars/index.yml
|
60
|
+
|
61
|
+
$ zn search --dataset people --key name --value Kenobi | zn associate --dataset people | zn prettify-json
|
62
|
+
{
|
63
|
+
"id": "obi",
|
64
|
+
"name": "Obi Wan Kenobi",
|
65
|
+
"planet_id": "ste",
|
66
|
+
"robots": [
|
67
|
+
{
|
68
|
+
"id": "r2",
|
69
|
+
"name": "R2-D2",
|
70
|
+
"owner_id": "obi"
|
71
|
+
},
|
72
|
+
{
|
73
|
+
"id": "c3po",
|
74
|
+
"name": "C-3PO",
|
75
|
+
"owner_id": "obi"
|
76
|
+
}
|
77
|
+
],
|
78
|
+
"home_planet": {
|
79
|
+
"id": "ste",
|
80
|
+
"name": "Stewjon"
|
81
|
+
}
|
82
|
+
}
|
83
|
+
```
|
84
|
+
|
85
|
+
## Tests
|
86
|
+
|
87
|
+
### Rspec
|
88
|
+
|
89
|
+
```sh
|
90
|
+
$ bin/rspec-test
|
91
|
+
```
|
92
|
+
|
93
|
+
### Style Checks
|
94
|
+
|
95
|
+
```sh
|
96
|
+
$ bin/style-check
|
97
|
+
```
|
98
|
+
|
99
|
+
### Smoke Tests
|
100
|
+
|
101
|
+
```sh
|
102
|
+
$ bin/smoke-test
|
103
|
+
```
|
26
104
|
|
27
105
|
## Development
|
28
106
|
|
29
|
-
After checking out the repo, run `bin/setup` to install dependencies. Then, run `
|
107
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
30
108
|
|
31
|
-
To install this gem onto your local machine, run `
|
109
|
+
To install this gem onto your local machine, run `bin/install`. To release a new version, update the version number in `version.rb`, and then run `bin/release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
32
110
|
|
33
111
|
## Contributing
|
34
112
|
|
35
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/lpadukana/zn
|
113
|
+
Bug reports and pull requests are welcome on GitHub at <https://github.com/lpadukana/zn>.
|
36
114
|
|
37
115
|
## License
|
38
116
|
|
39
|
-
|
117
|
+
Available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
data/bin/install
ADDED
data/bin/release
ADDED
data/bin/rspec-test
ADDED
data/bin/smoke-test
ADDED
@@ -0,0 +1,140 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
set -euo pipefail
|
4
|
+
|
5
|
+
# Smoke-tests
|
6
|
+
|
7
|
+
mkdir -p /tmp/zn
|
8
|
+
|
9
|
+
fail() {
|
10
|
+
echo -e "\\033[31mFAIL: $*\\033[0m"
|
11
|
+
exit 1
|
12
|
+
}
|
13
|
+
|
14
|
+
run () {
|
15
|
+
echo -e ">>> \\033[1m$*\\033[0m"
|
16
|
+
sh -c "$@" > >(tee /tmp/zn/stdout) 2> >(tee /tmp/zn/stderr >&2)
|
17
|
+
echo ""
|
18
|
+
}
|
19
|
+
|
20
|
+
check_output() {
|
21
|
+
if ! grep -q "${*?}" /tmp/zn/stdout; then
|
22
|
+
fail "Expected output: $*"
|
23
|
+
fi
|
24
|
+
}
|
25
|
+
|
26
|
+
# Exercise help
|
27
|
+
run "exe/zn --help"
|
28
|
+
check_output "Search the text in values of the given key"
|
29
|
+
check_output "Find associated entities"
|
30
|
+
check_output "List keys in a dataset"
|
31
|
+
check_output "List known datasets"
|
32
|
+
check_output "Pretty print JSON"
|
33
|
+
check_output "Usage:"
|
34
|
+
check_output "Parameters:"
|
35
|
+
check_output "Subcommands:"
|
36
|
+
check_output "Options:"
|
37
|
+
|
38
|
+
run "exe/zn search \
|
39
|
+
--config-file=spec/fixtures/starwars/index.yml \
|
40
|
+
--dataset robots \
|
41
|
+
--key id \
|
42
|
+
--value r2"
|
43
|
+
check_output '{"id":"r2","name":"R2-D2","owner_id":"obi"}'
|
44
|
+
|
45
|
+
run "exe/zn search \
|
46
|
+
--config-file=spec/fixtures/starwars/index.yml \
|
47
|
+
--dataset robots \
|
48
|
+
--key id \
|
49
|
+
--value r2 |\
|
50
|
+
exe/zn associate \
|
51
|
+
--config-file=spec/fixtures/starwars/index.yml \
|
52
|
+
--dataset robots"
|
53
|
+
check_output '{"id":"r2","name":"R2-D2","owner_id":"obi","owner":{"id":"obi","name":"Obi Wan Kenobi","planet_id":"ste"}}'
|
54
|
+
|
55
|
+
run "exe/zn search \
|
56
|
+
--config-file=spec/fixtures/starwars/index.yml \
|
57
|
+
--dataset robots \
|
58
|
+
--key id \
|
59
|
+
--value r2 |\
|
60
|
+
exe/zn associate \
|
61
|
+
--config-file=spec/fixtures/starwars/index.yml \
|
62
|
+
--dataset robots |\
|
63
|
+
exe/zn prettify-json"
|
64
|
+
check_output '{
|
65
|
+
"id": "r2",
|
66
|
+
"name": "R2-D2",
|
67
|
+
"owner_id": "obi",
|
68
|
+
"owner": {
|
69
|
+
"id": "obi",
|
70
|
+
"name": "Obi Wan Kenobi",
|
71
|
+
"planet_id": "ste"
|
72
|
+
}
|
73
|
+
}'
|
74
|
+
|
75
|
+
run "exe/zn search \
|
76
|
+
--config-file=spec/fixtures/starwars/index.yml \
|
77
|
+
--dataset people \
|
78
|
+
--key name \
|
79
|
+
--value Obi |\
|
80
|
+
exe/zn associate \
|
81
|
+
--config-file=spec/fixtures/starwars/index.yml \
|
82
|
+
--dataset people |\
|
83
|
+
exe/zn prettify-json"
|
84
|
+
check_output '{
|
85
|
+
"id": "obi",
|
86
|
+
"name": "Obi Wan Kenobi",
|
87
|
+
"planet_id": "ste",
|
88
|
+
"robots": \[
|
89
|
+
{
|
90
|
+
"id": "r2",
|
91
|
+
"name": "R2-D2",
|
92
|
+
"owner_id": "obi"
|
93
|
+
},
|
94
|
+
{
|
95
|
+
"id": "c3po",
|
96
|
+
"name": "C-3PO",
|
97
|
+
"owner_id": "obi"
|
98
|
+
}
|
99
|
+
\],
|
100
|
+
"home_planet": {
|
101
|
+
"id": "ste",
|
102
|
+
"name": "Stewjon"
|
103
|
+
}
|
104
|
+
}'
|
105
|
+
|
106
|
+
run 'exe/zn search \
|
107
|
+
--config-file=spec/fixtures/starwars/index.yml \
|
108
|
+
--dataset planets \
|
109
|
+
--key name \
|
110
|
+
--value "Outer Rim" |\
|
111
|
+
exe/zn associate \
|
112
|
+
--config-file=spec/fixtures/starwars/index.yml \
|
113
|
+
--dataset planets |\
|
114
|
+
exe/zn prettify-json'
|
115
|
+
check_output '{
|
116
|
+
"id": "ou-3453",
|
117
|
+
"name": "Outer Rim 3453",
|
118
|
+
"residents": \[
|
119
|
+
{
|
120
|
+
"id": "rev",
|
121
|
+
"name": "Darth Revan",
|
122
|
+
"planet_id": "ou-3453"
|
123
|
+
}
|
124
|
+
\]
|
125
|
+
}'
|
126
|
+
|
127
|
+
run 'zn list-keys \
|
128
|
+
--config-file spec/fixtures/starwars/index.yml \
|
129
|
+
--dataset robots'
|
130
|
+
check_output 'id
|
131
|
+
name
|
132
|
+
owner_id'
|
133
|
+
|
134
|
+
run 'zn list-datasets \
|
135
|
+
--config-file spec/fixtures/starwars/index.yml'
|
136
|
+
check_output 'people
|
137
|
+
planets
|
138
|
+
robots'
|
139
|
+
|
140
|
+
echo -e "\\033[32mSUCCESS\\033[0m"
|
data/bin/test
CHANGED
data/lib/zn/cli.rb
CHANGED
@@ -59,15 +59,16 @@ module Zn
|
|
59
59
|
required: true, environment_variable: 'ZN_CONFIG_FILE'
|
60
60
|
|
61
61
|
def execute
|
62
|
-
puts search_assembly(config_file).
|
62
|
+
puts search_assembly(config_file).dataset_keys(dataset: dataset)
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
66
66
|
subcommand 'list-datasets', 'List known datasets' do
|
67
|
-
option ['--config-file', '-c'], 'CONFIG_FILE', 'Config that defines datasets',
|
67
|
+
option ['--config-file', '-c'], 'CONFIG_FILE', 'Config that defines datasets',
|
68
|
+
required: true, environment_variable: 'ZN_CONFIG_FILE'
|
68
69
|
|
69
70
|
def execute
|
70
|
-
puts search_assembly(config_file).
|
71
|
+
puts search_assembly(config_file).dataset_names
|
71
72
|
end
|
72
73
|
end
|
73
74
|
|
data/lib/zn/dataset.rb
CHANGED
data/lib/zn/repos/json_repo.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'multi_json'
|
4
|
-
require 'jq/extend'
|
5
4
|
|
6
5
|
module Zn
|
7
6
|
module Repos
|
@@ -29,25 +28,31 @@ module Zn
|
|
29
28
|
value = params.fetch(:value)
|
30
29
|
exact = params.fetch(:exact)
|
31
30
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
yield result
|
31
|
+
if exact
|
32
|
+
search_exact(key, value) { |result| yield result }
|
33
|
+
else
|
34
|
+
search_for_inclusion(key, value) { |result| yield result }
|
36
35
|
end
|
37
36
|
end
|
38
37
|
|
39
38
|
private
|
40
39
|
|
41
|
-
def
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
40
|
+
def search_exact(key, value)
|
41
|
+
return enum_for(:search_exact, key, value) unless block_given?
|
42
|
+
|
43
|
+
all.each do |element|
|
44
|
+
yield element if element[key].to_s == value.to_s
|
46
45
|
end
|
47
46
|
end
|
48
47
|
|
49
|
-
def
|
50
|
-
|
48
|
+
def search_for_inclusion(key, value)
|
49
|
+
return enum_for(:search_for_inclusion, key, value) unless block_given?
|
50
|
+
|
51
|
+
return [].each if value.empty?
|
52
|
+
|
53
|
+
all.each do |element|
|
54
|
+
yield element if element[key].to_s.include?(value.to_s)
|
55
|
+
end
|
51
56
|
end
|
52
57
|
end
|
53
58
|
end
|
data/lib/zn/version.rb
CHANGED
data/zn.gemspec
CHANGED
@@ -28,7 +28,7 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.require_paths = ['lib']
|
29
29
|
|
30
30
|
spec.add_dependency 'multi_json', '~> 1.12'
|
31
|
-
spec.add_dependency '
|
31
|
+
spec.add_dependency 'clamp', '~> 1.1'
|
32
32
|
|
33
33
|
spec.add_development_dependency 'bundler', '~> 1.15'
|
34
34
|
spec.add_development_dependency 'rake', '~> 10.0'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zn
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Latheesh Padukana
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-06-
|
11
|
+
date: 2017-06-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: multi_json
|
@@ -25,19 +25,19 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.12'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: clamp
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '1.1'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '1.1'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -163,12 +163,17 @@ files:
|
|
163
163
|
- ".rubocop.yml"
|
164
164
|
- ".ruby-version"
|
165
165
|
- ".travis.yml"
|
166
|
+
- Dockerfile
|
166
167
|
- Gemfile
|
167
168
|
- LICENSE.txt
|
168
169
|
- README.md
|
169
170
|
- Rakefile
|
170
171
|
- bin/console
|
172
|
+
- bin/install
|
173
|
+
- bin/release
|
174
|
+
- bin/rspec-test
|
171
175
|
- bin/setup
|
176
|
+
- bin/smoke-test
|
172
177
|
- bin/style-check
|
173
178
|
- bin/test
|
174
179
|
- exe/zn
|