Class: Aspera::Cli::ExtendedValue
- Inherits:
-
Object
- Object
- Aspera::Cli::ExtendedValue
- Includes:
- Singleton
- Defined in:
- lib/aspera/cli/extended_value.rb
Overview
Command line extended values
Class Method Summary collapse
- .assert_no_value(value, what) ⇒ Object
-
.decode_csvt(value) ⇒ Object
Decode comma separated table text.
Instance Method Summary collapse
- #default_decoder=(value) ⇒ Object
-
#evaluate(value) ⇒ Object
Parse an string value to extended value, if it is a String using supported extended value modifiers Other value types are returned as is.
-
#evaluate_all(value) ⇒ Object
Find inner extended values.
-
#evaluate_with_default(value) ⇒ Object
Parse string value as extended value Use default decoder if none is specified.
- #modifiers ⇒ Object
-
#set_handler(name, method) ⇒ Object
Add a new handler.
Class Method Details
.assert_no_value(value, what) ⇒ Object
48 49 50 |
# File 'lib/aspera/cli/extended_value.rb', line 48 def assert_no_value(value, what) raise "no value allowed for extended value type: #{what}" unless value.empty? end |
.decode_csvt(value) ⇒ Object
Decode comma separated table text
33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/aspera/cli/extended_value.rb', line 33 def decode_csvt(value) col_titles = nil hash_array = [] CSV.parse(value).each do |values| next if values.empty? if col_titles.nil? col_titles = values else hash_array.push(col_titles.zip(values).to_h) end end Log.log.warn('Titled CSV file without any row') if hash_array.empty? return hash_array end |
Instance Method Details
#default_decoder=(value) ⇒ Object
109 110 111 112 113 |
# File 'lib/aspera/cli/extended_value.rb', line 109 def default_decoder=(value) Log.log.debug{"Setting default decoder to (#{value.class}) #{value}"} Aspera.assert(value.nil? || @handlers.key?(value)) @default_decoder = value end |
#evaluate(value) ⇒ Object
Parse an string value to extended value, if it is a String using supported extended value modifiers Other value types are returned as is
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
# File 'lib/aspera/cli/extended_value.rb', line 128 def evaluate(value) return value unless value.is_a?(String) regex = Regexp.new("^#{handler_regex_string}(.*)$", Regexp::MULTILINE) # First determine decoders, in reversed order handlers_reversed = [] while (m = value.match(regex)) handler = m[1].to_sym handlers_reversed.unshift(handler) value = m[2] break if SPECIAL_HANDLERS.include?(handler) end Log.log.trace1{"evaluating: #{handlers_reversed}, value: #{value}"} handlers_reversed.each do |handler| value = @handlers[handler].call(value) end return value end |
#evaluate_all(value) ⇒ Object
Find inner extended values
154 155 156 157 158 159 160 161 162 |
# File 'lib/aspera/cli/extended_value.rb', line 154 def evaluate_all(value) regex = Regexp.new("^(.*)#{handler_regex_string}([^#{MARKER_IN_END}]*)#{MARKER_IN_END}(.*)$", Regexp::MULTILINE) while (m = value.match(regex)) sub_value = "@#{m[2]}:#{m[3]}" Log.log.debug{"evaluating #{sub_value}"} value = "#{m[1]}#{evaluate(sub_value)}#{m[4]}" end return value end |
#evaluate_with_default(value) ⇒ Object
Parse string value as extended value Use default decoder if none is specified
148 149 150 151 |
# File 'lib/aspera/cli/extended_value.rb', line 148 def evaluate_with_default(value) value = [MARKER_START, @default_decoder, MARKER_END, value].join if value.is_a?(String) && value.match(/^#{handler_regex_string}.*$/).nil? && !@default_decoder.nil? return evaluate(value) end |
#modifiers ⇒ Object
115 |
# File 'lib/aspera/cli/extended_value.rb', line 115 def modifiers; @handlers.keys; end |
#set_handler(name, method) ⇒ Object
Add a new handler
118 119 120 121 122 |
# File 'lib/aspera/cli/extended_value.rb', line 118 def set_handler(name, method) Log.log.debug{"setting handler for #{name}"} Aspera.assert_type(name, Symbol){'name'} @handlers[name] = method end |