chronicle-etl 0.2.4 → 0.4.0
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/.github/workflows/ruby.yml +35 -0
- data/.gitignore +3 -0
- data/.rubocop.yml +31 -1
- data/Guardfile +7 -0
- data/README.md +21 -14
- data/Rakefile +4 -2
- data/chronicle-etl.gemspec +18 -10
- data/exe/chronicle-etl +1 -1
- data/lib/chronicle/etl/cli/connectors.rb +53 -7
- data/lib/chronicle/etl/cli/jobs.rb +59 -24
- data/lib/chronicle/etl/cli/main.rb +18 -16
- data/lib/chronicle/etl/cli/subcommand_base.rb +2 -2
- data/lib/chronicle/etl/cli.rb +7 -0
- data/lib/chronicle/etl/config.rb +1 -1
- data/lib/chronicle/etl/configurable.rb +150 -0
- data/lib/chronicle/etl/exceptions.rb +14 -1
- data/lib/chronicle/etl/extraction.rb +12 -0
- data/lib/chronicle/etl/extractors/csv_extractor.rb +32 -31
- data/lib/chronicle/etl/extractors/extractor.rb +25 -13
- data/lib/chronicle/etl/extractors/file_extractor.rb +17 -32
- data/lib/chronicle/etl/extractors/helpers/filesystem_reader.rb +104 -0
- data/lib/chronicle/etl/extractors/json_extractor.rb +37 -0
- data/lib/chronicle/etl/extractors/stdin_extractor.rb +6 -1
- data/lib/chronicle/etl/job.rb +30 -29
- data/lib/chronicle/etl/job_definition.rb +45 -7
- data/lib/chronicle/etl/job_log.rb +10 -0
- data/lib/chronicle/etl/job_logger.rb +23 -20
- data/lib/chronicle/etl/loaders/csv_loader.rb +5 -1
- data/lib/chronicle/etl/loaders/loader.rb +5 -2
- data/lib/chronicle/etl/loaders/rest_loader.rb +9 -5
- data/lib/chronicle/etl/loaders/stdout_loader.rb +6 -1
- data/lib/chronicle/etl/loaders/table_loader.rb +51 -7
- data/lib/chronicle/etl/logger.rb +48 -0
- data/lib/chronicle/etl/models/attachment.rb +14 -0
- data/lib/chronicle/etl/models/base.rb +23 -7
- data/lib/chronicle/etl/models/entity.rb +9 -3
- data/lib/chronicle/etl/registry/connector_registration.rb +62 -0
- data/lib/chronicle/etl/registry/registry.rb +52 -0
- data/lib/chronicle/etl/registry/self_registering.rb +25 -0
- data/lib/chronicle/etl/runner.rb +58 -7
- data/lib/chronicle/etl/serializers/jsonapi_serializer.rb +25 -0
- data/lib/chronicle/etl/serializers/serializer.rb +27 -0
- data/lib/chronicle/etl/transformers/image_file_transformer.rb +247 -0
- data/lib/chronicle/etl/transformers/null_transformer.rb +10 -1
- data/lib/chronicle/etl/transformers/transformer.rb +41 -10
- data/lib/chronicle/etl/utils/binary_attachments.rb +21 -0
- data/lib/chronicle/etl/utils/progress_bar.rb +3 -1
- data/lib/chronicle/etl/utils/text_recognition.rb +15 -0
- data/lib/chronicle/etl/version.rb +1 -1
- data/lib/chronicle/etl.rb +8 -2
- metadata +146 -34
- data/.ruby-version +0 -1
- data/Gemfile.lock +0 -91
- data/lib/chronicle/etl/catalog.rb +0 -108
- data/lib/chronicle/etl/utils/jsonapi.rb +0 -28
metadata
CHANGED
@@ -1,29 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chronicle-etl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Louis
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-02-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: activesupport
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0
|
19
|
+
version: '7.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0
|
26
|
+
version: '7.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: chronic_duration
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.10.6
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.10.6
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: colorize
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -39,33 +53,61 @@ dependencies:
|
|
39
53
|
- !ruby/object:Gem::Version
|
40
54
|
version: 0.8.1
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
56
|
+
name: marcel
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
59
|
- - "~>"
|
46
60
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
61
|
+
version: 1.0.2
|
48
62
|
type: :runtime
|
49
63
|
prerelease: false
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
51
65
|
requirements:
|
52
66
|
- - "~>"
|
53
67
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
68
|
+
version: 1.0.2
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
70
|
+
name: mini_exiftool
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
73
|
- - "~>"
|
60
74
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
75
|
+
version: '2.10'
|
62
76
|
type: :runtime
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
80
|
- - "~>"
|
67
81
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
82
|
+
version: '2.10'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: nokogiri
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1.13'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '1.13'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: runcom
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '6.0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '6.0'
|
69
111
|
- !ruby/object:Gem::Dependency
|
70
112
|
name: sequel
|
71
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -81,7 +123,21 @@ dependencies:
|
|
81
123
|
- !ruby/object:Gem::Version
|
82
124
|
version: '5.35'
|
83
125
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
126
|
+
name: sqlite3
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '1.4'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '1.4'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: thor
|
85
141
|
requirement: !ruby/object:Gem::Requirement
|
86
142
|
requirements:
|
87
143
|
- - "~>"
|
@@ -94,6 +150,34 @@ dependencies:
|
|
94
150
|
- - "~>"
|
95
151
|
- !ruby/object:Gem::Version
|
96
152
|
version: '1.2'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: tty-progressbar
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0.17'
|
160
|
+
type: :runtime
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0.17'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: tty-table
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0.11'
|
174
|
+
type: :runtime
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0.11'
|
97
181
|
- !ruby/object:Gem::Dependency
|
98
182
|
name: bundler
|
99
183
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,6 +192,20 @@ dependencies:
|
|
108
192
|
- - "~>"
|
109
193
|
- !ruby/object:Gem::Version
|
110
194
|
version: '2.1'
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
name: pry-byebug
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - "~>"
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '3.9'
|
202
|
+
type: :development
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - "~>"
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '3.9'
|
111
209
|
- !ruby/object:Gem::Dependency
|
112
210
|
name: rake
|
113
211
|
requirement: !ruby/object:Gem::Requirement
|
@@ -137,61 +235,61 @@ dependencies:
|
|
137
235
|
- !ruby/object:Gem::Version
|
138
236
|
version: '3.9'
|
139
237
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
238
|
+
name: simplecov
|
141
239
|
requirement: !ruby/object:Gem::Requirement
|
142
240
|
requirements:
|
143
241
|
- - "~>"
|
144
242
|
- !ruby/object:Gem::Version
|
145
|
-
version: '
|
243
|
+
version: '0.21'
|
146
244
|
type: :development
|
147
245
|
prerelease: false
|
148
246
|
version_requirements: !ruby/object:Gem::Requirement
|
149
247
|
requirements:
|
150
248
|
- - "~>"
|
151
249
|
- !ruby/object:Gem::Version
|
152
|
-
version: '
|
250
|
+
version: '0.21'
|
153
251
|
- !ruby/object:Gem::Dependency
|
154
|
-
name:
|
252
|
+
name: guard-rspec
|
155
253
|
requirement: !ruby/object:Gem::Requirement
|
156
254
|
requirements:
|
157
255
|
- - "~>"
|
158
256
|
- !ruby/object:Gem::Version
|
159
|
-
version:
|
257
|
+
version: 4.7.3
|
160
258
|
type: :development
|
161
259
|
prerelease: false
|
162
260
|
version_requirements: !ruby/object:Gem::Requirement
|
163
261
|
requirements:
|
164
262
|
- - "~>"
|
165
263
|
- !ruby/object:Gem::Version
|
166
|
-
version:
|
264
|
+
version: 4.7.3
|
167
265
|
- !ruby/object:Gem::Dependency
|
168
|
-
name:
|
266
|
+
name: yard
|
169
267
|
requirement: !ruby/object:Gem::Requirement
|
170
268
|
requirements:
|
171
269
|
- - "~>"
|
172
270
|
- !ruby/object:Gem::Version
|
173
|
-
version:
|
271
|
+
version: 0.9.7
|
174
272
|
type: :development
|
175
273
|
prerelease: false
|
176
274
|
version_requirements: !ruby/object:Gem::Requirement
|
177
275
|
requirements:
|
178
276
|
- - "~>"
|
179
277
|
- !ruby/object:Gem::Version
|
180
|
-
version:
|
278
|
+
version: 0.9.7
|
181
279
|
- !ruby/object:Gem::Dependency
|
182
|
-
name:
|
280
|
+
name: rubocop
|
183
281
|
requirement: !ruby/object:Gem::Requirement
|
184
282
|
requirements:
|
185
283
|
- - "~>"
|
186
284
|
- !ruby/object:Gem::Version
|
187
|
-
version:
|
285
|
+
version: 1.25.1
|
188
286
|
type: :development
|
189
287
|
prerelease: false
|
190
288
|
version_requirements: !ruby/object:Gem::Requirement
|
191
289
|
requirements:
|
192
290
|
- - "~>"
|
193
291
|
- !ruby/object:Gem::Version
|
194
|
-
version:
|
292
|
+
version: 1.25.1
|
195
293
|
description: Chronicle-ETL allows you to extract personal data from a variety of services,
|
196
294
|
transformer it, and load it.
|
197
295
|
email:
|
@@ -201,15 +299,15 @@ executables:
|
|
201
299
|
extensions: []
|
202
300
|
extra_rdoc_files: []
|
203
301
|
files:
|
302
|
+
- ".github/workflows/ruby.yml"
|
204
303
|
- ".gitignore"
|
205
304
|
- ".rspec"
|
206
305
|
- ".rubocop.yml"
|
207
|
-
- ".ruby-version"
|
208
306
|
- ".travis.yml"
|
209
307
|
- ".yardopts"
|
210
308
|
- CODE_OF_CONDUCT.md
|
211
309
|
- Gemfile
|
212
|
-
-
|
310
|
+
- Guardfile
|
213
311
|
- LICENSE.txt
|
214
312
|
- README.md
|
215
313
|
- Rakefile
|
@@ -218,16 +316,20 @@ files:
|
|
218
316
|
- chronicle-etl.gemspec
|
219
317
|
- exe/chronicle-etl
|
220
318
|
- lib/chronicle/etl.rb
|
221
|
-
- lib/chronicle/etl/
|
319
|
+
- lib/chronicle/etl/cli.rb
|
222
320
|
- lib/chronicle/etl/cli/connectors.rb
|
223
321
|
- lib/chronicle/etl/cli/jobs.rb
|
224
322
|
- lib/chronicle/etl/cli/main.rb
|
225
323
|
- lib/chronicle/etl/cli/subcommand_base.rb
|
226
324
|
- lib/chronicle/etl/config.rb
|
325
|
+
- lib/chronicle/etl/configurable.rb
|
227
326
|
- lib/chronicle/etl/exceptions.rb
|
327
|
+
- lib/chronicle/etl/extraction.rb
|
228
328
|
- lib/chronicle/etl/extractors/csv_extractor.rb
|
229
329
|
- lib/chronicle/etl/extractors/extractor.rb
|
230
330
|
- lib/chronicle/etl/extractors/file_extractor.rb
|
331
|
+
- lib/chronicle/etl/extractors/helpers/filesystem_reader.rb
|
332
|
+
- lib/chronicle/etl/extractors/json_extractor.rb
|
231
333
|
- lib/chronicle/etl/extractors/stdin_extractor.rb
|
232
334
|
- lib/chronicle/etl/job.rb
|
233
335
|
- lib/chronicle/etl/job_definition.rb
|
@@ -238,25 +340,35 @@ files:
|
|
238
340
|
- lib/chronicle/etl/loaders/rest_loader.rb
|
239
341
|
- lib/chronicle/etl/loaders/stdout_loader.rb
|
240
342
|
- lib/chronicle/etl/loaders/table_loader.rb
|
343
|
+
- lib/chronicle/etl/logger.rb
|
241
344
|
- lib/chronicle/etl/models/activity.rb
|
345
|
+
- lib/chronicle/etl/models/attachment.rb
|
242
346
|
- lib/chronicle/etl/models/base.rb
|
243
347
|
- lib/chronicle/etl/models/entity.rb
|
244
348
|
- lib/chronicle/etl/models/generic.rb
|
349
|
+
- lib/chronicle/etl/registry/connector_registration.rb
|
350
|
+
- lib/chronicle/etl/registry/registry.rb
|
351
|
+
- lib/chronicle/etl/registry/self_registering.rb
|
245
352
|
- lib/chronicle/etl/runner.rb
|
353
|
+
- lib/chronicle/etl/serializers/jsonapi_serializer.rb
|
354
|
+
- lib/chronicle/etl/serializers/serializer.rb
|
355
|
+
- lib/chronicle/etl/transformers/image_file_transformer.rb
|
246
356
|
- lib/chronicle/etl/transformers/null_transformer.rb
|
247
357
|
- lib/chronicle/etl/transformers/transformer.rb
|
358
|
+
- lib/chronicle/etl/utils/binary_attachments.rb
|
248
359
|
- lib/chronicle/etl/utils/hash_utilities.rb
|
249
|
-
- lib/chronicle/etl/utils/jsonapi.rb
|
250
360
|
- lib/chronicle/etl/utils/progress_bar.rb
|
361
|
+
- lib/chronicle/etl/utils/text_recognition.rb
|
251
362
|
- lib/chronicle/etl/version.rb
|
252
363
|
homepage: https://github.com/chronicle-app
|
253
364
|
licenses:
|
254
365
|
- MIT
|
255
366
|
metadata:
|
367
|
+
allowed_push_host: https://rubygems.org
|
256
368
|
homepage_uri: https://github.com/chronicle-app
|
257
369
|
source_code_uri: https://github.com/chronicle-app/chronicle-etl
|
258
|
-
changelog_uri: https://github.com/chronicle-app/chronicle-etl/
|
259
|
-
post_install_message:
|
370
|
+
changelog_uri: https://github.com/chronicle-app/chronicle-etl/releases
|
371
|
+
post_install_message:
|
260
372
|
rdoc_options: []
|
261
373
|
require_paths:
|
262
374
|
- lib
|
@@ -264,15 +376,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
264
376
|
requirements:
|
265
377
|
- - ">="
|
266
378
|
- !ruby/object:Gem::Version
|
267
|
-
version: '
|
379
|
+
version: '2.7'
|
268
380
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
269
381
|
requirements:
|
270
382
|
- - ">="
|
271
383
|
- !ruby/object:Gem::Version
|
272
384
|
version: '0'
|
273
385
|
requirements: []
|
274
|
-
rubygems_version: 3.1.
|
275
|
-
signing_key:
|
386
|
+
rubygems_version: 3.1.6
|
387
|
+
signing_key:
|
276
388
|
specification_version: 4
|
277
389
|
summary: ETL tool for personal data
|
278
390
|
test_files: []
|
data/.ruby-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
2.7.1
|
data/Gemfile.lock
DELETED
@@ -1,91 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
chronicle-etl (0.2.4)
|
5
|
-
colorize (~> 0.8.1)
|
6
|
-
deep_merge (~> 1.2)
|
7
|
-
sequel (~> 5.35)
|
8
|
-
thor (~> 0.20)
|
9
|
-
tty-progressbar (~> 0.17)
|
10
|
-
tty-table (~> 0.11)
|
11
|
-
|
12
|
-
GEM
|
13
|
-
remote: https://rubygems.org/
|
14
|
-
specs:
|
15
|
-
byebug (11.1.3)
|
16
|
-
coderay (1.1.3)
|
17
|
-
colorize (0.8.1)
|
18
|
-
deep_merge (1.2.1)
|
19
|
-
diff-lcs (1.4.4)
|
20
|
-
equatable (0.6.1)
|
21
|
-
method_source (1.0.0)
|
22
|
-
necromancer (0.6.0)
|
23
|
-
pastel (0.7.4)
|
24
|
-
equatable (~> 0.6)
|
25
|
-
tty-color (~> 0.5)
|
26
|
-
pry (0.13.1)
|
27
|
-
coderay (~> 1.1)
|
28
|
-
method_source (~> 1.0)
|
29
|
-
pry-byebug (3.9.0)
|
30
|
-
byebug (~> 11.0)
|
31
|
-
pry (~> 0.13.0)
|
32
|
-
rake (13.0.1)
|
33
|
-
redcarpet (3.5.0)
|
34
|
-
refinements (7.7.0)
|
35
|
-
rspec (3.9.0)
|
36
|
-
rspec-core (~> 3.9.0)
|
37
|
-
rspec-expectations (~> 3.9.0)
|
38
|
-
rspec-mocks (~> 3.9.0)
|
39
|
-
rspec-core (3.9.2)
|
40
|
-
rspec-support (~> 3.9.3)
|
41
|
-
rspec-expectations (3.9.2)
|
42
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
43
|
-
rspec-support (~> 3.9.0)
|
44
|
-
rspec-mocks (3.9.1)
|
45
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
46
|
-
rspec-support (~> 3.9.0)
|
47
|
-
rspec-support (3.9.3)
|
48
|
-
runcom (6.2.0)
|
49
|
-
refinements (~> 7.4)
|
50
|
-
xdg (~> 4.0)
|
51
|
-
sequel (5.36.0)
|
52
|
-
sqlite3 (1.4.2)
|
53
|
-
strings (0.1.8)
|
54
|
-
strings-ansi (~> 0.1)
|
55
|
-
unicode-display_width (~> 1.5)
|
56
|
-
unicode_utils (~> 1.4)
|
57
|
-
strings-ansi (0.1.0)
|
58
|
-
thor (0.20.3)
|
59
|
-
tty-color (0.5.2)
|
60
|
-
tty-cursor (0.7.1)
|
61
|
-
tty-progressbar (0.17.0)
|
62
|
-
strings-ansi (~> 0.1.0)
|
63
|
-
tty-cursor (~> 0.7)
|
64
|
-
tty-screen (~> 0.7)
|
65
|
-
unicode-display_width (~> 1.6)
|
66
|
-
tty-screen (0.8.1)
|
67
|
-
tty-table (0.11.0)
|
68
|
-
equatable (~> 0.6)
|
69
|
-
necromancer (~> 0.5)
|
70
|
-
pastel (~> 0.7.2)
|
71
|
-
strings (~> 0.1.5)
|
72
|
-
tty-screen (~> 0.7)
|
73
|
-
unicode-display_width (1.7.0)
|
74
|
-
unicode_utils (1.4.0)
|
75
|
-
xdg (4.2.0)
|
76
|
-
|
77
|
-
PLATFORMS
|
78
|
-
ruby
|
79
|
-
|
80
|
-
DEPENDENCIES
|
81
|
-
bundler (~> 2.1)
|
82
|
-
chronicle-etl!
|
83
|
-
pry-byebug (~> 3.9)
|
84
|
-
rake (~> 13.0)
|
85
|
-
redcarpet (~> 3.5)
|
86
|
-
rspec (~> 3.9)
|
87
|
-
runcom (~> 6.2)
|
88
|
-
sqlite3 (~> 1.4)
|
89
|
-
|
90
|
-
BUNDLED WITH
|
91
|
-
2.1.4
|
@@ -1,108 +0,0 @@
|
|
1
|
-
module Chronicle
|
2
|
-
module ETL
|
3
|
-
# Utility methods to catalogue which Extractor, Transformer, and
|
4
|
-
# Loader connector classes are available to chronicle-etl
|
5
|
-
module Catalog
|
6
|
-
PHASES = [:extractor, :transformer, :loader]
|
7
|
-
PLUGINS = ['email', 'bash']
|
8
|
-
BUILTIN = {
|
9
|
-
extractor: ['stdin', 'json', 'csv', 'file'],
|
10
|
-
transformer: ['null'],
|
11
|
-
loader: ['stdout', 'csv', 'table', 'rest']
|
12
|
-
}.freeze
|
13
|
-
|
14
|
-
# Return which ETL connectors are available, both built in and externally-defined
|
15
|
-
def self.available_classes
|
16
|
-
# TODO: have a registry of plugins
|
17
|
-
|
18
|
-
# Attempt to load each chronicle plugin that we might know about so
|
19
|
-
# that we can later search for subclasses to build our list of
|
20
|
-
# available classes
|
21
|
-
PLUGINS.each do |plugin|
|
22
|
-
require "chronicle/#{plugin}"
|
23
|
-
rescue LoadError
|
24
|
-
# this will happen if the gem isn't available globally
|
25
|
-
end
|
26
|
-
|
27
|
-
parent_klasses = [
|
28
|
-
::Chronicle::ETL::Extractor,
|
29
|
-
::Chronicle::ETL::Transformer,
|
30
|
-
::Chronicle::ETL::Loader
|
31
|
-
]
|
32
|
-
klasses = []
|
33
|
-
parent_klasses.map do |parent|
|
34
|
-
klasses += ::ObjectSpace.each_object(::Class).select { |klass| klass < parent }
|
35
|
-
end
|
36
|
-
|
37
|
-
klasses.map do |klass|
|
38
|
-
{
|
39
|
-
name: klass.name,
|
40
|
-
built_in: klass.built_in?,
|
41
|
-
provider: klass.provider,
|
42
|
-
phase: klass.phase
|
43
|
-
}
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
# Take a phase (e, t, or l) and an identifier and return the right class
|
48
|
-
def self.phase_and_identifier_to_klass(phase, identifier)
|
49
|
-
Chronicle::ETL::Catalog.identifier_to_klass(phase: phase, identifier: identifier)
|
50
|
-
end
|
51
|
-
|
52
|
-
# For a given connector identifier, return the class (either builtin, or from a
|
53
|
-
# external chronicle gem)
|
54
|
-
def self.identifier_to_klass(identifier:, phase:)
|
55
|
-
if BUILTIN[phase].include? identifier
|
56
|
-
load_builtin_klass(name: identifier, phase: phase)
|
57
|
-
else
|
58
|
-
provider, name = identifier.split(':')
|
59
|
-
name ||= ''
|
60
|
-
load_provider_klass(provider: provider, name: name, phase: phase)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
# Returns whether a class is an Extractor, Transformer, or Loader
|
65
|
-
def phase
|
66
|
-
ancestors = self.ancestors
|
67
|
-
return :extractor if ancestors.include? Chronicle::ETL::Extractor
|
68
|
-
return :transformer if ancestors.include? Chronicle::ETL::Transformer
|
69
|
-
return :loader if ancestors.include? Chronicle::ETL::Loader
|
70
|
-
end
|
71
|
-
|
72
|
-
# Returns which third-party provider this connector is associated wtih
|
73
|
-
def provider
|
74
|
-
# TODO: needs better convention for a gem reporting its provider name
|
75
|
-
provider = to_s.split('::')[1].downcase
|
76
|
-
provider == 'etl' ? 'chronicle' : provider
|
77
|
-
end
|
78
|
-
|
79
|
-
# Returns whether this connector is a built-in one
|
80
|
-
def built_in?
|
81
|
-
to_s.include? 'Chronicle::ETL'
|
82
|
-
end
|
83
|
-
|
84
|
-
private
|
85
|
-
|
86
|
-
def self.load_builtin_klass(name:, phase:)
|
87
|
-
klass_str = "Chronicle::ETL::#{name.capitalize}#{phase.capitalize}"
|
88
|
-
begin
|
89
|
-
Object.const_get(klass_str)
|
90
|
-
rescue NameError => e
|
91
|
-
raise ConnectorNotAvailableError.new("Connector not found", name: name)
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
def self.load_provider_klass(name: '', phase:, provider:)
|
96
|
-
begin
|
97
|
-
require "chronicle/#{provider}"
|
98
|
-
klass_str = "Chronicle::#{provider.capitalize}::#{name.capitalize}#{phase.capitalize}"
|
99
|
-
Object.const_get(klass_str)
|
100
|
-
rescue LoadError => e
|
101
|
-
raise ProviderNotAvailableError.new("Provider '#{provider.capitalize}' could not be loaded", provider: provider)
|
102
|
-
rescue NameError => e
|
103
|
-
raise ProviderConnectorNotAvailableError.new("Connector '#{name}' in '#{provider}' could not be found", provider: provider, name: name)
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
module Chronicle
|
2
|
-
module ETL
|
3
|
-
module Utils
|
4
|
-
module JSONAPI
|
5
|
-
# For a given Chronicle::ETL::Model, serialize it as jsonapi
|
6
|
-
def self.serialize(record)
|
7
|
-
return unless record.is_a? Chronicle::ETL::Models::Base
|
8
|
-
|
9
|
-
obj = record.identifier_hash
|
10
|
-
obj[:attributes] = record.attributes
|
11
|
-
|
12
|
-
relationships = Hash[record.associations.map do |k, v|
|
13
|
-
if v.is_a?(Array)
|
14
|
-
data = { data: v.map{ |association| serialize(association) } }
|
15
|
-
else
|
16
|
-
data = { data: serialize(v) }
|
17
|
-
end
|
18
|
-
|
19
|
-
[k, data]
|
20
|
-
end]
|
21
|
-
|
22
|
-
obj[:relationships] = relationships if relationships.any?
|
23
|
-
obj
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|