parameter_substitution 0.3.0.pre.1 → 1.1.0.pre.1
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 +5 -5
- data/lib/parameter_substitution.rb +1 -2
- data/lib/parameter_substitution/configuration.rb +39 -0
- data/lib/parameter_substitution/context.rb +74 -0
- data/lib/parameter_substitution/encoder.rb +86 -0
- data/lib/parameter_substitution/expression.rb +146 -0
- data/lib/parameter_substitution/formatters/add_prefix.rb +19 -0
- data/lib/parameter_substitution/formatters/base.rb +46 -0
- data/lib/parameter_substitution/formatters/blank_if_nil.rb +11 -0
- data/lib/parameter_substitution/formatters/cgi_unescape.rb +11 -0
- data/lib/parameter_substitution/formatters/compare_string.rb +21 -0
- data/lib/parameter_substitution/formatters/date_time_custom.rb +22 -0
- data/lib/parameter_substitution/formatters/date_time_format.rb +53 -0
- data/lib/parameter_substitution/formatters/date_time_iso8601.rb +11 -0
- data/lib/parameter_substitution/formatters/date_time_iso8601_zulu.rb +11 -0
- data/lib/parameter_substitution/formatters/date_time_strftime.rb +19 -0
- data/lib/parameter_substitution/formatters/date_time_unix_timestamp.rb +11 -0
- data/lib/parameter_substitution/formatters/date_time_us_all_slashes.rb +11 -0
- data/lib/parameter_substitution/formatters/date_time_us_normal.rb +11 -0
- data/lib/parameter_substitution/formatters/date_time_us_seconds.rb +11 -0
- data/lib/parameter_substitution/formatters/date_time_us_short_am_pm.rb +11 -0
- data/lib/parameter_substitution/formatters/date_time_us_short_year.rb +11 -0
- data/lib/parameter_substitution/formatters/date_time_utc_year_first_dashes_seconds.rb +11 -0
- data/lib/parameter_substitution/formatters/date_us_dashes.rb +11 -0
- data/lib/parameter_substitution/formatters/date_us_normal.rb +11 -0
- data/lib/parameter_substitution/formatters/date_year_first_dashes.rb +11 -0
- data/lib/parameter_substitution/formatters/downcase.rb +11 -0
- data/lib/parameter_substitution/formatters/duration_as_seconds.rb +11 -0
- data/lib/parameter_substitution/formatters/duration_as_time.rb +11 -0
- data/lib/parameter_substitution/formatters/duration_grouped_by_description.rb +23 -0
- data/lib/parameter_substitution/formatters/greater_than_value.rb +21 -0
- data/lib/parameter_substitution/formatters/if_nil.rb +19 -0
- data/lib/parameter_substitution/formatters/if_truthy.rb +36 -0
- data/lib/parameter_substitution/formatters/in_timezone.rb +23 -0
- data/lib/parameter_substitution/formatters/json_parse.rb +26 -0
- data/lib/parameter_substitution/formatters/left.rb +19 -0
- data/lib/parameter_substitution/formatters/lookup.rb +19 -0
- data/lib/parameter_substitution/formatters/lower.rb +11 -0
- data/lib/parameter_substitution/formatters/manager.rb +35 -0
- data/lib/parameter_substitution/formatters/md5.rb +11 -0
- data/lib/parameter_substitution/formatters/mid.rb +20 -0
- data/lib/parameter_substitution/formatters/parse_time.rb +23 -0
- data/lib/parameter_substitution/formatters/right.rb +23 -0
- data/lib/parameter_substitution/formatters/sha256.rb +11 -0
- data/lib/parameter_substitution/formatters/split_after_colon.rb +11 -0
- data/lib/parameter_substitution/formatters/split_and_find.rb +20 -0
- data/lib/parameter_substitution/formatters/split_before_colon.rb +11 -0
- data/lib/parameter_substitution/formatters/time_with_seconds.rb +11 -0
- data/lib/parameter_substitution/formatters/trim.rb +11 -0
- data/lib/parameter_substitution/formatters/upper.rb +11 -0
- data/lib/parameter_substitution/method_call_expression.rb +58 -0
- data/lib/parameter_substitution/parse_error.rb +6 -0
- data/lib/parameter_substitution/parser.rb +109 -0
- data/lib/parameter_substitution/substitution_expression.rb +79 -0
- data/lib/parameter_substitution/text_expression.rb +52 -0
- data/lib/parameter_substitution/transform.rb +99 -0
- data/lib/parameter_substitution/version.rb +5 -0
- metadata +117 -10
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ParameterSubstitution::Formatters::CgiUnescape < ParameterSubstitution::Formatters::Base
|
4
|
+
def self.description
|
5
|
+
"Url-decodes the string, preserves nil."
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.format(value)
|
9
|
+
value && CGI.unescape(value.to_s)
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ParameterSubstitution::Formatters::CompareString < ParameterSubstitution::Formatters::DateTimeFormat
|
4
|
+
def self.description
|
5
|
+
"Compares the field to a string and returns results based on the comparison"
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.has_parameters?
|
9
|
+
true
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(compare_value, true_value, false_value)
|
13
|
+
@compare_value = compare_value
|
14
|
+
@true_value = true_value
|
15
|
+
@false_value = false_value
|
16
|
+
end
|
17
|
+
|
18
|
+
def format(value)
|
19
|
+
value.to_s.casecmp(@compare_value) == 0 ? @true_value : @false_value
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require "parameter_substitution/formatters/date_time_format"
|
3
|
+
|
4
|
+
class ParameterSubstitution::Formatters::DateTimeCustom < ParameterSubstitution::Formatters::DateTimeFormat
|
5
|
+
def self.has_parameters?
|
6
|
+
true
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.description
|
10
|
+
"Formats a Date String with the provided formatting, converts it's time zone, and then converts it to the desired formatting string."
|
11
|
+
end
|
12
|
+
|
13
|
+
def initialize(from_formatting_string, to_formatting_string, from_time_zone, to_time_zone)
|
14
|
+
@parse_options = { from_formatting: from_formatting_string, from_time_zone: from_time_zone }
|
15
|
+
@to_formatting = to_formatting_string
|
16
|
+
@to_time_zone = to_time_zone
|
17
|
+
end
|
18
|
+
|
19
|
+
def format(value)
|
20
|
+
self.class.parse_to_time(value, @parse_options)&.in_time_zone(@to_time_zone)&.strftime(@to_formatting).to_s # rubocop:disable Lint/SafeNavigationChain
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ParameterSubstitution::Formatters::DateTimeFormat < ParameterSubstitution::Formatters::Base
|
4
|
+
MINIMUM_INTEGER_TIME = Time.new(2000, 0o1, 0o1).to_i
|
5
|
+
|
6
|
+
class << self
|
7
|
+
def parse_to_time(value, parse_options = nil)
|
8
|
+
from_custom_time(value, parse_options) ||
|
9
|
+
from_yyyymmddhhmmssss(value) ||
|
10
|
+
from_unix_time_ms(value) ||
|
11
|
+
from_unix_time_sec(value) ||
|
12
|
+
from_parse(value)
|
13
|
+
rescue ArgumentError => ex
|
14
|
+
ex.message =~ /invalid date/ || ex.message =~ /argument out of range/ or raise
|
15
|
+
nil
|
16
|
+
end
|
17
|
+
|
18
|
+
def from_yyyymmddhhmmssss(value)
|
19
|
+
candidate = value.to_s.strip
|
20
|
+
candidate =~ /\d{14}/ && DateTime.strptime(candidate[0, 14], '%Y%m%d%H%M%S')
|
21
|
+
end
|
22
|
+
|
23
|
+
def from_unix_time_sec(value)
|
24
|
+
(value.to_f > MINIMUM_INTEGER_TIME) && Time.zone.at(value.to_f)
|
25
|
+
end
|
26
|
+
|
27
|
+
def from_unix_time_ms(value)
|
28
|
+
(value.to_i / 1000 > MINIMUM_INTEGER_TIME) && Time.zone.at(value.to_f / 1000)
|
29
|
+
end
|
30
|
+
|
31
|
+
def from_parse(value)
|
32
|
+
Time.zone.parse(value.to_s)
|
33
|
+
end
|
34
|
+
|
35
|
+
def from_custom_time(value, parse_options)
|
36
|
+
# parse_options = { from_formatting: "%m-%d-%Y %h %m %z", from_time_zone: "Pacific Time (US & Canada)" }
|
37
|
+
if parse_options && parse_options[:from_formatting]
|
38
|
+
from_time_zone_with_dst = parse_options[:from_time_zone].presence && parse_time_zone_offset(parse_options[:from_time_zone])
|
39
|
+
DateTime.strptime("#{value} #{from_time_zone_with_dst}", parse_options[:from_formatting])
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def parse_time_zone_offset(from_time_zone)
|
46
|
+
if (time_zone = ActiveSupport::TimeZone.new(from_time_zone))
|
47
|
+
time_zone.now.formatted_offset
|
48
|
+
else
|
49
|
+
raise "Invalid from_time_zone argument #{from_time_zone} See ActiveSupport::TimeZone"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ParameterSubstitution::Formatters::DateTimeIso8601 < ParameterSubstitution::Formatters::DateTimeFormat
|
4
|
+
def self.description
|
5
|
+
"iso8601 - 2017-04-11T15:55:10+00:00"
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.format(value)
|
9
|
+
parse_to_time(value)&.iso8601
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ParameterSubstitution::Formatters::DateTimeIso8601Zulu < ParameterSubstitution::Formatters::DateTimeFormat
|
4
|
+
def self.description
|
5
|
+
"iso8601 - 2017-04-11T07:00Z"
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.format(value)
|
9
|
+
parse_to_time(value)&.strftime("%Y-%m-%dT%TZ")
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ParameterSubstitution::Formatters::DateTimeStrftime < ParameterSubstitution::Formatters::DateTimeFormat
|
4
|
+
def self.has_parameters?
|
5
|
+
true
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.description
|
9
|
+
"Formats a DateTime with the provided format string."
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(formatting_string)
|
13
|
+
@formatting_string = formatting_string
|
14
|
+
end
|
15
|
+
|
16
|
+
def format(value)
|
17
|
+
self.class.parse_to_time(value)&.strftime(@formatting_string).to_s
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ParameterSubstitution::Formatters::DateTimeUnixTimestamp < ParameterSubstitution::Formatters::DateTimeFormat
|
4
|
+
def self.description
|
5
|
+
"unix timestamp"
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.format(value)
|
9
|
+
parse_to_time(value)&.to_i
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ParameterSubstitution::Formatters::DateTimeUsAllSlashes < ParameterSubstitution::Formatters::DateTimeFormat
|
4
|
+
def self.description
|
5
|
+
"MM/DD/YYYY/hh/mm/ss"
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.format(value)
|
9
|
+
parse_to_time(value)&.strftime("%m/%d/%Y/%H/%M/%S").to_s
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ParameterSubstitution::Formatters::DateTimeUsNormal < ParameterSubstitution::Formatters::DateTimeFormat
|
4
|
+
def self.description
|
5
|
+
"MM/DD/YYYY hh:mm"
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.format(value)
|
9
|
+
parse_to_time(value)&.strftime("%m/%d/%Y %H:%M").to_s
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ParameterSubstitution::Formatters::DateTimeUsSeconds < ParameterSubstitution::Formatters::DateTimeFormat
|
4
|
+
def self.description
|
5
|
+
"MM/DD/YYYY hh:mm:ss"
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.format(value)
|
9
|
+
parse_to_time(value)&.strftime("%m/%d/%Y %H:%M:%S").to_s
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ParameterSubstitution::Formatters::DateTimeUsShortAmPm < ParameterSubstitution::Formatters::DateTimeFormat
|
4
|
+
def self.description
|
5
|
+
"MM/DD/YYYY hh:mm PM"
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.format(value)
|
9
|
+
parse_to_time(value)&.strftime('%-m/%-d/%y %l:%M %p').to_s
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ParameterSubstitution::Formatters::DateTimeUsShortYear < ParameterSubstitution::Formatters::DateTimeFormat
|
4
|
+
def self.description
|
5
|
+
"MM/DD/YY hh:mm"
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.format(value)
|
9
|
+
parse_to_time(value)&.strftime("%m/%d/%y %H:%M").to_s
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ParameterSubstitution::Formatters::DateTimeUtcYearFirstDashesSeconds < ParameterSubstitution::Formatters::DateTimeFormat
|
4
|
+
def self.description
|
5
|
+
"2017-04-11 15:55:10 (UTC)"
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.format(value)
|
9
|
+
parse_to_time(value)&.utc&.strftime('%Y-%m-%d %H:%M:%S')
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ParameterSubstitution::Formatters::DateUsDashes < ParameterSubstitution::Formatters::DateTimeFormat
|
4
|
+
def self.description
|
5
|
+
"MM-DD-YYYY"
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.format(value)
|
9
|
+
parse_to_time(value)&.strftime("%m-%d-%Y").to_s
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ParameterSubstitution::Formatters::DateUsNormal < ParameterSubstitution::Formatters::DateTimeFormat
|
4
|
+
def self.description
|
5
|
+
"MM/DD/YYYY"
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.format(value)
|
9
|
+
parse_to_time(value)&.strftime("%m/%d/%Y").to_s
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ParameterSubstitution::Formatters::DateYearFirstDashes < ParameterSubstitution::Formatters::DateTimeFormat
|
4
|
+
def self.description
|
5
|
+
"YYYY-MM-DD"
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.format(value)
|
9
|
+
parse_to_time(value)&.strftime("%Y-%m-%d").to_s
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ParameterSubstitution::Formatters::Downcase < ParameterSubstitution::Formatters::Base
|
4
|
+
def self.description
|
5
|
+
"Converts to string and downcases the values, preserves nil."
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.format(value)
|
9
|
+
value&.to_s&.downcase
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ParameterSubstitution::Formatters::DurationAsSeconds < ParameterSubstitution::Formatters::Base
|
4
|
+
def self.description
|
5
|
+
"Converts a duration to an integer value of seconds"
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.format(value)
|
9
|
+
parse_duration(value)
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ParameterSubstitution::Formatters::DurationAsTime < ParameterSubstitution::Formatters::Base
|
4
|
+
def self.description
|
5
|
+
"Converts a duration in seconds into hh:mm:ss"
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.format(duration)
|
9
|
+
Time.at(parse_duration(duration)).utc.strftime("%H:%M:%S")
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ParameterSubstitution::Formatters::DurationGroupedByDescription < ParameterSubstitution::Formatters::Base
|
4
|
+
DURATION_DESCRIPTIONS = [
|
5
|
+
[30.seconds, "<30sec"],
|
6
|
+
[60.seconds, "30-60sec"],
|
7
|
+
[5.minutes, "1-5min"],
|
8
|
+
[10.minutes, "5-10min"],
|
9
|
+
[20.minutes, "10-20min"],
|
10
|
+
[30.minutes, "20-30min"],
|
11
|
+
[60.minutes, "30-60min"],
|
12
|
+
[nil, ">60min"]
|
13
|
+
].freeze
|
14
|
+
|
15
|
+
def self.description
|
16
|
+
"Converts a duration in seconds into one of the following: #{DURATION_DESCRIPTIONS.map(&:last).join(',')}"
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.format(duration)
|
20
|
+
fixed_duration = parse_duration(duration)
|
21
|
+
DURATION_DESCRIPTIONS.find { |max_duration, _description| !max_duration || fixed_duration.to_i < max_duration }.last
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ParameterSubstitution::Formatters::GreaterThanValue < ParameterSubstitution::Formatters::Base
|
4
|
+
def self.description
|
5
|
+
"Compares numerical values and returns results based on the comparison"
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.has_parameters?
|
9
|
+
true
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(compare_value, true_value, false_value)
|
13
|
+
@compare_value = compare_value
|
14
|
+
@true_value = true_value
|
15
|
+
@false_value = false_value
|
16
|
+
end
|
17
|
+
|
18
|
+
def format(value)
|
19
|
+
self.class.parse_duration(value) > @compare_value.to_i ? @true_value : @false_value
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ParameterSubstitution::Formatters::IfNil < ParameterSubstitution::Formatters::Base
|
4
|
+
def self.description
|
5
|
+
"Takes one new_value parameter. If the input is nil, the input is replaced with new_value."
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.has_parameters?
|
9
|
+
true
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(new_value)
|
13
|
+
@new_value = new_value
|
14
|
+
end
|
15
|
+
|
16
|
+
def format(value)
|
17
|
+
value.nil? ? @new_value : value
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ParameterSubstitution::Formatters::IfTruthy < ParameterSubstitution::Formatters::Base
|
4
|
+
TRUTHY_VALUES = [true, "true", "t", 1, "1", "on", "yes"].freeze
|
5
|
+
|
6
|
+
def self.description
|
7
|
+
"If the input is truthy (i.e. #{TRUTHY_VALUES.inspect}) then the input is replaced with the first argument. Otherwise, the input is replaced with the second argument."
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.has_parameters?
|
11
|
+
true
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(value_if_true, value_if_false)
|
15
|
+
@value_if_true = value_if_true
|
16
|
+
@value_if_false = value_if_false
|
17
|
+
end
|
18
|
+
|
19
|
+
def format(value)
|
20
|
+
if TRUTHY_VALUES.include?(downcase_if_string(value))
|
21
|
+
@value_if_true
|
22
|
+
else
|
23
|
+
@value_if_false
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
:private
|
28
|
+
|
29
|
+
def downcase_if_string(value)
|
30
|
+
if value.is_a?(String)
|
31
|
+
value.downcase
|
32
|
+
else
|
33
|
+
value
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ParameterSubstitution::Formatters::InTimezone < ParameterSubstitution::Formatters::DateTimeFormat
|
4
|
+
def self.description
|
5
|
+
"Converts a date time to the specified time zone."
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.has_parameters?
|
9
|
+
true
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(destination_timezone)
|
13
|
+
@destination_timezone = destination_timezone
|
14
|
+
end
|
15
|
+
|
16
|
+
def format(value)
|
17
|
+
if (value_as_time = self.class.parse_to_time(value))
|
18
|
+
value_as_time.in_time_zone(@destination_timezone).strftime('%Y-%m-%d %H:%M:%S')
|
19
|
+
else
|
20
|
+
value
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|