realize 1.1.1.pre.alpha → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -0
- data/CHANGELOG.md +24 -1
- data/README.md +12 -1
- data/lib/realize.rb +2 -0
- data/lib/realize/arrays.rb +7 -0
- data/lib/realize/collection/at_index.rb +7 -0
- data/lib/realize/collection/first.rb +7 -0
- data/lib/realize/collection/last.rb +7 -0
- data/lib/realize/collection/sort.rb +7 -0
- data/lib/realize/collection/sort/direction.rb +7 -0
- data/lib/realize/filter/by_key_record_value.rb +7 -0
- data/lib/realize/filter/by_key_value.rb +7 -0
- data/lib/realize/filter/by_key_value_presence.rb +7 -0
- data/lib/realize/filter/inactive.rb +7 -0
- data/lib/realize/format/date.rb +7 -0
- data/lib/realize/format/lowercase.rb +21 -0
- data/lib/realize/format/remove_whitespace.rb +7 -0
- data/lib/realize/format/string_replace.rb +7 -0
- data/lib/realize/format/string_template.rb +45 -0
- data/lib/realize/format/substring.rb +51 -0
- data/lib/realize/format/uppercase.rb +21 -0
- data/lib/realize/logical/switch.rb +8 -1
- data/lib/realize/logical/switch/case.rb +7 -0
- data/lib/realize/pipeline.rb +7 -0
- data/lib/realize/transformers.rb +34 -2
- data/lib/realize/type/base.rb +25 -0
- data/lib/realize/type/boolean.rb +39 -0
- data/lib/realize/type/string.rb +23 -0
- data/lib/realize/value/blank.rb +7 -0
- data/lib/realize/value/map.rb +7 -0
- data/lib/realize/value/now.rb +31 -0
- data/lib/realize/value/null.rb +7 -0
- data/lib/realize/value/resolve.rb +7 -0
- data/lib/realize/value/static.rb +7 -0
- data/lib/realize/value/uuid.rb +21 -0
- data/lib/realize/value/verbatim.rb +7 -0
- data/lib/realize/version.rb +1 -1
- data/realize.gemspec +2 -1
- metadata +29 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 65013db138b786888e85a76bb1532122e0faf8ef4d2eff4e5e287231cda4e999
|
4
|
+
data.tar.gz: dc4117f7fc4d2c2b39767e24006c6811ca4065621e984554aaa0004a5bf4a9e9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c5a90f318c8958386a920fe5643ce5e9851bc5e513c6e31634b3a06abe3e8c00b6e0b4990fca235f5ec8c608743f576ac7a27810499d3454dddd01629f405408
|
7
|
+
data.tar.gz: 3d58041bd36ce2ec71254cf17c0b98c883e213e0d3679b8b915b3f0d633f83f9818eeaea53e7395a5104017ad183e220bc8ccf2ed647f60d45c384002a105951
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,27 @@
|
|
1
|
-
# 1.
|
1
|
+
# 1.4.0 (November 16th, 2020)
|
2
|
+
|
3
|
+
New Transformers:
|
4
|
+
|
5
|
+
* r/format/lowercase
|
6
|
+
* r/format/uppercase
|
7
|
+
|
8
|
+
# 1.3.0 (November 4th, 2020)
|
9
|
+
|
10
|
+
New Transformers:
|
11
|
+
|
12
|
+
* r/format/string_template
|
13
|
+
* r/format/substring
|
14
|
+
|
15
|
+
# 1.2.0 (October 6th, 2020)
|
16
|
+
|
17
|
+
New Transformers:
|
18
|
+
|
19
|
+
* r/type/boolean
|
20
|
+
* r/type/string
|
21
|
+
* r/value/now
|
22
|
+
* r/value/uuid
|
23
|
+
|
24
|
+
# 1.1.1 (September 9th, 2020)
|
2
25
|
|
3
26
|
Fixes:
|
4
27
|
|
data/README.md
CHANGED
@@ -13,7 +13,7 @@ It is currently used in production at Blue Marble to power the transformation pi
|
|
13
13
|
To install through Rubygems:
|
14
14
|
|
15
15
|
````
|
16
|
-
gem install
|
16
|
+
gem install realize
|
17
17
|
````
|
18
18
|
|
19
19
|
You can also add this to your Gemfile:
|
@@ -77,20 +77,31 @@ Here is a list of each built-in transformer, their options, and what their funct
|
|
77
77
|
#### Format-oriented Transformers
|
78
78
|
|
79
79
|
* **r/format/date** [input_format, output_format]: Parses the incoming value into a Time object using the configured input_format and outputs it as formatted by the configured output_format.
|
80
|
+
* **r/format/lowercase** []: Calls `#to_s.downcase` on the value so the returned value is guaranteed to be a lower-cased string.
|
80
81
|
* **r/format/remove_whitespace** []: Removes all whitespace from the incoming value.
|
81
82
|
* **r/format/string_replace** [original, replacement]: Replaces all occurrences of the configured original value with the replacement value.
|
83
|
+
* **r/format/string_template** [expression, separator, use_record]: String interpolate an expression using either the record or passed in value. Nested objects can be handled (i.e. key paths like dot-notation) by passing in a separator.
|
84
|
+
* **r/format/substring** [start_index, end_index, exclusive]: Cut a string in a given range. All options are optional. If a start_index is not provided, the beginning of the string is used. If no end_index is specified then the end of the string is used. If exclusive is set to true then the last index position will not be included. For example: "hellofriend" with a start_index of 0, an end_index of 5, and exclusive as true would yield: "hello". If exclusive was false then it would yield "hellof"
|
85
|
+
* **r/format/uppercase** []: Calls `#to_s.upcase` on the value so the returned value is guaranteed to be an upper-cased string type.
|
82
86
|
|
83
87
|
#### Logical Transformers
|
84
88
|
|
85
89
|
* **r/logical/switch** [cases, default_transformers, key]: Provides a value-based logic branching. If a value matches a specific case, the specific cases transformers will be executed. If it does not match any case then the default_transformers will be executed.
|
86
90
|
|
91
|
+
#### Type Transformers
|
92
|
+
|
93
|
+
* **r/type/boolean** [nullable]: Returns `true` if the input is 'truthy', `false` if not. By default nullable is false, which means a nil input will return false. Changing this to true will return nil if nil is passed in. A 'truthy' value is defined as matching: true, t, yes, y, or 1 (case-insensitive).
|
94
|
+
* **r/type/string** [nullable]: Calls `#to_s` on the value so the returned value is guaranteed to be a string type.
|
95
|
+
|
87
96
|
#### Value-oriented Transformers
|
88
97
|
|
89
98
|
* **r/value/blank** []: Always return a blank string.
|
90
99
|
* **r/value/map** [values]: Do a lookup on the value using the `values` hash. If a value is found, then its corresponding value is returned. If it isn't then the input is returned.
|
100
|
+
* **r/value/now** [utc_offset]: Returns a Time object, defaulting to UTC offset. You can optionally pass in a different offset in the FORM: "+/-HH:MM"
|
91
101
|
* **r/value/null** []: Always returns null.
|
92
102
|
* **r/value/resolve** [key]: Dynamically resolves a value based on the record's key. It uses the [Objectable](https://github.com/bluemarblepayroll/objectable) library by default, which provides some goodies like dot-notation for nested objects and type-insensitivity (works for Ruby objects, hashes, structs, etc.)
|
93
103
|
* **r/value/static** [value]: Always returns a hard-coded value.
|
104
|
+
* **r/value/uuid** []: Returns a new 36 character UUID (i.e. 6967fec6-bbde-4497-82d9-55ccc7b87cd0)
|
94
105
|
* **r/value/verbatim** []: Default transformer, simply echos back the input.
|
95
106
|
|
96
107
|
### Plugging in Transformers
|
data/lib/realize.rb
CHANGED
data/lib/realize/arrays.rb
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
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
|
+
|
3
10
|
module Realize
|
4
11
|
# Mix-in that adds some nice common array helpers.
|
5
12
|
module Arrays
|
@@ -1,5 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
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
|
+
|
3
10
|
module Realize
|
4
11
|
class Collection
|
5
12
|
# Transformer to get an item of a collection
|
@@ -1,5 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
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
|
+
|
3
10
|
module Realize
|
4
11
|
class Collection
|
5
12
|
# Transformer to get the first item of a collection
|
@@ -1,5 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
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
|
+
|
3
10
|
module Realize
|
4
11
|
class Collection
|
5
12
|
# Transformer to get the last item of a collection
|
@@ -1,5 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
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
|
+
|
3
10
|
require_relative 'sort/direction'
|
4
11
|
|
5
12
|
module Realize
|
@@ -1,5 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
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
|
+
|
3
10
|
module Realize
|
4
11
|
class Collection
|
5
12
|
class Sort
|
@@ -1,5 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
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
|
+
|
3
10
|
module Realize
|
4
11
|
class Filter
|
5
12
|
# This transformer can take an array or a hash (put in array) and it understands how to
|
@@ -1,5 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
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
|
+
|
3
10
|
module Realize
|
4
11
|
class Filter
|
5
12
|
# This transformer can take an array or a hash (put in array) and it understands how to
|
@@ -1,5 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
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
|
+
|
3
10
|
module Realize
|
4
11
|
class Filter
|
5
12
|
# This transformer can take an object (will be converted to array) or array and
|
@@ -1,5 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
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
|
+
|
3
10
|
module Realize
|
4
11
|
class Filter
|
5
12
|
# This transformer can take in an array or hash (put in an array) and filters out
|
data/lib/realize/format/date.rb
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
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
|
+
|
3
10
|
module Realize
|
4
11
|
class Format
|
5
12
|
# Formats a date/time value. If the input is nil, it will output nil. If an input_format
|
@@ -0,0 +1,21 @@
|
|
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 Realize
|
11
|
+
class Format
|
12
|
+
# Call #to_s.downcase on the value and return result.
|
13
|
+
class Lowercase
|
14
|
+
acts_as_hashable
|
15
|
+
|
16
|
+
def transform(_resolver, value, _time, _record)
|
17
|
+
value.to_s.downcase
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -1,5 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
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
|
+
|
3
10
|
module Realize
|
4
11
|
class Format
|
5
12
|
# This transformer takes in a value and replaces any whitespace characters (\t\r\n\f\v)
|
@@ -1,5 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
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
|
+
|
3
10
|
module Realize
|
4
11
|
class Format
|
5
12
|
# This transformer takes in a value and replaces all occurrences of the given
|
@@ -0,0 +1,45 @@
|
|
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 Realize
|
11
|
+
class Format
|
12
|
+
# Use an expression as a template and string interpolate it using the Stringento library.
|
13
|
+
# Stringento also uses Objectable to provide (optional) key-path notation for handling
|
14
|
+
# nested objects.
|
15
|
+
# For more information see underlying libraries:
|
16
|
+
# * Stringento: https://github.com/bluemarblepayroll/stringento
|
17
|
+
# * Objectable: https://github.com/bluemarblepayroll/objectable
|
18
|
+
class StringTemplate
|
19
|
+
acts_as_hashable
|
20
|
+
|
21
|
+
DEFAULT_SEPARATOR = '.'
|
22
|
+
|
23
|
+
attr_reader :expression, :resolver, :use_record
|
24
|
+
|
25
|
+
def initialize(expression: '', separator: DEFAULT_SEPARATOR, use_record: false)
|
26
|
+
@expression = expression.to_s
|
27
|
+
@resolver = Objectable.resolver(separator: separator)
|
28
|
+
@use_record = use_record || false
|
29
|
+
|
30
|
+
freeze
|
31
|
+
end
|
32
|
+
|
33
|
+
def transform(_resolver, value, _time, record)
|
34
|
+
input = use_record ? record : value
|
35
|
+
|
36
|
+
Stringento.evaluate(expression, input, resolver: self)
|
37
|
+
end
|
38
|
+
|
39
|
+
# For Stringento consumption
|
40
|
+
def resolve(value, input)
|
41
|
+
resolver.get(input, value)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,51 @@
|
|
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 Realize
|
11
|
+
class Format
|
12
|
+
# Cut a string using a range (start and end index). You can also choose whether you wish the
|
13
|
+
# range selection to be inclusive (default) or exclusive.
|
14
|
+
#
|
15
|
+
# Examples using the string: '012-345-6789'
|
16
|
+
#
|
17
|
+
# Exclusive vs. Inclusive
|
18
|
+
#
|
19
|
+
# [start_index: 4, end_index: 6, exclusive: false] => '345'
|
20
|
+
# [start_index: 4, end_index: 6, exclusive: true] => '34'
|
21
|
+
#
|
22
|
+
# Default Values / Omitted Options
|
23
|
+
#
|
24
|
+
# [end_index: 6] => '012-345'
|
25
|
+
# [start_index: 4] => '345-6789'
|
26
|
+
class Substring
|
27
|
+
acts_as_hashable
|
28
|
+
|
29
|
+
DEFAULT_END_INDEX = -1
|
30
|
+
DEFAULT_START_INDEX = 0
|
31
|
+
|
32
|
+
attr_reader :end_index, :exclusive, :start_index
|
33
|
+
|
34
|
+
def initialize(
|
35
|
+
end_index: DEFAULT_END_INDEX,
|
36
|
+
exclusive: false,
|
37
|
+
start_index: DEFAULT_START_INDEX
|
38
|
+
)
|
39
|
+
@end_index = end_index.to_i
|
40
|
+
@exclusive = exclusive || false
|
41
|
+
@start_index = start_index.to_i
|
42
|
+
|
43
|
+
freeze
|
44
|
+
end
|
45
|
+
|
46
|
+
def transform(_resolver, value, _time, _record)
|
47
|
+
exclusive ? value.to_s[start_index...end_index] : value.to_s[start_index..end_index]
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,21 @@
|
|
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 Realize
|
11
|
+
class Format
|
12
|
+
# Call #to_s.downcase on the value and return result.
|
13
|
+
class Uppercase
|
14
|
+
acts_as_hashable
|
15
|
+
|
16
|
+
def transform(_resolver, value, _time, _record)
|
17
|
+
value.to_s.upcase
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -1,5 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
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
|
+
|
3
10
|
require_relative 'switch/case'
|
4
11
|
|
5
12
|
module Realize
|
@@ -14,7 +21,7 @@ module Realize
|
|
14
21
|
|
15
22
|
attr_reader :cases, :default_transformers, :key
|
16
23
|
|
17
|
-
def initialize(cases: [], default_transformers: []
|
24
|
+
def initialize(key:, cases: [], default_transformers: [])
|
18
25
|
raise ArgumentError, 'key is required' if key.to_s.empty?
|
19
26
|
|
20
27
|
@cases = Case.array(cases)
|
@@ -1,5 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
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
|
+
|
3
10
|
module Realize
|
4
11
|
class Logical
|
5
12
|
class Switch
|
data/lib/realize/pipeline.rb
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
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
|
+
|
3
10
|
module Realize
|
4
11
|
# Main runner that encapsulates a collection of transformers and knows how to kick off the
|
5
12
|
# transformation process.
|
data/lib/realize/transformers.rb
CHANGED
@@ -1,22 +1,42 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
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
|
+
|
3
10
|
require_relative 'collection/at_index'
|
4
11
|
require_relative 'collection/first'
|
5
12
|
require_relative 'collection/last'
|
6
13
|
require_relative 'collection/sort'
|
14
|
+
|
7
15
|
require_relative 'filter/by_key_record_value'
|
8
16
|
require_relative 'filter/by_key_value'
|
9
17
|
require_relative 'filter/by_key_value_presence'
|
10
18
|
require_relative 'filter/inactive'
|
19
|
+
|
11
20
|
require_relative 'format/date'
|
21
|
+
require_relative 'format/lowercase'
|
12
22
|
require_relative 'format/remove_whitespace'
|
13
23
|
require_relative 'format/string_replace'
|
24
|
+
require_relative 'format/string_template'
|
25
|
+
require_relative 'format/substring'
|
26
|
+
require_relative 'format/uppercase'
|
27
|
+
|
14
28
|
require_relative 'logical/switch'
|
29
|
+
|
30
|
+
require_relative 'type/boolean'
|
31
|
+
require_relative 'type/string'
|
32
|
+
|
15
33
|
require_relative 'value/blank'
|
16
34
|
require_relative 'value/map'
|
35
|
+
require_relative 'value/now'
|
17
36
|
require_relative 'value/null'
|
18
37
|
require_relative 'value/resolve'
|
19
38
|
require_relative 'value/static'
|
39
|
+
require_relative 'value/uuid'
|
20
40
|
require_relative 'value/verbatim'
|
21
41
|
|
22
42
|
module Realize
|
@@ -27,24 +47,36 @@ module Realize
|
|
27
47
|
class Transformers
|
28
48
|
acts_as_hashable_factory
|
29
49
|
|
30
|
-
register '', Value::Verbatim
|
31
50
|
register 'r/collection/at_index', Collection::AtIndex
|
32
51
|
register 'r/collection/first', Collection::First
|
33
52
|
register 'r/collection/last', Collection::Last
|
34
53
|
register 'r/collection/sort', Collection::Sort
|
54
|
+
|
35
55
|
register 'r/filter/by_key_record_value', Filter::ByKeyRecordValue
|
36
56
|
register 'r/filter/by_key_value', Filter::ByKeyValue
|
37
57
|
register 'r/filter/by_key_value_presence', Filter::ByKeyValuePresence
|
38
58
|
register 'r/filter/inactive', Filter::Inactive
|
59
|
+
|
39
60
|
register 'r/format/date', Format::Date
|
61
|
+
register 'r/format/lowercase', Format::Lowercase
|
40
62
|
register 'r/format/remove_whitespace', Format::RemoveWhitespace
|
41
63
|
register 'r/format/string_replace', Format::StringReplace
|
64
|
+
register 'r/format/string_template', Format::StringTemplate
|
65
|
+
register 'r/format/substring', Format::Substring
|
66
|
+
register 'r/format/uppercase', Format::Uppercase
|
67
|
+
|
42
68
|
register 'r/logical/switch', Logical::Switch
|
69
|
+
|
70
|
+
register 'r/type/boolean', Type::Boolean
|
71
|
+
register 'r/type/string', Type::String
|
72
|
+
|
43
73
|
register 'r/value/blank', Value::Blank
|
44
74
|
register 'r/value/map', Value::Map
|
75
|
+
register 'r/value/now', Value::Now
|
45
76
|
register 'r/value/null', Value::Null
|
46
77
|
register 'r/value/resolve', Value::Resolve
|
47
78
|
register 'r/value/static', Value::Static
|
48
|
-
register 'r/value/
|
79
|
+
register 'r/value/uuid', Value::Uuid
|
80
|
+
register 'r/value/verbatim', '', Value::Verbatim
|
49
81
|
end
|
50
82
|
end
|
@@ -0,0 +1,25 @@
|
|
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 Realize
|
11
|
+
class Type
|
12
|
+
# Common code for all Type Transformer subclasses.
|
13
|
+
class Base
|
14
|
+
acts_as_hashable
|
15
|
+
|
16
|
+
attr_reader :nullable
|
17
|
+
|
18
|
+
def initialize(nullable: false)
|
19
|
+
@nullable = nullable || false
|
20
|
+
|
21
|
+
freeze
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,39 @@
|
|
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 'base'
|
11
|
+
|
12
|
+
module Realize
|
13
|
+
class Type
|
14
|
+
# Convert input into either true, false, or nil.
|
15
|
+
# By default nils will return false unless nullable: true is passed in.
|
16
|
+
# This transformer is very liberal in its parsing and will return true for:
|
17
|
+
# true, 'true', 't', 'TRUE', 'True', 1, '1', 'Y', 'yes', 'Yes', 'YES'
|
18
|
+
# All other non-truthy values will evaluate to false, such as:
|
19
|
+
# false, 'false', 'f', 'FALSE', 'False', 0, '0', 'N', 'no', 'No', 'NO', {}, [], '',
|
20
|
+
# 'abc', 123, :abc, etc...
|
21
|
+
class Boolean < Base
|
22
|
+
def transform(_resolver, value, _time, _record)
|
23
|
+
if nullable && value.nil?
|
24
|
+
nil
|
25
|
+
elsif truthy?(value)
|
26
|
+
true
|
27
|
+
else
|
28
|
+
false
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def truthy?(value)
|
35
|
+
value.to_s.match?(/(true|t|yes|y|1)$/i)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,23 @@
|
|
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 'base'
|
11
|
+
|
12
|
+
module Realize
|
13
|
+
class Type
|
14
|
+
# Call #to_s on the value and return result.
|
15
|
+
class String < Base
|
16
|
+
def transform(_resolver, value, _time, _record)
|
17
|
+
return nil if nullable && value.nil?
|
18
|
+
|
19
|
+
value.to_s
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/realize/value/blank.rb
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
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
|
+
|
3
10
|
module Realize
|
4
11
|
class Value
|
5
12
|
# Always returns blank string
|
data/lib/realize/value/map.rb
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
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
|
+
|
3
10
|
module Realize
|
4
11
|
class Value
|
5
12
|
# This transformer can take in a hash of: "value" -> "new value". It's basically a
|
@@ -0,0 +1,31 @@
|
|
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 Realize
|
11
|
+
class Value
|
12
|
+
# Return a current Time object.
|
13
|
+
class Now
|
14
|
+
acts_as_hashable
|
15
|
+
|
16
|
+
DEFAULT_UTC_OFFSET = '+00:00'
|
17
|
+
|
18
|
+
attr_reader :utc_offset
|
19
|
+
|
20
|
+
def initialize(utc_offset: DEFAULT_UTC_OFFSET)
|
21
|
+
@utc_offset = utc_offset || DEFAULT_UTC_OFFSET
|
22
|
+
|
23
|
+
freeze
|
24
|
+
end
|
25
|
+
|
26
|
+
def transform(_resolver, _value, _time, _record)
|
27
|
+
Time.now.utc.localtime(utc_offset)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/realize/value/null.rb
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
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
|
+
|
3
10
|
module Realize
|
4
11
|
class Value
|
5
12
|
# Transformer that always returns nil
|
@@ -1,5 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
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
|
+
|
3
10
|
module Realize
|
4
11
|
class Value
|
5
12
|
# Basic transformer that can take an object and extract a value based off the transformer's
|
data/lib/realize/value/static.rb
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
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
|
+
|
3
10
|
module Realize
|
4
11
|
class Value
|
5
12
|
# Transformer that always returns a static value
|
@@ -0,0 +1,21 @@
|
|
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 Realize
|
11
|
+
class Value
|
12
|
+
# Return a current Time object.
|
13
|
+
class Uuid
|
14
|
+
acts_as_hashable
|
15
|
+
|
16
|
+
def transform(_resolver, _value, _time, _record)
|
17
|
+
SecureRandom.uuid
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -1,5 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
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
|
+
|
3
10
|
module Realize
|
4
11
|
class Value
|
5
12
|
# Default transformer that does nothing.
|
data/lib/realize/version.rb
CHANGED
data/realize.gemspec
CHANGED
@@ -30,12 +30,13 @@ Gem::Specification.new do |s|
|
|
30
30
|
|
31
31
|
s.add_dependency('acts_as_hashable', '~>1', '>=1.2.0')
|
32
32
|
s.add_dependency('objectable', '~>1')
|
33
|
+
s.add_dependency('stringento', '~>2.1')
|
33
34
|
|
34
35
|
s.add_development_dependency('guard-rspec', '~>4.7')
|
35
36
|
s.add_development_dependency('pry', '~>0')
|
36
37
|
s.add_development_dependency('rake', '~> 13')
|
37
38
|
s.add_development_dependency('rspec')
|
38
|
-
s.add_development_dependency('rubocop', '~>
|
39
|
+
s.add_development_dependency('rubocop', '~>1.1')
|
39
40
|
s.add_development_dependency('simplecov', '~>0.17.0')
|
40
41
|
s.add_development_dependency('simplecov-console', '~>0.6.0')
|
41
42
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: realize
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Ruggio
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2020-
|
12
|
+
date: 2020-11-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: acts_as_hashable
|
@@ -45,6 +45,20 @@ dependencies:
|
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '1'
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: stringento
|
50
|
+
requirement: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '2.1'
|
55
|
+
type: :runtime
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.1'
|
48
62
|
- !ruby/object:Gem::Dependency
|
49
63
|
name: guard-rspec
|
50
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -107,14 +121,14 @@ dependencies:
|
|
107
121
|
requirements:
|
108
122
|
- - "~>"
|
109
123
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
124
|
+
version: '1.1'
|
111
125
|
type: :development
|
112
126
|
prerelease: false
|
113
127
|
version_requirements: !ruby/object:Gem::Requirement
|
114
128
|
requirements:
|
115
129
|
- - "~>"
|
116
130
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
131
|
+
version: '1.1'
|
118
132
|
- !ruby/object:Gem::Dependency
|
119
133
|
name: simplecov
|
120
134
|
requirement: !ruby/object:Gem::Requirement
|
@@ -177,17 +191,26 @@ files:
|
|
177
191
|
- lib/realize/filter/by_key_value_presence.rb
|
178
192
|
- lib/realize/filter/inactive.rb
|
179
193
|
- lib/realize/format/date.rb
|
194
|
+
- lib/realize/format/lowercase.rb
|
180
195
|
- lib/realize/format/remove_whitespace.rb
|
181
196
|
- lib/realize/format/string_replace.rb
|
197
|
+
- lib/realize/format/string_template.rb
|
198
|
+
- lib/realize/format/substring.rb
|
199
|
+
- lib/realize/format/uppercase.rb
|
182
200
|
- lib/realize/logical/switch.rb
|
183
201
|
- lib/realize/logical/switch/case.rb
|
184
202
|
- lib/realize/pipeline.rb
|
185
203
|
- lib/realize/transformers.rb
|
204
|
+
- lib/realize/type/base.rb
|
205
|
+
- lib/realize/type/boolean.rb
|
206
|
+
- lib/realize/type/string.rb
|
186
207
|
- lib/realize/value/blank.rb
|
187
208
|
- lib/realize/value/map.rb
|
209
|
+
- lib/realize/value/now.rb
|
188
210
|
- lib/realize/value/null.rb
|
189
211
|
- lib/realize/value/resolve.rb
|
190
212
|
- lib/realize/value/static.rb
|
213
|
+
- lib/realize/value/uuid.rb
|
191
214
|
- lib/realize/value/verbatim.rb
|
192
215
|
- lib/realize/version.rb
|
193
216
|
- realize.gemspec
|
@@ -211,9 +234,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
211
234
|
version: '2.5'
|
212
235
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
213
236
|
requirements:
|
214
|
-
- - "
|
237
|
+
- - ">="
|
215
238
|
- !ruby/object:Gem::Version
|
216
|
-
version:
|
239
|
+
version: '0'
|
217
240
|
requirements: []
|
218
241
|
rubygems_version: 3.0.3
|
219
242
|
signing_key:
|