Class: Aspera::Cli::ExtendedValue

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/aspera/cli/extended_value.rb

Overview

Command line extended values

Class Method Summary collapse

Instance Method Summary collapse

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

Parameters:

  • value (String)

    the value to parse

  • expect (Class, Array)

    one or a list of expected types



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

#modifiersObject



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