kiba-common 0.9.0 → 1.0.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/.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
|