class Travis::Conditions::V1::Data

Constants

QUOTE

Public Class Methods

new(data) click to toggle source
Calls superclass method
# File lib/travis/conditions/v1/data.rb, line 7
def initialize(data)
  super(normalize(data))
end

Public Instance Methods

[](key) click to toggle source
# File lib/travis/conditions/v1/data.rb, line 11
def [](key)
  data[key&.to_sym]
end
env(key) click to toggle source
# File lib/travis/conditions/v1/data.rb, line 15
def env(key)
  value = data.fetch(:env, {})[key&.to_sym]
  value = value.gsub(/^(["'])(.*)\1$/, '\2') if value.respond_to?(:gsub)
  value
end

Private Instance Methods

cast(obj) click to toggle source
# File lib/travis/conditions/v1/data.rb, line 67
def cast(obj)
  case obj.to_s.downcase
  when 'false'
    false
  when 'true'
    true
  else
    obj
  end
end
error(arg) click to toggle source
# File lib/travis/conditions/v1/data.rb, line 84
def error(arg)
  ArgumentError.new("Invalid env data (#{arg.inspect} given)")
end
normalize(data) click to toggle source
# File lib/travis/conditions/v1/data.rb, line 23
def normalize(data)
  data = symbolize(data)
  data[:env] = normalize_env(data[:env])
  data
end
normalize_env(env) click to toggle source

TODO move this to travis-env_vars

# File lib/travis/conditions/v1/data.rb, line 42
def normalize_env(env)
  symbolize(to_h(env || {}))
rescue TypeError
  raise error(env)
end
parse(str) click to toggle source
# File lib/travis/conditions/v1/data.rb, line 59
def parse(str)
  vars = ShVars::String.new(str).parse
  vars.map { |lft, rgt| [lft, cast(unquote(rgt))] }
rescue ShVars::ParseError
  puts "[travis-conditions] Cannot normalize env var (#{str.inspect} given)"
  []
end
symbolize(obj) click to toggle source
# File lib/travis/conditions/v1/data.rb, line 29
def symbolize(obj)
  case obj
  when Hash
    obj.map { |key, value| [key&.to_sym, symbolize(value)] }.to_h
  when Array
    obj.map { |obj| symbolize(obj) }
  else
    obj
  end
end
to_h(obj) click to toggle source
# File lib/travis/conditions/v1/data.rb, line 48
def to_h(obj)
  case obj
  when Hash
    obj
  when Array
    obj.map { |obj| to_h(obj).to_a }.flatten(1).to_h
  else
    parse(obj.to_s.strip)
  end
end
unquote(str) click to toggle source
# File lib/travis/conditions/v1/data.rb, line 80
def unquote(str)
  QUOTE =~ str && $2 || str
end