kiba-common 0.9.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +13 -9
- data/Changes.md +6 -0
- data/README.md +32 -0
- data/kiba-common.gemspec +5 -1
- data/lib/kiba-common/destinations/lambda.rb +23 -0
- data/lib/kiba-common/version.rb +1 -1
- data/test/test_integration.rb +1 -1
- data/test/test_lambda_destination.rb +22 -0
- metadata +11 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f653d17ff9010ff236b2b77be61db1f3e42f6e2dd4708d39d20eb20e042b9c41
|
4
|
+
data.tar.gz: d441ae590b81d1a3eaa713517263d45c50da5d3cf402621774ee8488adcde5b3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f96da2fed54240556aafcb2877c8fd1a23c8c062c92d06cfc4ce4219d64f4131955775e64bd1c98985aca39d92b035645d8139edfead76603ea60daeff516836
|
7
|
+
data.tar.gz: 1fd250ae471dc68cc2d8322434d4d6f75ee661791f1e552604651d808b817b0874ffa788b0c8e70508f61ea90b49626ebe240db6807ac1f4961bf57e95a95719
|
data/.travis.yml
CHANGED
@@ -1,11 +1,15 @@
|
|
1
1
|
language: ruby
|
2
|
-
before_install:
|
3
|
-
# https://stackoverflow.com/a/47972768
|
4
|
-
- gem update --system
|
5
|
-
- gem update bundler
|
6
2
|
rvm:
|
7
|
-
|
8
|
-
-
|
9
|
-
-
|
10
|
-
- 2.
|
11
|
-
-
|
3
|
+
# see https://www.ruby-lang.org/en/downloads/branches/
|
4
|
+
# NOTE: temporarily disabled due to failures to be investigated - see #26
|
5
|
+
# - ruby-head
|
6
|
+
- 2.7
|
7
|
+
- 2.6
|
8
|
+
- 2.5
|
9
|
+
- 2.4
|
10
|
+
# NOTE: EOL since 2019-03-31
|
11
|
+
- 2.3
|
12
|
+
# see https://www.jruby.org/download
|
13
|
+
- jruby-9.1
|
14
|
+
- jruby-9.2
|
15
|
+
- truffleruby
|
data/Changes.md
CHANGED
data/README.md
CHANGED
@@ -148,6 +148,14 @@ source Kiba::Common::Sources::CSV, filename: 'input.csv',
|
|
148
148
|
csv_options: { headers: true, header_converters: :symbol }
|
149
149
|
```
|
150
150
|
|
151
|
+
Note that the emitted rows are instances of [`CSV::Row`](http://ruby-doc.org/stdlib-2.5.3/libdoc/csv/rdoc/CSV/Row.html), part `Array` and part `Hash`, which retain order of fields and allow duplicates (unlike a regular `Hash`).
|
152
|
+
|
153
|
+
If the rest of your pipeline expects `Hash` rows (like for instance `Kiba::Common::Destinations::CSV`), you'll want to transform the rows to `Hash` instances yourself using [`to_hash`](http://ruby-doc.org/stdlib-2.5.3/libdoc/csv/rdoc/CSV/Row.html#method-i-to_hash). This will "collapse the row into a simple Hash. Be warned that this discards field order and clobbers duplicate fields."
|
154
|
+
|
155
|
+
```ruby
|
156
|
+
transform { |r| r.to_hash }
|
157
|
+
```
|
158
|
+
|
151
159
|
#### Handling multiple input CSV files
|
152
160
|
|
153
161
|
You can process multiple files by chaining the various components available in Kiba Common (see `test/test_integration#test_multiple_csv_inputs` for an actual demo):
|
@@ -217,6 +225,30 @@ destination Kiba::Common::Destinations::CSV,
|
|
217
225
|
headers: [:field, :other_field]
|
218
226
|
```
|
219
227
|
|
228
|
+
### Kiba::Common::Destinations::Lambda
|
229
|
+
|
230
|
+
At times, it can be convenient to use a block form for a destination (pretty much like Kiba's built-in "block transform"), especially for one-off scripts.
|
231
|
+
|
232
|
+
The Lambda destination is there for that purpose.
|
233
|
+
|
234
|
+
Example use:
|
235
|
+
|
236
|
+
```ruby
|
237
|
+
require 'kiba-common/destinations/lambda'
|
238
|
+
|
239
|
+
destination Kiba::Common::Destinations::Lambda,
|
240
|
+
# called at destination instantiation time (once)
|
241
|
+
on_init: -> { ... },
|
242
|
+
# called for each row
|
243
|
+
on_write: -> (row) { ... },
|
244
|
+
# called after all the rows have been written
|
245
|
+
on_close: -> { ... }
|
246
|
+
```
|
247
|
+
|
248
|
+
Each "callback" (e.g. `on_init`) is optional.
|
249
|
+
|
250
|
+
The callback code can refer to scope variables or instance variables you may have declared above.
|
251
|
+
|
220
252
|
### Kiba::Common::DSLExtensions::Logger
|
221
253
|
|
222
254
|
A simple logging facility.
|
data/kiba-common.gemspec
CHANGED
@@ -12,8 +12,12 @@ Gem::Specification.new do |gem|
|
|
12
12
|
gem.name = 'kiba-common'
|
13
13
|
gem.require_paths = ['lib']
|
14
14
|
gem.version = Kiba::Common::VERSION
|
15
|
+
gem.metadata = {
|
16
|
+
'source_code_uri' => 'https://github.com/thbar/kiba-common',
|
17
|
+
'documentation_uri' => 'https://github.com/thbar/kiba-common/blob/master/README.md',
|
18
|
+
}
|
15
19
|
|
16
|
-
gem.add_dependency 'kiba', '>= 1.0.0', '<
|
20
|
+
gem.add_dependency 'kiba', '>= 1.0.0', '< 4'
|
17
21
|
gem.add_development_dependency 'rake'
|
18
22
|
gem.add_development_dependency 'minitest'
|
19
23
|
gem.add_development_dependency 'awesome_print'
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Kiba
|
2
|
+
module Common
|
3
|
+
module Destinations
|
4
|
+
class Lambda
|
5
|
+
attr_reader :on_write, :on_close
|
6
|
+
|
7
|
+
def initialize(on_init: nil, on_write: nil, on_close: nil)
|
8
|
+
@on_write = on_write
|
9
|
+
@on_close = on_close
|
10
|
+
on_init&.call
|
11
|
+
end
|
12
|
+
|
13
|
+
def write(row)
|
14
|
+
on_write&.call(row)
|
15
|
+
end
|
16
|
+
|
17
|
+
def close
|
18
|
+
on_close&.call
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/kiba-common/version.rb
CHANGED
data/test/test_integration.rb
CHANGED
@@ -25,7 +25,7 @@ class TestIntegration < Minitest::Test
|
|
25
25
|
config :kiba, runner: Kiba::StreamingRunner
|
26
26
|
|
27
27
|
# create one row per input file
|
28
|
-
source Kiba::Common::Sources::Enumerable, -> { Dir[File.join(dir, '*.csv')] }
|
28
|
+
source Kiba::Common::Sources::Enumerable, -> { Dir[File.join(dir, '*.csv')].sort }
|
29
29
|
|
30
30
|
# out of that row, create configuration for a CSV source
|
31
31
|
transform do |r|
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
require 'kiba'
|
3
|
+
require 'kiba-common/destinations/lambda'
|
4
|
+
|
5
|
+
class TestLambdaDestination < MiniTest::Test
|
6
|
+
def test_lambda
|
7
|
+
accumulator = []
|
8
|
+
on_init_called = false
|
9
|
+
on_close_called = false
|
10
|
+
job = Kiba.parse do
|
11
|
+
source Kiba::Common::Sources::Enumerable, ['one', 'two']
|
12
|
+
destination Kiba::Common::Destinations::Lambda,
|
13
|
+
on_init: -> { on_init_called = true },
|
14
|
+
on_write: -> (r) { accumulator << r },
|
15
|
+
on_close: -> { on_close_called = true }
|
16
|
+
end
|
17
|
+
Kiba.run(job)
|
18
|
+
assert_equal ['one', 'two'], accumulator
|
19
|
+
assert_equal true, on_init_called
|
20
|
+
assert_equal true, on_close_called
|
21
|
+
end
|
22
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kiba-common
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thibaut Barrère
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-01-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: kiba
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
version: 1.0.0
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '
|
22
|
+
version: '4'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -29,7 +29,7 @@ dependencies:
|
|
29
29
|
version: 1.0.0
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
32
|
+
version: '4'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: rake
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -102,6 +102,7 @@ files:
|
|
102
102
|
- Rakefile
|
103
103
|
- kiba-common.gemspec
|
104
104
|
- lib/kiba-common/destinations/csv.rb
|
105
|
+
- lib/kiba-common/destinations/lambda.rb
|
105
106
|
- lib/kiba-common/dsl_extensions/logger.rb
|
106
107
|
- lib/kiba-common/dsl_extensions/show_me.rb
|
107
108
|
- lib/kiba-common/sources/csv.rb
|
@@ -117,13 +118,16 @@ files:
|
|
117
118
|
- test/test_enumerable_exploder_transform.rb
|
118
119
|
- test/test_enumerable_source.rb
|
119
120
|
- test/test_integration.rb
|
121
|
+
- test/test_lambda_destination.rb
|
120
122
|
- test/test_logger.rb
|
121
123
|
- test/test_show_me.rb
|
122
124
|
- test/test_source_transform_adapter.rb
|
123
125
|
homepage: https://github.com/thbar/kiba-common
|
124
126
|
licenses:
|
125
127
|
- LGPL-3.0
|
126
|
-
metadata:
|
128
|
+
metadata:
|
129
|
+
source_code_uri: https://github.com/thbar/kiba-common
|
130
|
+
documentation_uri: https://github.com/thbar/kiba-common/blob/master/README.md
|
127
131
|
post_install_message:
|
128
132
|
rdoc_options: []
|
129
133
|
require_paths:
|
@@ -139,8 +143,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
139
143
|
- !ruby/object:Gem::Version
|
140
144
|
version: '0'
|
141
145
|
requirements: []
|
142
|
-
|
143
|
-
rubygems_version: 2.7.6
|
146
|
+
rubygems_version: 3.0.3
|
144
147
|
signing_key:
|
145
148
|
specification_version: 4
|
146
149
|
summary: Commonly used helpers for Kiba ETL
|
@@ -153,6 +156,7 @@ test_files:
|
|
153
156
|
- test/test_enumerable_exploder_transform.rb
|
154
157
|
- test/test_enumerable_source.rb
|
155
158
|
- test/test_integration.rb
|
159
|
+
- test/test_lambda_destination.rb
|
156
160
|
- test/test_logger.rb
|
157
161
|
- test/test_show_me.rb
|
158
162
|
- test/test_source_transform_adapter.rb
|