zn 0.1.1 → 0.1.2
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/README.md +51 -9
- data/bin/publish-docker-image +13 -0
- data/lib/zn/associators/belongs_to.rb +3 -1
- data/lib/zn/associators/has_many.rb +2 -0
- data/lib/zn/repos/json_repo.rb +3 -5
- data/lib/zn/search_assembler.rb +10 -0
- data/lib/zn/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8cb0af882c77d258e9766ffc0d18ddaecb901a80
|
4
|
+
data.tar.gz: 629c1270a41ddaffe36d6cbf343efdba15fe0697
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b79c006378b6330d2bac41890adaa25245acfe7909123b6ebd7a9a6776e1c9341cccf0e1569642027e921eb0d3ef65a5d2f71955a1b616b7c84c6c435984110c
|
7
|
+
data.tar.gz: 22c2fe6da7b01b900f420ad417874ce0f71d58337fdf81dee8c7ca79abf9c641369aab9ab3c0d39351b6e7bf3c981b2f1326c2c8163c7263d3c30bc347d63f5b
|
data/README.md
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# Zn
|
2
2
|
|
3
|
+
[](https://travis-ci.org/lpadukana/zn)
|
4
|
+
|
5
|
+
|
3
6
|
Zn is a tool to search and correlate data sources (JSON files for now).
|
4
7
|
|
5
8
|
## Installation
|
@@ -22,23 +25,46 @@ Note: For latest changes, please use `exe/zn` instead of depending on the instal
|
|
22
25
|
|
23
26
|
## Usage
|
24
27
|
|
25
|
-
This tool depends on an index to understand the relationship between datasets. An example is available at
|
28
|
+
This tool depends on an index to understand the relationship between datasets. An example is available at [spec/fixtures/starwars/index.yml](spec/fixtures/starwars/index.yml). In this case, this file defines how `people.json`, `planets.json` and `robots.json` are related.
|
26
29
|
|
27
|
-
###
|
30
|
+
### Discovering Datasets
|
28
31
|
|
29
32
|
```sh
|
30
|
-
$
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
33
|
+
$ export ZN_CONFIG_FILE=spec/fixtures/starwars/index.yml
|
34
|
+
|
35
|
+
$ zn list-datasets
|
36
|
+
people
|
37
|
+
planets
|
38
|
+
robots
|
39
|
+
```
|
36
40
|
|
37
|
-
|
41
|
+
Note: config file can also be passed in as `--config-file spec/fixtures/starwars/index.yml`
|
42
|
+
|
43
|
+
### Discovering Keys
|
44
|
+
|
45
|
+
```sh
|
38
46
|
$ export ZN_CONFIG_FILE=spec/fixtures/starwars/index.yml
|
39
47
|
|
48
|
+
$ zn list-keys --dataset robots
|
49
|
+
id
|
50
|
+
name
|
51
|
+
owner_id
|
52
|
+
```
|
53
|
+
|
54
|
+
### Search Examples
|
55
|
+
|
56
|
+
```sh
|
57
|
+
$ export ZN_CONFIG_FILE=spec/fixtures/starwars/index.yml
|
58
|
+
|
59
|
+
$ zn search --dataset robots --key id --value r2
|
60
|
+
{"id":"r2","name":"R2-D2","owner_id":"obi"}
|
61
|
+
|
40
62
|
$ zn search --dataset people --key name --value Kenobi
|
41
63
|
{"id":"obi","name":"Obi Wan Kenobi","planet_id":"ste"}
|
64
|
+
|
65
|
+
# --exact can be used to search for exact values
|
66
|
+
$ zn search --exact --dataset people --key name --value 'Obi Wan Kenobi'
|
67
|
+
{"id":"obi","name":"Obi Wan Kenobi","planet_id":"ste"}
|
42
68
|
```
|
43
69
|
|
44
70
|
### Search and Associate Example
|
@@ -82,6 +108,22 @@ $ zn search --dataset people --key name --value Kenobi | zn associate --dataset
|
|
82
108
|
}
|
83
109
|
```
|
84
110
|
|
111
|
+
### Zendesk Examples to Try
|
112
|
+
|
113
|
+
```sh
|
114
|
+
$ export ZN_CONFIG_FILE=spec/fixtures/zendesk/index.yml
|
115
|
+
|
116
|
+
$ zn list-datasets
|
117
|
+
$ zn list-keys --dataset users
|
118
|
+
$ zn list-keys --dataset tickets
|
119
|
+
$ zn list-keys --dataset organizations
|
120
|
+
$ zn search --dataset users --key _id --value 10 | zn associate --dataset users | zn prettify-json
|
121
|
+
$ zn search --dataset tickets --key subject --value Australia | zn associate --dataset tickets | zn prettify-json
|
122
|
+
$ zn search --dataset organizations --key name --value Qualitern | zn associate --dataset organizations | zn prettify-json
|
123
|
+
$ zn search --dataset users --key _id --value 1 | wc -l
|
124
|
+
$ zn search --exact --dataset users --key _id --value 1 | wc -l
|
125
|
+
```
|
126
|
+
|
85
127
|
## Tests
|
86
128
|
|
87
129
|
### Rspec
|
@@ -0,0 +1,13 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
set -euxo pipefail
|
4
|
+
|
5
|
+
version=$(ruby -Ilib -r zn/version -e 'puts Zn::VERSION')
|
6
|
+
tag="latheeshp/zn:${version}"
|
7
|
+
tag_latest="latheeshp/zn:latest"
|
8
|
+
|
9
|
+
docker build -t "${tag}" .
|
10
|
+
docker tag "${tag}" "${tag_latest}"
|
11
|
+
|
12
|
+
docker push "${tag}"
|
13
|
+
docker push "${tag_latest}"
|
@@ -7,6 +7,8 @@ module Zn
|
|
7
7
|
attr_reader :datasets, :dataset_name, :foreign_key, :primary_key, :dataset, :repo
|
8
8
|
|
9
9
|
def initialize(datasets, params)
|
10
|
+
raise ArgumentError, 'Datasets is nil' if datasets.nil?
|
11
|
+
|
10
12
|
@datasets = datasets
|
11
13
|
@dataset_name = params.fetch('dataset')
|
12
14
|
@foreign_key = params.fetch('foreign_key')
|
@@ -15,7 +17,7 @@ module Zn
|
|
15
17
|
|
16
18
|
def associate(object)
|
17
19
|
@dataset ||= datasets.fetch(dataset_name)
|
18
|
-
dataset.search(key: primary_key, value: object
|
20
|
+
dataset.search(key: primary_key, value: object.fetch(foreign_key), exact: true).to_a.first
|
19
21
|
end
|
20
22
|
end
|
21
23
|
end
|
@@ -7,6 +7,8 @@ module Zn
|
|
7
7
|
attr_reader :datasets, :dataset_name, :foreign_key, :primary_key, :dataset, :repo
|
8
8
|
|
9
9
|
def initialize(datasets, params)
|
10
|
+
raise ArgumentError, 'Datasets is nil' if datasets.nil?
|
11
|
+
|
10
12
|
@datasets = datasets
|
11
13
|
@dataset_name = params.fetch('dataset')
|
12
14
|
@foreign_key = params.fetch('foreign_key')
|
data/lib/zn/repos/json_repo.rb
CHANGED
@@ -28,7 +28,7 @@ module Zn
|
|
28
28
|
value = params.fetch(:value)
|
29
29
|
exact = params.fetch(:exact)
|
30
30
|
|
31
|
-
if exact
|
31
|
+
if exact || value.empty?
|
32
32
|
search_exact(key, value) { |result| yield result }
|
33
33
|
else
|
34
34
|
search_for_inclusion(key, value) { |result| yield result }
|
@@ -41,17 +41,15 @@ module Zn
|
|
41
41
|
return enum_for(:search_exact, key, value) unless block_given?
|
42
42
|
|
43
43
|
all.each do |element|
|
44
|
-
yield element if element
|
44
|
+
yield element if element.fetch(key, '').to_s == value.to_s
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
48
48
|
def search_for_inclusion(key, value)
|
49
49
|
return enum_for(:search_for_inclusion, key, value) unless block_given?
|
50
50
|
|
51
|
-
return [].each if value.empty?
|
52
|
-
|
53
51
|
all.each do |element|
|
54
|
-
yield element if element
|
52
|
+
yield element if element.fetch(key, '').to_s.include?(value.to_s)
|
55
53
|
end
|
56
54
|
end
|
57
55
|
end
|
data/lib/zn/search_assembler.rb
CHANGED
@@ -8,12 +8,17 @@ module Zn
|
|
8
8
|
attr_reader :config_root, :assembly
|
9
9
|
|
10
10
|
def initialize(assembly)
|
11
|
+
raise ArgumentError, 'Assembly is nil' if assembly.nil?
|
12
|
+
|
11
13
|
@assembly = assembly
|
12
14
|
@repos = {}
|
13
15
|
@associators = {}
|
14
16
|
end
|
15
17
|
|
16
18
|
def register_repo_class(name, repo_class)
|
19
|
+
raise ArgumentError, 'Name is empty' if name.to_s.empty?
|
20
|
+
raise ArgumentError, 'Repo class is nil' if repo_class.nil?
|
21
|
+
|
17
22
|
@repos[name] = repo_class
|
18
23
|
end
|
19
24
|
|
@@ -24,6 +29,9 @@ module Zn
|
|
24
29
|
end
|
25
30
|
|
26
31
|
def register_associator_class(name, associator_class)
|
32
|
+
raise ArgumentError, 'Name is empty' if name.to_s.empty?
|
33
|
+
raise ArgumentError, 'Associator class is nil' if associator_class.nil?
|
34
|
+
|
27
35
|
@associators[name] = associator_class
|
28
36
|
end
|
29
37
|
|
@@ -47,6 +55,8 @@ module Zn
|
|
47
55
|
end
|
48
56
|
|
49
57
|
def assemble(config_yml)
|
58
|
+
raise ArgumentError, 'Config yml is empty' if config_yml.to_s.empty?
|
59
|
+
|
50
60
|
config = YAML.load_file(config_yml)
|
51
61
|
@config_root = File.dirname(config_yml)
|
52
62
|
dataset_definitions = config.fetch('datasets')
|
data/lib/zn/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
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.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Latheesh Padukana
|
@@ -170,6 +170,7 @@ files:
|
|
170
170
|
- Rakefile
|
171
171
|
- bin/console
|
172
172
|
- bin/install
|
173
|
+
- bin/publish-docker-image
|
173
174
|
- bin/release
|
174
175
|
- bin/rspec-test
|
175
176
|
- bin/setup
|