realize 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cfdc46e645ec480e88d53d4b68261ce46c2d1db6aff4a7f3a25359e014605246
4
- data.tar.gz: ab19b4b184c520c12709739a136c789f35a8f9bb1e770ce6c9b9e7b577b6be3c
3
+ metadata.gz: 0d7bccc32a2837daee77ec8bcdda00975744c90e0ac08f62f5dbfcaf338dfd91
4
+ data.tar.gz: aa23c2077287abe225dc2c4b7aa3a2bec7a405bdfd4011ce375d7aed64ac5f56
5
5
  SHA512:
6
- metadata.gz: 801d68a75e3138c5dc5cc713550d799f6cc83caf3247451df3a12735cc407ecc4f10c240bbc58a02480da215484bdcb316c41914b74fe0ad9aaa820d523f97e3
7
- data.tar.gz: 8b88602a495732c85f5388cf5e9a456e0edb8170e6817947cbf34ec09c33154732f899af70b9608a140dccb57cf8e4c45212b574b7f096a7483a60822b389e6c
6
+ metadata.gz: e1201c0671253238b656904b713482db1b53b1f720c36821b87618fd6d0ace49314eda6773080ccb3ed27fca50d8cb68f822547d9d631ff8529f437e7babdba5
7
+ data.tar.gz: aadc039cccfdcae68d14b7902e854e14078ea2a674d7c4e84cc2f16c2f1e54f6f1cc1568a408676b726b581a5f80004861d44f751a350eb340d1bd995f02d3fe
@@ -17,6 +17,7 @@ Metrics/MethodLength:
17
17
 
18
18
  AllCops:
19
19
  TargetRubyVersion: 2.5
20
+ NewCops: enable
20
21
 
21
22
  Metrics/AbcSize:
22
23
  Max: 16
@@ -1,11 +1,18 @@
1
+ # 1.3.0 (November 4th, 2020)
2
+
3
+ New Transformers:
4
+
5
+ * r/format/string_template
6
+ * r/format/substring
7
+
1
8
  # 1.2.0 (October 6th, 2020)
2
9
 
3
10
  New Transformers:
4
11
 
5
- * b/type/boolean
6
- * b/type/string
7
- * b/value/now
8
- * b/value/uuid
12
+ * r/type/boolean
13
+ * r/type/string
14
+ * r/value/now
15
+ * r/value/uuid
9
16
 
10
17
  # 1.1.1 (September 9th, 2020)
11
18
 
data/README.md CHANGED
@@ -79,6 +79,8 @@ Here is a list of each built-in transformer, their options, and what their funct
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
80
  * **r/format/remove_whitespace** []: Removes all whitespace from the incoming value.
81
81
  * **r/format/string_replace** [original, replacement]: Replaces all occurrences of the configured original value with the replacement value.
82
+ * **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.
83
+ * **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"
82
84
 
83
85
  #### Logical Transformers
84
86
 
@@ -10,6 +10,7 @@
10
10
  require 'acts_as_hashable'
11
11
  require 'objectable'
12
12
  require 'securerandom'
13
+ require 'stringento'
13
14
  require 'time'
14
15
 
15
16
  require_relative 'realize/arrays'
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Realize
4
+ class Format
5
+ # Use an expression as a template and string interpolate it using the Stringento library.
6
+ # Stringento also uses Objectable to provide (optional) key-path notation for handling
7
+ # nested objects.
8
+ # For more information see underlying libraries:
9
+ # * Stringento: https://github.com/bluemarblepayroll/stringento
10
+ # * Objectable: https://github.com/bluemarblepayroll/objectable
11
+ class StringTemplate
12
+ acts_as_hashable
13
+
14
+ DEFAULT_SEPARATOR = '.'
15
+
16
+ attr_reader :expression, :resolver, :use_record
17
+
18
+ def initialize(expression: '', separator: DEFAULT_SEPARATOR, use_record: false)
19
+ @expression = expression.to_s
20
+ @resolver = Objectable.resolver(separator: separator)
21
+ @use_record = use_record || false
22
+
23
+ freeze
24
+ end
25
+
26
+ def transform(_resolver, value, _time, record)
27
+ input = use_record ? record : value
28
+
29
+ Stringento.evaluate(expression, input, resolver: self)
30
+ end
31
+
32
+ # For Stringento consumption
33
+ def resolve(value, input)
34
+ resolver.get(input, value)
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Realize
4
+ class Format
5
+ # Cut a string using a range (start and end index). You can also choose whether you wish the
6
+ # range selection to be inclusive (default) or exclusive.
7
+ #
8
+ # Examples using the string: '012-345-6789'
9
+ #
10
+ # Exclusive vs. Inclusive
11
+ #
12
+ # [start_index: 4, end_index: 6, exclusive: false] => '345'
13
+ # [start_index: 4, end_index: 6, exclusive: true] => '34'
14
+ #
15
+ # Default Values / Omitted Options
16
+ #
17
+ # [end_index: 6] => '012-345'
18
+ # [start_index: 4] => '345-6789'
19
+ class Substring
20
+ acts_as_hashable
21
+
22
+ DEFAULT_END_INDEX = -1
23
+ DEFAULT_START_INDEX = 0
24
+
25
+ attr_reader :end_index, :exclusive, :start_index
26
+
27
+ def initialize(
28
+ end_index: DEFAULT_END_INDEX,
29
+ exclusive: false,
30
+ start_index: DEFAULT_START_INDEX
31
+ )
32
+ @end_index = end_index.to_i
33
+ @exclusive = exclusive || false
34
+ @start_index = start_index.to_i
35
+
36
+ freeze
37
+ end
38
+
39
+ def transform(_resolver, value, _time, _record)
40
+ exclusive ? value.to_s[start_index...end_index] : value.to_s[start_index..end_index]
41
+ end
42
+ end
43
+ end
44
+ end
@@ -14,7 +14,7 @@ module Realize
14
14
 
15
15
  attr_reader :cases, :default_transformers, :key
16
16
 
17
- def initialize(cases: [], default_transformers: [], key:)
17
+ def initialize(key:, cases: [], default_transformers: [])
18
18
  raise ArgumentError, 'key is required' if key.to_s.empty?
19
19
 
20
20
  @cases = Case.array(cases)
@@ -13,6 +13,8 @@ require_relative 'filter/inactive'
13
13
  require_relative 'format/date'
14
14
  require_relative 'format/remove_whitespace'
15
15
  require_relative 'format/string_replace'
16
+ require_relative 'format/string_template'
17
+ require_relative 'format/substring'
16
18
 
17
19
  require_relative 'logical/switch'
18
20
 
@@ -49,6 +51,8 @@ module Realize
49
51
  register 'r/format/date', Format::Date
50
52
  register 'r/format/remove_whitespace', Format::RemoveWhitespace
51
53
  register 'r/format/string_replace', Format::StringReplace
54
+ register 'r/format/string_template', Format::StringTemplate
55
+ register 'r/format/substring', Format::Substring
52
56
 
53
57
  register 'r/logical/switch', Logical::Switch
54
58
 
@@ -8,5 +8,5 @@
8
8
  #
9
9
 
10
10
  module Realize
11
- VERSION = '1.2.0'
11
+ VERSION = '1.3.0'
12
12
  end
@@ -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', '~>0.79.0')
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.2.0
4
+ version: 1.3.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-10-06 00:00:00.000000000 Z
12
+ date: 2020-11-04 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: 0.79.0
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: 0.79.0
131
+ version: '1.1'
118
132
  - !ruby/object:Gem::Dependency
119
133
  name: simplecov
120
134
  requirement: !ruby/object:Gem::Requirement
@@ -179,6 +193,8 @@ files:
179
193
  - lib/realize/format/date.rb
180
194
  - lib/realize/format/remove_whitespace.rb
181
195
  - lib/realize/format/string_replace.rb
196
+ - lib/realize/format/string_template.rb
197
+ - lib/realize/format/substring.rb
182
198
  - lib/realize/logical/switch.rb
183
199
  - lib/realize/logical/switch/case.rb
184
200
  - lib/realize/pipeline.rb