burner 1.0.0.pre.alpha.4 → 1.0.0.pre.alpha.9

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.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +2 -0
  3. data/README.md +52 -47
  4. data/burner.gemspec +1 -1
  5. data/exe/burner +2 -3
  6. data/lib/burner.rb +2 -0
  7. data/lib/burner/cli.rb +2 -0
  8. data/lib/burner/job.rb +27 -9
  9. data/lib/burner/job_with_register.rb +24 -0
  10. data/lib/burner/jobs.rb +28 -39
  11. data/lib/burner/library.rb +32 -0
  12. data/lib/burner/library/collection/arrays_to_objects.rb +75 -0
  13. data/lib/burner/{jobs → library}/collection/graph.rb +7 -8
  14. data/lib/burner/library/collection/objects_to_arrays.rb +88 -0
  15. data/lib/burner/{jobs → library}/collection/shift.rb +8 -9
  16. data/lib/burner/{jobs → library}/collection/transform.rb +17 -15
  17. data/lib/burner/{jobs → library}/collection/unpivot.rb +17 -9
  18. data/lib/burner/library/collection/validate.rb +89 -0
  19. data/lib/burner/library/collection/values.rb +49 -0
  20. data/lib/burner/{jobs → library}/deserialize/csv.rb +4 -5
  21. data/lib/burner/{jobs → library}/deserialize/json.rb +6 -5
  22. data/lib/burner/{jobs → library}/deserialize/yaml.rb +13 -7
  23. data/lib/burner/{jobs → library}/dummy.rb +4 -4
  24. data/lib/burner/{jobs → library}/echo.rb +3 -3
  25. data/lib/burner/{jobs → library}/io/base.rb +4 -4
  26. data/lib/burner/{jobs → library}/io/exist.rb +11 -9
  27. data/lib/burner/{jobs → library}/io/read.rb +7 -6
  28. data/lib/burner/{jobs → library}/io/write.rb +9 -6
  29. data/lib/burner/{jobs → library}/serialize/csv.rb +5 -6
  30. data/lib/burner/{jobs → library}/serialize/json.rb +6 -5
  31. data/lib/burner/{jobs → library}/serialize/yaml.rb +6 -5
  32. data/lib/burner/{jobs/set.rb → library/set_value.rb} +8 -7
  33. data/lib/burner/{jobs → library}/sleep.rb +3 -3
  34. data/lib/burner/modeling.rb +3 -0
  35. data/lib/burner/modeling/attribute.rb +29 -0
  36. data/lib/burner/modeling/attribute_renderer.rb +32 -0
  37. data/lib/burner/modeling/validations.rb +23 -0
  38. data/lib/burner/modeling/validations/base.rb +35 -0
  39. data/lib/burner/modeling/validations/blank.rb +31 -0
  40. data/lib/burner/modeling/validations/present.rb +31 -0
  41. data/lib/burner/payload.rb +52 -15
  42. data/lib/burner/pipeline.rb +23 -4
  43. data/lib/burner/side_effects.rb +10 -0
  44. data/lib/burner/side_effects/written_file.rb +28 -0
  45. data/lib/burner/step.rb +1 -5
  46. data/lib/burner/util.rb +11 -0
  47. data/lib/burner/util/arrayable.rb +30 -0
  48. data/lib/burner/util/string_template.rb +42 -0
  49. data/lib/burner/version.rb +1 -1
  50. metadata +40 -28
  51. data/lib/burner/jobs/collection/arrays_to_objects.rb +0 -43
  52. data/lib/burner/jobs/collection/objects_to_arrays.rb +0 -54
  53. data/lib/burner/jobs/collection/transform/attribute.rb +0 -33
  54. data/lib/burner/jobs/collection/transform/attribute_renderer.rb +0 -36
  55. data/lib/burner/string_template.rb +0 -40
  56. data/lib/burner/written_file.rb +0 -28
@@ -8,5 +8,5 @@
8
8
  #
9
9
 
10
10
  module Burner
11
- VERSION = '1.0.0-alpha.4'
11
+ VERSION = '1.0.0-alpha.9'
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.0.0.pre.alpha.4
4
+ version: 1.0.0.pre.alpha.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Ruggio
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-10-20 00:00:00.000000000 Z
11
+ date: 2020-10-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: acts_as_hashable
@@ -192,8 +192,9 @@ dependencies:
192
192
  - - "~>"
193
193
  - !ruby/object:Gem::Version
194
194
  version: 0.7.0
195
- description: " This library serves as the skeleton for a processing engine. It
196
- allows you to organize your code into Jobs, then stitch those jobs together as steps.\n"
195
+ description: " This library serves as the backbone for a configurable processing
196
+ engine. It allows you to organize your code into jobs, then stitch those jobs together
197
+ as steps.\n"
197
198
  email:
198
199
  - mruggio@bluemarblepayroll.com
199
200
  executables:
@@ -220,38 +221,49 @@ files:
220
221
  - lib/burner.rb
221
222
  - lib/burner/cli.rb
222
223
  - lib/burner/job.rb
224
+ - lib/burner/job_with_register.rb
223
225
  - lib/burner/jobs.rb
224
- - lib/burner/jobs/collection/arrays_to_objects.rb
225
- - lib/burner/jobs/collection/graph.rb
226
- - lib/burner/jobs/collection/objects_to_arrays.rb
227
- - lib/burner/jobs/collection/shift.rb
228
- - lib/burner/jobs/collection/transform.rb
229
- - lib/burner/jobs/collection/transform/attribute.rb
230
- - lib/burner/jobs/collection/transform/attribute_renderer.rb
231
- - lib/burner/jobs/collection/unpivot.rb
232
- - lib/burner/jobs/deserialize/csv.rb
233
- - lib/burner/jobs/deserialize/json.rb
234
- - lib/burner/jobs/deserialize/yaml.rb
235
- - lib/burner/jobs/dummy.rb
236
- - lib/burner/jobs/echo.rb
237
- - lib/burner/jobs/io/base.rb
238
- - lib/burner/jobs/io/exist.rb
239
- - lib/burner/jobs/io/read.rb
240
- - lib/burner/jobs/io/write.rb
241
- - lib/burner/jobs/serialize/csv.rb
242
- - lib/burner/jobs/serialize/json.rb
243
- - lib/burner/jobs/serialize/yaml.rb
244
- - lib/burner/jobs/set.rb
245
- - lib/burner/jobs/sleep.rb
226
+ - lib/burner/library.rb
227
+ - lib/burner/library/collection/arrays_to_objects.rb
228
+ - lib/burner/library/collection/graph.rb
229
+ - lib/burner/library/collection/objects_to_arrays.rb
230
+ - lib/burner/library/collection/shift.rb
231
+ - lib/burner/library/collection/transform.rb
232
+ - lib/burner/library/collection/unpivot.rb
233
+ - lib/burner/library/collection/validate.rb
234
+ - lib/burner/library/collection/values.rb
235
+ - lib/burner/library/deserialize/csv.rb
236
+ - lib/burner/library/deserialize/json.rb
237
+ - lib/burner/library/deserialize/yaml.rb
238
+ - lib/burner/library/dummy.rb
239
+ - lib/burner/library/echo.rb
240
+ - lib/burner/library/io/base.rb
241
+ - lib/burner/library/io/exist.rb
242
+ - lib/burner/library/io/read.rb
243
+ - lib/burner/library/io/write.rb
244
+ - lib/burner/library/serialize/csv.rb
245
+ - lib/burner/library/serialize/json.rb
246
+ - lib/burner/library/serialize/yaml.rb
247
+ - lib/burner/library/set_value.rb
248
+ - lib/burner/library/sleep.rb
246
249
  - lib/burner/modeling.rb
250
+ - lib/burner/modeling/attribute.rb
251
+ - lib/burner/modeling/attribute_renderer.rb
247
252
  - lib/burner/modeling/key_index_mapping.rb
253
+ - lib/burner/modeling/validations.rb
254
+ - lib/burner/modeling/validations/base.rb
255
+ - lib/burner/modeling/validations/blank.rb
256
+ - lib/burner/modeling/validations/present.rb
248
257
  - lib/burner/output.rb
249
258
  - lib/burner/payload.rb
250
259
  - lib/burner/pipeline.rb
260
+ - lib/burner/side_effects.rb
261
+ - lib/burner/side_effects/written_file.rb
251
262
  - lib/burner/step.rb
252
- - lib/burner/string_template.rb
263
+ - lib/burner/util.rb
264
+ - lib/burner/util/arrayable.rb
265
+ - lib/burner/util/string_template.rb
253
266
  - lib/burner/version.rb
254
- - lib/burner/written_file.rb
255
267
  homepage: https://github.com/bluemarblepayroll/burner
256
268
  licenses:
257
269
  - MIT
@@ -1,43 +0,0 @@
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
- class Jobs
12
- module Collection
13
- # Convert an array of arrays to an array of objects.
14
- # Expected Payload#value input: array of arrays.
15
- # Payload#value output: An array of hashes.
16
- class ArraysToObjects < Job
17
- attr_reader :mappings
18
-
19
- def initialize(name:, mappings: [])
20
- super(name: name)
21
-
22
- @mappings = Modeling::KeyIndexMapping.array(mappings)
23
-
24
- freeze
25
- end
26
-
27
- def perform(_output, payload)
28
- payload.value = (payload.value || []).map { |array| index_to_key_map(array) }
29
-
30
- nil
31
- end
32
-
33
- private
34
-
35
- def index_to_key_map(array)
36
- mappings.each_with_object({}) do |mapping, memo|
37
- memo[mapping.key] = array[mapping.index]
38
- end
39
- end
40
- end
41
- end
42
- end
43
- end
@@ -1,54 +0,0 @@
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
- class Jobs
12
- module Collection
13
- # Convert an array of objects to an array of arrays. You can leverage the separator
14
- # option to support key paths and nested objects.
15
- # Expected Payload#value input: array of hashes.
16
- # Payload#value output: An array of arrays.
17
- class ObjectsToArrays < Job
18
- attr_reader :mappings
19
-
20
- # If you wish to support nested objects you can pass in a string to use as a
21
- # key path separator. For example: if you would like to recognize dot-notation for
22
- # nested hashes then set separator to '.'.
23
- def initialize(name:, mappings: [], separator: '')
24
- super(name: name)
25
-
26
- @mappings = Modeling::KeyIndexMapping.array(mappings)
27
- @resolver = Objectable.resolver(separator: separator.to_s)
28
-
29
- freeze
30
- end
31
-
32
- def perform(_output, payload)
33
- payload.value = (payload.value || []).map { |object| key_to_index_map(object) }
34
-
35
- nil
36
- end
37
-
38
- private
39
-
40
- attr_reader :resolver
41
-
42
- def key_to_index_map(object)
43
- mappings.each_with_object(prototype_array) do |mapping, memo|
44
- memo[mapping.index] = resolver.get(object, mapping.key)
45
- end
46
- end
47
-
48
- def prototype_array
49
- Array.new(mappings.length)
50
- end
51
- end
52
- end
53
- end
54
- end
@@ -1,33 +0,0 @@
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
- class Jobs
12
- module Collection
13
- class Transform < Job
14
- # Defines a top-level key and the associated transformers for deriving the final value
15
- # to set the key to.
16
- class Attribute
17
- acts_as_hashable
18
-
19
- attr_reader :key, :transformers
20
-
21
- def initialize(key:, transformers: [])
22
- raise ArgumentError, 'key is required' if key.to_s.empty?
23
-
24
- @key = key.to_s
25
- @transformers = Realize::Transformers.array(transformers)
26
-
27
- freeze
28
- end
29
- end
30
- end
31
- end
32
- end
33
- end
@@ -1,36 +0,0 @@
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
- class Jobs
12
- module Collection
13
- class Transform < Job
14
- # Composed of an Attribute instance and a Pipeline instance. It knows how to
15
- # render/transform an Attribute. Since this library is data-first, these intermediary
16
- # objects are necessary for non-data-centric modeling.
17
- class AttributeRenderer
18
- extend Forwardable
19
-
20
- attr_reader :attribute, :pipeline
21
-
22
- def_delegators :attribute, :key
23
-
24
- def_delegators :pipeline, :transform
25
-
26
- def initialize(attribute, resolver)
27
- @attribute = attribute
28
- @pipeline = Realize::Pipeline.new(attribute.transformers, resolver: resolver)
29
-
30
- freeze
31
- end
32
- end
33
- end
34
- end
35
- end
36
- end
@@ -1,40 +0,0 @@
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
- # Can take in a string and an object and use the object for formatting string interpolations
12
- # using tokens of form: {attribute_name}. This templating class does not understand nested
13
- # structures, so input should be a flat object/hash in the form of key-value pairs. A benefit of
14
- # using Objectable for resolution is that it can understand almost any type of
15
- # object: Hash, Struct, OpenStruct, custom objects, etc.
16
- # For more information see underlying libraries:
17
- # * Stringento: https://github.com/bluemarblepayroll/stringento
18
- # * Objectable: https://github.com/bluemarblepayroll/objectable
19
- class StringTemplate
20
- include Singleton
21
-
22
- attr_reader :resolver
23
-
24
- def initialize
25
- @resolver = Objectable.resolver(separator: '')
26
-
27
- freeze
28
- end
29
-
30
- # For general consumption
31
- def evaluate(expression, input)
32
- Stringento.evaluate(expression, input, resolver: self)
33
- end
34
-
35
- # For Stringento consumption
36
- def resolve(value, input)
37
- resolver.get(input, value)
38
- end
39
- end
40
- end
@@ -1,28 +0,0 @@
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
- # Describes a file that was generated by a Job. If a Job emits a file, it should also add the
12
- # file details to the Payload#written_files array using the Payload#add_written_file method.
13
- class WrittenFile
14
- acts_as_hashable
15
-
16
- attr_reader :logical_filename,
17
- :physical_filename,
18
- :time_in_seconds
19
-
20
- def initialize(logical_filename:, physical_filename:, time_in_seconds:)
21
- @logical_filename = logical_filename.to_s
22
- @physical_filename = physical_filename.to_s
23
- @time_in_seconds = time_in_seconds.to_f
24
-
25
- freeze
26
- end
27
- end
28
- end