module Chef::Mixin::PowershellTypeCoercions

Public Instance Methods

psobject_conversion(value) click to toggle source
# File lib/chef/mixin/powershell_type_coercions.rb, line 39
def psobject_conversion(value)
  if value.respond_to?(:to_psobject)
    "(#{value.to_psobject})"
  end
end
translate_type(value) click to toggle source
# File lib/chef/mixin/powershell_type_coercions.rb, line 45
def translate_type(value)
  type_coercion(value) || psobject_conversion(value) || safe_string(value.to_s)
end
type_coercion(value) click to toggle source
# File lib/chef/mixin/powershell_type_coercions.rb, line 24
def type_coercion(value)
  case value
  when Integer, Float
    value.to_s
  when FalseClass
    "$false"
  when TrueClass
    "$true"
  when Hash, Chef::Node::ImmutableMash
    translate_hash(value)
  when Array, Chef::Node::ImmutableArray
    translate_array(value)
  end
end

Private Instance Methods

safe_string(s) click to toggle source
# File lib/chef/mixin/powershell_type_coercions.rb, line 71
def safe_string(s)
  # do we need to worry about binary data?
  if unsafe?(s)
    encoded_str = Base64.strict_encode64(s.encode("UTF-8"))
    "([System.Text.Encoding]::UTF8.GetString("\
         "[System.Convert]::FromBase64String('#{encoded_str}')"\
    "))"
  else
    "'#{s}'"
  end
end
translate_array(x) click to toggle source
# File lib/chef/mixin/powershell_type_coercions.rb, line 58
def translate_array(x)
  translated = x.map do |v|
    translate_type(v)
  end
  "@(#{translated.join(',')})"
end
translate_hash(x) click to toggle source
# File lib/chef/mixin/powershell_type_coercions.rb, line 51
def translate_hash(x)
  translated = x.inject([]) do |memo, (k, v)|
    memo << "#{k}=#{translate_type(v)}"
  end
  "@{#{translated.join(';')}}"
end
unsafe?(s) click to toggle source
# File lib/chef/mixin/powershell_type_coercions.rb, line 65
def unsafe?(s)
  ["'", "#", "`", '"'].any? do |x|
    s.include? x
  end
end