chronicle-etl 0.2.2 → 0.3.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/.gitignore +3 -0
- data/.rubocop.yml +3 -0
- data/README.md +22 -15
- data/chronicle-etl.gemspec +13 -7
- data/lib/chronicle/etl/cli/connectors.rb +19 -7
- data/lib/chronicle/etl/cli/jobs.rb +38 -26
- data/lib/chronicle/etl/cli/main.rb +10 -2
- data/lib/chronicle/etl/config.rb +24 -3
- data/lib/chronicle/etl/exceptions.rb +13 -0
- data/lib/chronicle/etl/extraction.rb +12 -0
- data/lib/chronicle/etl/extractors/csv_extractor.rb +43 -37
- data/lib/chronicle/etl/extractors/extractor.rb +25 -4
- data/lib/chronicle/etl/extractors/file_extractor.rb +15 -33
- data/lib/chronicle/etl/extractors/helpers/filesystem_reader.rb +104 -0
- data/lib/chronicle/etl/extractors/json_extractor.rb +45 -0
- data/lib/chronicle/etl/extractors/stdin_extractor.rb +6 -1
- data/lib/chronicle/etl/job.rb +72 -0
- data/lib/chronicle/etl/job_definition.rb +89 -0
- data/lib/chronicle/etl/job_log.rb +95 -0
- data/lib/chronicle/etl/job_logger.rb +81 -0
- data/lib/chronicle/etl/loaders/csv_loader.rb +6 -6
- data/lib/chronicle/etl/loaders/loader.rb +2 -2
- data/lib/chronicle/etl/loaders/rest_loader.rb +16 -9
- data/lib/chronicle/etl/loaders/stdout_loader.rb +8 -3
- data/lib/chronicle/etl/loaders/table_loader.rb +58 -7
- data/lib/chronicle/etl/logger.rb +48 -0
- data/lib/chronicle/etl/models/activity.rb +15 -0
- data/lib/chronicle/etl/models/attachment.rb +14 -0
- data/lib/chronicle/etl/models/base.rb +119 -0
- data/lib/chronicle/etl/models/entity.rb +21 -0
- data/lib/chronicle/etl/models/generic.rb +23 -0
- data/lib/chronicle/etl/registry/connector_registration.rb +61 -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 +66 -24
- 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 +253 -0
- data/lib/chronicle/etl/transformers/null_transformer.rb +11 -3
- data/lib/chronicle/etl/transformers/transformer.rb +42 -13
- data/lib/chronicle/etl/utils/binary_attachments.rb +21 -0
- data/lib/chronicle/etl/utils/hash_utilities.rb +19 -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 +16 -1
- metadata +139 -36
- data/CHANGELOG.md +0 -23
- data/Gemfile.lock +0 -85
- data/lib/chronicle/etl/catalog.rb +0 -102
- data/lib/chronicle/etl/transformers/json_transformer.rb +0 -11
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.3.1
|
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-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: chronic_duration
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
16
30
|
requirements:
|
17
31
|
- - "~>"
|
18
32
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
33
|
+
version: 0.10.6
|
20
34
|
type: :runtime
|
21
35
|
prerelease: false
|
22
36
|
version_requirements: !ruby/object:Gem::Requirement
|
23
37
|
requirements:
|
24
38
|
- - "~>"
|
25
39
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
40
|
+
version: 0.10.6
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: colorize
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -39,75 +53,145 @@ 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'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
84
|
+
name: nokogiri
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
87
|
- - "~>"
|
74
88
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
76
|
-
type: :
|
89
|
+
version: '1.13'
|
90
|
+
type: :runtime
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
94
|
- - "~>"
|
81
95
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
96
|
+
version: '1.13'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
98
|
+
name: runcom
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
101
|
- - "~>"
|
88
102
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
90
|
-
type: :
|
103
|
+
version: '6.2'
|
104
|
+
type: :runtime
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
108
|
- - "~>"
|
95
109
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
110
|
+
version: '6.2'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
112
|
+
name: sequel
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
100
114
|
requirements:
|
101
115
|
- - "~>"
|
102
116
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
117
|
+
version: '5.35'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '5.35'
|
125
|
+
- !ruby/object:Gem::Dependency
|
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
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0.20'
|
146
|
+
type: :runtime
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0.20'
|
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'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: bundler
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - "~>"
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '2.1'
|
104
188
|
type: :development
|
105
189
|
prerelease: false
|
106
190
|
version_requirements: !ruby/object:Gem::Requirement
|
107
191
|
requirements:
|
108
192
|
- - "~>"
|
109
193
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
194
|
+
version: '2.1'
|
111
195
|
- !ruby/object:Gem::Dependency
|
112
196
|
name: pry-byebug
|
113
197
|
requirement: !ruby/object:Gem::Requirement
|
@@ -123,33 +207,33 @@ dependencies:
|
|
123
207
|
- !ruby/object:Gem::Version
|
124
208
|
version: '3.9'
|
125
209
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
210
|
+
name: rake
|
127
211
|
requirement: !ruby/object:Gem::Requirement
|
128
212
|
requirements:
|
129
213
|
- - "~>"
|
130
214
|
- !ruby/object:Gem::Version
|
131
|
-
version: '
|
215
|
+
version: '13.0'
|
132
216
|
type: :development
|
133
217
|
prerelease: false
|
134
218
|
version_requirements: !ruby/object:Gem::Requirement
|
135
219
|
requirements:
|
136
220
|
- - "~>"
|
137
221
|
- !ruby/object:Gem::Version
|
138
|
-
version: '
|
222
|
+
version: '13.0'
|
139
223
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
224
|
+
name: rspec
|
141
225
|
requirement: !ruby/object:Gem::Requirement
|
142
226
|
requirements:
|
143
227
|
- - "~>"
|
144
228
|
- !ruby/object:Gem::Version
|
145
|
-
version: '3.
|
229
|
+
version: '3.9'
|
146
230
|
type: :development
|
147
231
|
prerelease: false
|
148
232
|
version_requirements: !ruby/object:Gem::Requirement
|
149
233
|
requirements:
|
150
234
|
- - "~>"
|
151
235
|
- !ruby/object:Gem::Version
|
152
|
-
version: '3.
|
236
|
+
version: '3.9'
|
153
237
|
description: Chronicle-ETL allows you to extract personal data from a variety of services,
|
154
238
|
transformer it, and load it.
|
155
239
|
email:
|
@@ -165,10 +249,8 @@ files:
|
|
165
249
|
- ".ruby-version"
|
166
250
|
- ".travis.yml"
|
167
251
|
- ".yardopts"
|
168
|
-
- CHANGELOG.md
|
169
252
|
- CODE_OF_CONDUCT.md
|
170
253
|
- Gemfile
|
171
|
-
- Gemfile.lock
|
172
254
|
- LICENSE.txt
|
173
255
|
- README.md
|
174
256
|
- Rakefile
|
@@ -177,36 +259,57 @@ files:
|
|
177
259
|
- chronicle-etl.gemspec
|
178
260
|
- exe/chronicle-etl
|
179
261
|
- lib/chronicle/etl.rb
|
180
|
-
- lib/chronicle/etl/catalog.rb
|
181
262
|
- lib/chronicle/etl/cli/connectors.rb
|
182
263
|
- lib/chronicle/etl/cli/jobs.rb
|
183
264
|
- lib/chronicle/etl/cli/main.rb
|
184
265
|
- lib/chronicle/etl/cli/subcommand_base.rb
|
185
266
|
- lib/chronicle/etl/config.rb
|
186
267
|
- lib/chronicle/etl/exceptions.rb
|
268
|
+
- lib/chronicle/etl/extraction.rb
|
187
269
|
- lib/chronicle/etl/extractors/csv_extractor.rb
|
188
270
|
- lib/chronicle/etl/extractors/extractor.rb
|
189
271
|
- lib/chronicle/etl/extractors/file_extractor.rb
|
272
|
+
- lib/chronicle/etl/extractors/helpers/filesystem_reader.rb
|
273
|
+
- lib/chronicle/etl/extractors/json_extractor.rb
|
190
274
|
- lib/chronicle/etl/extractors/stdin_extractor.rb
|
275
|
+
- lib/chronicle/etl/job.rb
|
276
|
+
- lib/chronicle/etl/job_definition.rb
|
277
|
+
- lib/chronicle/etl/job_log.rb
|
278
|
+
- lib/chronicle/etl/job_logger.rb
|
191
279
|
- lib/chronicle/etl/loaders/csv_loader.rb
|
192
280
|
- lib/chronicle/etl/loaders/loader.rb
|
193
281
|
- lib/chronicle/etl/loaders/rest_loader.rb
|
194
282
|
- lib/chronicle/etl/loaders/stdout_loader.rb
|
195
283
|
- lib/chronicle/etl/loaders/table_loader.rb
|
284
|
+
- lib/chronicle/etl/logger.rb
|
285
|
+
- lib/chronicle/etl/models/activity.rb
|
286
|
+
- lib/chronicle/etl/models/attachment.rb
|
287
|
+
- lib/chronicle/etl/models/base.rb
|
288
|
+
- lib/chronicle/etl/models/entity.rb
|
289
|
+
- lib/chronicle/etl/models/generic.rb
|
290
|
+
- lib/chronicle/etl/registry/connector_registration.rb
|
291
|
+
- lib/chronicle/etl/registry/registry.rb
|
292
|
+
- lib/chronicle/etl/registry/self_registering.rb
|
196
293
|
- lib/chronicle/etl/runner.rb
|
197
|
-
- lib/chronicle/etl/
|
294
|
+
- lib/chronicle/etl/serializers/jsonapi_serializer.rb
|
295
|
+
- lib/chronicle/etl/serializers/serializer.rb
|
296
|
+
- lib/chronicle/etl/transformers/image_file_transformer.rb
|
198
297
|
- lib/chronicle/etl/transformers/null_transformer.rb
|
199
298
|
- lib/chronicle/etl/transformers/transformer.rb
|
299
|
+
- lib/chronicle/etl/utils/binary_attachments.rb
|
300
|
+
- lib/chronicle/etl/utils/hash_utilities.rb
|
200
301
|
- lib/chronicle/etl/utils/progress_bar.rb
|
302
|
+
- lib/chronicle/etl/utils/text_recognition.rb
|
201
303
|
- lib/chronicle/etl/version.rb
|
202
304
|
homepage: https://github.com/chronicle-app
|
203
305
|
licenses:
|
204
306
|
- MIT
|
205
307
|
metadata:
|
308
|
+
allowed_push_host: https://rubygems.org
|
206
309
|
homepage_uri: https://github.com/chronicle-app
|
207
310
|
source_code_uri: https://github.com/chronicle-app/chronicle-etl
|
208
|
-
changelog_uri: https://github.com/chronicle-app/chronicle-etl/
|
209
|
-
post_install_message:
|
311
|
+
changelog_uri: https://github.com/chronicle-app/chronicle-etl/releases
|
312
|
+
post_install_message:
|
210
313
|
rdoc_options: []
|
211
314
|
require_paths:
|
212
315
|
- lib
|
@@ -222,7 +325,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
222
325
|
version: '0'
|
223
326
|
requirements: []
|
224
327
|
rubygems_version: 3.1.2
|
225
|
-
signing_key:
|
328
|
+
signing_key:
|
226
329
|
specification_version: 4
|
227
330
|
summary: ETL tool for personal data
|
228
331
|
test_files: []
|
data/CHANGELOG.md
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
# Changelog
|
2
|
-
|
3
|
-
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
4
|
-
|
5
|
-
## [0.1.4] - 2020-08-18
|
6
|
-
### Updated
|
7
|
-
- Better display of available ETL classes
|
8
|
-
- Updated documentation
|
9
|
-
|
10
|
-
## [0.1.3] - 2020-08-13
|
11
|
-
### Added
|
12
|
-
- Ability to list all available ETL classes
|
13
|
-
- Refactored E, T, L module and class structure
|
14
|
-
- Better progress bar
|
15
|
-
|
16
|
-
## [0.1.2] - 2020-08-02
|
17
|
-
### Added
|
18
|
-
- This changelog
|
19
|
-
- Ability to use extractors, transformers, and loaders from other gems
|
20
|
-
|
21
|
-
## [0.1.0] - 2020-08-01
|
22
|
-
### Added
|
23
|
-
- Basic job runner and ETL classes
|
data/Gemfile.lock
DELETED
@@ -1,85 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
chronicle-etl (0.2.2)
|
5
|
-
colorize (~> 0.8.1)
|
6
|
-
thor (~> 0.20)
|
7
|
-
tty-progressbar (~> 0.17)
|
8
|
-
tty-table (~> 0.11)
|
9
|
-
|
10
|
-
GEM
|
11
|
-
remote: https://rubygems.org/
|
12
|
-
specs:
|
13
|
-
byebug (11.1.3)
|
14
|
-
coderay (1.1.3)
|
15
|
-
colorize (0.8.1)
|
16
|
-
diff-lcs (1.4.4)
|
17
|
-
equatable (0.6.1)
|
18
|
-
method_source (1.0.0)
|
19
|
-
necromancer (0.6.0)
|
20
|
-
pastel (0.7.4)
|
21
|
-
equatable (~> 0.6)
|
22
|
-
tty-color (~> 0.5)
|
23
|
-
pry (0.13.1)
|
24
|
-
coderay (~> 1.1)
|
25
|
-
method_source (~> 1.0)
|
26
|
-
pry-byebug (3.9.0)
|
27
|
-
byebug (~> 11.0)
|
28
|
-
pry (~> 0.13.0)
|
29
|
-
rake (13.0.1)
|
30
|
-
redcarpet (3.5.0)
|
31
|
-
refinements (7.7.0)
|
32
|
-
rspec (3.9.0)
|
33
|
-
rspec-core (~> 3.9.0)
|
34
|
-
rspec-expectations (~> 3.9.0)
|
35
|
-
rspec-mocks (~> 3.9.0)
|
36
|
-
rspec-core (3.9.2)
|
37
|
-
rspec-support (~> 3.9.3)
|
38
|
-
rspec-expectations (3.9.2)
|
39
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
40
|
-
rspec-support (~> 3.9.0)
|
41
|
-
rspec-mocks (3.9.1)
|
42
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
43
|
-
rspec-support (~> 3.9.0)
|
44
|
-
rspec-support (3.9.3)
|
45
|
-
runcom (6.2.0)
|
46
|
-
refinements (~> 7.4)
|
47
|
-
xdg (~> 4.0)
|
48
|
-
strings (0.1.8)
|
49
|
-
strings-ansi (~> 0.1)
|
50
|
-
unicode-display_width (~> 1.5)
|
51
|
-
unicode_utils (~> 1.4)
|
52
|
-
strings-ansi (0.1.0)
|
53
|
-
thor (0.20.3)
|
54
|
-
tty-color (0.5.2)
|
55
|
-
tty-cursor (0.7.1)
|
56
|
-
tty-progressbar (0.17.0)
|
57
|
-
strings-ansi (~> 0.1.0)
|
58
|
-
tty-cursor (~> 0.7)
|
59
|
-
tty-screen (~> 0.7)
|
60
|
-
unicode-display_width (~> 1.6)
|
61
|
-
tty-screen (0.8.1)
|
62
|
-
tty-table (0.11.0)
|
63
|
-
equatable (~> 0.6)
|
64
|
-
necromancer (~> 0.5)
|
65
|
-
pastel (~> 0.7.2)
|
66
|
-
strings (~> 0.1.5)
|
67
|
-
tty-screen (~> 0.7)
|
68
|
-
unicode-display_width (1.7.0)
|
69
|
-
unicode_utils (1.4.0)
|
70
|
-
xdg (4.2.0)
|
71
|
-
|
72
|
-
PLATFORMS
|
73
|
-
ruby
|
74
|
-
|
75
|
-
DEPENDENCIES
|
76
|
-
bundler (~> 2.1)
|
77
|
-
chronicle-etl!
|
78
|
-
pry-byebug (~> 3.9)
|
79
|
-
rake (~> 13.0)
|
80
|
-
redcarpet (~> 3.5)
|
81
|
-
rspec (~> 3.9)
|
82
|
-
runcom (~> 6.2)
|
83
|
-
|
84
|
-
BUNDLED WITH
|
85
|
-
2.1.4
|
@@ -1,102 +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
|
-
PLUGINS = ['email', 'bash']
|
7
|
-
BUILTIN = {
|
8
|
-
extractor: ['stdin', 'json', 'csv', 'file'],
|
9
|
-
transformer: ['null'],
|
10
|
-
loader: ['stdout', 'csv', 'table', 'rest']
|
11
|
-
}.freeze
|
12
|
-
|
13
|
-
# Return which ETL connectors are available, both built in and externally-defined
|
14
|
-
def self.available_classes
|
15
|
-
# TODO: have a registry of plugins
|
16
|
-
|
17
|
-
# Attempt to load each chronicle plugin that we might know about so
|
18
|
-
# that we can later search for subclasses to build our list of
|
19
|
-
# available classes
|
20
|
-
PLUGINS.each do |plugin|
|
21
|
-
require "chronicle/#{plugin}"
|
22
|
-
rescue LoadError
|
23
|
-
# this will happen if the gem isn't available globally
|
24
|
-
end
|
25
|
-
|
26
|
-
parent_klasses = [
|
27
|
-
::Chronicle::ETL::Extractor,
|
28
|
-
::Chronicle::ETL::Transformer,
|
29
|
-
::Chronicle::ETL::Loader
|
30
|
-
]
|
31
|
-
klasses = []
|
32
|
-
parent_klasses.map do |parent|
|
33
|
-
klasses += ::ObjectSpace.each_object(::Class).select { |klass| klass < parent }
|
34
|
-
end
|
35
|
-
|
36
|
-
klasses.map do |klass|
|
37
|
-
{
|
38
|
-
name: klass.name,
|
39
|
-
built_in: klass.built_in?,
|
40
|
-
provider: klass.provider,
|
41
|
-
phase: klass.phase
|
42
|
-
}
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
# For a given connector identifier, return the class (either builtin, or from a
|
47
|
-
# external chronicle gem)
|
48
|
-
def self.identifier_to_klass(identifier:, phase:)
|
49
|
-
if BUILTIN[phase].include? identifier
|
50
|
-
load_builtin_klass(name: identifier, phase: phase)
|
51
|
-
else
|
52
|
-
provider, name = identifier.split(':')
|
53
|
-
name ||= ''
|
54
|
-
load_provider_klass(provider: provider, name: name, phase: phase)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
# Returns whether a class is an Extractor, Transformer, or Loader
|
59
|
-
def phase
|
60
|
-
ancestors = self.ancestors
|
61
|
-
return :extractor if ancestors.include? Chronicle::ETL::Extractor
|
62
|
-
return :transformer if ancestors.include? Chronicle::ETL::Transformer
|
63
|
-
return :loader if ancestors.include? Chronicle::ETL::Loader
|
64
|
-
end
|
65
|
-
|
66
|
-
# Returns which third-party provider this connector is associated wtih
|
67
|
-
def provider
|
68
|
-
# TODO: needs better convention for a gem reporting its provider name
|
69
|
-
provider = to_s.split('::')[1].downcase
|
70
|
-
provider == 'etl' ? 'chronicle' : provider
|
71
|
-
end
|
72
|
-
|
73
|
-
# Returns whether this connector is a built-in one
|
74
|
-
def built_in?
|
75
|
-
to_s.include? 'Chronicle::ETL'
|
76
|
-
end
|
77
|
-
|
78
|
-
private
|
79
|
-
|
80
|
-
def self.load_builtin_klass(name:, phase:)
|
81
|
-
klass_str = "Chronicle::ETL::#{name.capitalize}#{phase.capitalize}"
|
82
|
-
begin
|
83
|
-
Object.const_get(klass_str)
|
84
|
-
rescue NameError => e
|
85
|
-
raise ConnectorNotAvailableError.new("Connector not found", name: name)
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
def self.load_provider_klass(name: '', phase:, provider:)
|
90
|
-
begin
|
91
|
-
require "chronicle/#{provider}"
|
92
|
-
klass_str = "Chronicle::#{provider.capitalize}::#{name.capitalize}#{phase.capitalize}"
|
93
|
-
Object.const_get(klass_str)
|
94
|
-
rescue LoadError => e
|
95
|
-
raise ProviderNotAvailableError.new("Provider '#{provider.capitalize}' could not be loaded", provider: provider)
|
96
|
-
rescue NameError => e
|
97
|
-
raise ProviderConnectorNotAvailableError.new("Connector '#{name}' in '#{provider}' could not be found", provider: provider, name: name)
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|