burner 1.10.0 → 1.11.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b775833cacea64e30e78943c176e3317e3f72510cb3653066a3ce16c70dc1f3d
4
- data.tar.gz: 51da8ebaac4ea928c441898e9c7b46052efa9e5c95f454e6933e8a036093709b
3
+ metadata.gz: f687d9818e7a090c0999f144096eef52c5ba7093a069a8d2ef784f5abdb859d7
4
+ data.tar.gz: cae3bb23c2671ab69263fe7359c93a47777c72fc387ab93a03006c38a2bc83cd
5
5
  SHA512:
6
- metadata.gz: 9276607a43419b630a7804ce5c83b53844dc0a42abddfd218e4a3f9d62aaaf608c24d821a980f3c618d058de0fbb2fb3abb6b8d1195f165d5f773121727ca1b1
7
- data.tar.gz: 3c6ff8a7428940aaff2bb1a46f1bb7dfb4ac077e700ffbae7b006de8e0458c0d55ff719b846fd4daad6f5aa62f8b826c6abd96e185ba7d6dc6f4799b60d59291
6
+ metadata.gz: 3d1740b55ec51e3459092d99165f75197dcad75d2dcce28ae285ed9dc1e1fcbb2a85002f8abeb868e0bc388424e8e85056bab1b41a54046023d06fbd836f0598
7
+ data.tar.gz: bffbcf8567d03252bc04fb8e207674595b271635da2ef4cec963cd6ac329e4e58194167f0b474dc522785cbaef10a239b504e12825c56fb9d55042f4733b1840
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ # 1.11.0 (May 17th, 2021)
2
+
3
+ Added Jobs:
4
+
5
+ * b/collection/flat_file_parse
6
+
1
7
  # 1.10.0 (May 17th, 2021)
2
8
 
3
9
  Added Jobs:
data/README.md CHANGED
@@ -266,12 +266,13 @@ This library only ships with very basic, rudimentary jobs that are meant to just
266
266
  * **b/collection/arrays_to_objects** [mappings, register]: Convert an array of arrays to an array of objects.
267
267
  * **b/collection/coalesce** [grouped_register, insensitive, key_mappings, keys, register, separator]: Merge two datasets together based on the key values of one dataset (array) with a grouped dataset (hash). If insensitive (false by default) is true then each key's value will be converted/coerced to a lowercase string.
268
268
  * **b/collection/concatenate** [from_registers, to_register]: Concatenate each from_register's value and place the newly concatenated array into the to_register. Note: this does not do any deep copying and should be assumed it is shallow copying all objects.
269
+ * **b/collection/flat_file_parse** [keys_register, register, separator]: Map an array of arrays to an array of hashes. These keys can be realized at run-time as they are pulled from the first entry in the array. The `keys_register` will also be set to the keys used for mapping.
269
270
  * **b/collection/graph** [config, key, register]: Use [Hashematics](https://github.com/bluemarblepayroll/hashematics) to turn a flat array of objects into a deeply nested object tree.
270
271
  * **b/collection/group** [insensitive, keys, register, separator]: Take a register's value (an array of objects) and group the objects by the specified keys. If insensitive (false by default) is true then each key's value will be converted/coerced to a lowercase string.
271
272
  * **b/collection/nested_aggregate** [register, key_mappings, key, separator]: Traverse a set of objects, resolving key's value for each object, optionally copying down key_mappings to the child records, then merging all the inner records together.
272
273
  * **b/collection/number** [key, register, separator, start_at]: This job can iterate over a set of records and sequence them (set the specified key to a sequential index value.)
273
274
  * **b/collection/objects_to_arrays** [mappings, register]: Convert an array of objects to an array of arrays.
274
- * **b/collection/only_keys** [keys_register, register, separator]: Limit an array of objects' keys to a specified set of keys. These keys can be realized at run-time as they are pulled from another register (keys_register) thus making it dynamic.
275
+ * **b/collection/only_keys** [keys_register, register, separator]: Limit an array of objects' keys to a specified set of keys. These keys can be realized at run-time as they are pulled from another register (`keys_register`) thus making it dynamic.
275
276
  * **b/collection/pivot** [unique_keys, insensitive, other_keys, pivot_key, pivot_value_key, register, separator]:
276
277
  Take an array of objects and pivot a key into multiple keys. It essentially takes all the values for a key and creates N number of keys (one per value.) Under the hood it uses HashMath's [Record](https://github.com/bluemarblepayroll/hash_math#record-the-hash-prototype) and [Table](https://github.com/bluemarblepayroll/hash_math#table-the-double-hash-hash-of-hashes) classes.
277
278
  * **b/collection/shift** [amount, register]: Remove the first N number of elements from an array.
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # Copyright (c) 2020-present, Blue Marble Payroll, LLC
5
+ #
6
+ # This source code is licensed under the MIT license found in the
7
+ # LICENSE file in the root directory of this source tree.
8
+ #
9
+
10
+ require_relative 'job_with_register'
11
+
12
+ module Burner
13
+ # Add on a register attribute to the configuration for a job. This indicates that a job
14
+ # either accesses and/or mutates the payload's registers.
15
+ class JobWithDynamicKeys < JobWithRegister
16
+ attr_reader :keys_register,
17
+ :resolver
18
+
19
+ def initialize(
20
+ keys_register:,
21
+ name: '',
22
+ register: DEFAULT_REGISTER,
23
+ separator: BLANK
24
+ )
25
+ super(name: name, register: register)
26
+
27
+ @keys_register = keys_register.to_s
28
+ @resolver = Objectable.resolver(separator: separator)
29
+
30
+ freeze
31
+ end
32
+ end
33
+ end
@@ -13,6 +13,8 @@ module Burner
13
13
  # Add on a register attribute to the configuration for a job. This indicates that a job
14
14
  # either accesses and/or mutates the payload's registers.
15
15
  class JobWithRegister < Job
16
+ BLANK = ''
17
+
16
18
  attr_reader :register
17
19
 
18
20
  def initialize(name: '', register: DEFAULT_REGISTER)
data/lib/burner/jobs.rb CHANGED
@@ -25,8 +25,9 @@ module Burner
25
25
  register 'b/collection/arrays_to_objects', Library::Collection::ArraysToObjects
26
26
  register 'b/collection/coalesce', Library::Collection::Coalesce
27
27
  register 'b/collection/concatenate', Library::Collection::Concatenate
28
- register 'b/collection/graph', Library::Collection::Graph
29
28
  register 'b/collection/group', Library::Collection::Group
29
+ register 'b/collection/flat_file_parse', Library::Collection::FlatFileParse
30
+ register 'b/collection/graph', Library::Collection::Graph
30
31
  register 'b/collection/nested_aggregate', Library::Collection::NestedAggregate
31
32
  register 'b/collection/number', Library::Collection::Number
32
33
  register 'b/collection/objects_to_arrays', Library::Collection::ObjectsToArrays
@@ -7,7 +7,7 @@
7
7
  # LICENSE file in the root directory of this source tree.
8
8
  #
9
9
 
10
- require_relative 'job_with_register'
10
+ require_relative 'job_with_dynamic_keys'
11
11
 
12
12
  require_relative 'library/echo'
13
13
  require_relative 'library/nothing'
@@ -16,6 +16,7 @@ require_relative 'library/sleep'
16
16
  require_relative 'library/collection/arrays_to_objects'
17
17
  require_relative 'library/collection/coalesce'
18
18
  require_relative 'library/collection/concatenate'
19
+ require_relative 'library/collection/flat_file_parse'
19
20
  require_relative 'library/collection/graph'
20
21
  require_relative 'library/collection/group'
21
22
  require_relative 'library/collection/nested_aggregate'
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # Copyright (c) 2020-present, Blue Marble Payroll, LLC
5
+ #
6
+ # This source code is licensed under the MIT license found in the
7
+ # LICENSE file in the root directory of this source tree.
8
+ #
9
+
10
+ module Burner
11
+ module Library
12
+ module Collection
13
+ # Convert an array of arrays to an array of objects. The difference between this
14
+ # job and ArraysToObjects is that this one does not take in mappings and instead
15
+ # will use the first entry as the array of keys to positionally map to.
16
+ #
17
+ # For example, if a register had this:
18
+ #
19
+ # [['id', 'first', 'last'], [1, 'frank', 'rizzo']]
20
+ #
21
+ # Then executing this job would result in this:
22
+ #
23
+ # [{ 'id' => 1, 'first' => frank, 'last' => rizzo }]
24
+ #
25
+ # As a side-effect, the keys_register would result in this:
26
+ #
27
+ # ['id', 'first', 'last']
28
+ #
29
+ # Expected Payload[register] input: array of arrays.
30
+ # Payload[register] output: An array of hashes.
31
+ class FlatFileParse < JobWithDynamicKeys
32
+ def perform(output, payload)
33
+ objects = array(payload[register])
34
+ keys = array(objects.shift)
35
+ count = objects.length
36
+
37
+ output.detail("Mapping #{count} array(s) to key(s): #{keys.join(', ')}")
38
+
39
+ payload[register] = objects.map { |object| transform(object, keys) }
40
+ payload[keys_register] = keys
41
+ end
42
+
43
+ private
44
+
45
+ def transform(object, keys)
46
+ object.each_with_object({}).with_index do |(value, memo), index|
47
+ next if index >= keys.length
48
+
49
+ key = keys[index]
50
+
51
+ resolver.set(memo, key, value)
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -16,26 +16,7 @@ module Burner
16
16
  #
17
17
  # Expected Payload[register] input: array of objects.
18
18
  # Payload[register] output: An array of objects.
19
- class OnlyKeys < JobWithRegister
20
- BLANK = ''
21
-
22
- attr_reader :keys_register,
23
- :resolver
24
-
25
- def initialize(
26
- keys_register:,
27
- name: '',
28
- register: DEFAULT_REGISTER,
29
- separator: BLANK
30
- )
31
- super(name: name, register: register)
32
-
33
- @keys_register = keys_register.to_s
34
- @resolver = Objectable.resolver(separator: separator)
35
-
36
- freeze
37
- end
38
-
19
+ class OnlyKeys < JobWithDynamicKeys
39
20
  def perform(output, payload)
40
21
  objects = array(payload[register])
41
22
  count = objects.length
@@ -21,8 +21,6 @@ module Burner
21
21
  # Expected Payload[register] input: array of objects.
22
22
  # Payload[register] output: An array of objects.
23
23
  class Transform < JobWithRegister
24
- BLANK = ''
25
-
26
24
  attr_reader :attribute_renderers,
27
25
  :exclusive,
28
26
  :resolver
@@ -12,8 +12,6 @@ module Burner
12
12
  module Param
13
13
  # Common logic shared across Param job subclasses.
14
14
  class Base < JobWithRegister
15
- BLANK = ''
16
-
17
15
  attr_reader :param_key
18
16
 
19
17
  def initialize(name: BLANK, param_key: BLANK, register: DEFAULT_REGISTER)
@@ -8,5 +8,5 @@
8
8
  #
9
9
 
10
10
  module Burner
11
- VERSION = '1.10.0'
11
+ VERSION = '1.11.0'
12
12
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: burner
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.10.0
4
+ version: 1.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Ruggio
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-05-17 00:00:00.000000000 Z
11
+ date: 2021-05-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: acts_as_hashable
@@ -240,12 +240,14 @@ files:
240
240
  - lib/burner/disks/local.rb
241
241
  - lib/burner/job.rb
242
242
  - lib/burner/job_set.rb
243
+ - lib/burner/job_with_dynamic_keys.rb
243
244
  - lib/burner/job_with_register.rb
244
245
  - lib/burner/jobs.rb
245
246
  - lib/burner/library.rb
246
247
  - lib/burner/library/collection/arrays_to_objects.rb
247
248
  - lib/burner/library/collection/coalesce.rb
248
249
  - lib/burner/library/collection/concatenate.rb
250
+ - lib/burner/library/collection/flat_file_parse.rb
249
251
  - lib/burner/library/collection/graph.rb
250
252
  - lib/burner/library/collection/group.rb
251
253
  - lib/burner/library/collection/nested_aggregate.rb