class Pod::Command::Keys::Rm

Public Class Methods

new(argv) click to toggle source
Calls superclass method
# File lib/pod/command/keys/rm.rb, line 32
def initialize(argv)
  @key_name = argv.shift_argument
  @project_name = argv.shift_argument
  @wipe_all = argv.flag?('all')
  super
end
options() click to toggle source
Calls superclass method
# File lib/pod/command/keys/rm.rb, line 26
def self.options
  [[
    '--all', 'Remove all the stored keys without asking'
  ]].concat(super)
end

Public Instance Methods

create_regex(pattern) click to toggle source
# File lib/pod/command/keys/rm.rb, line 90
def create_regex(pattern)
  regex_str = "^#{pattern.gsub('*', '.*')}$"
  Regexp.new(regex_str)
end
delete_key(key, keyring) click to toggle source
# File lib/pod/command/keys/rm.rb, line 64
def delete_key(key, keyring)
  keyring.save(key, '')
  keyring.keys.delete key
  CocoaPodsKeys::KeyringLiberator.save_keyring(keyring)

  prefix = CocoaPodsKeys::Keyring.keychain_prefix
  login = prefix + keyring.name
  delete_generic = `security delete-generic-password -a #{key.shellescape} -l #{login.shellescape} 2>&1`

  if delete_generic.include? 'security: SecKeychainSearchCopyNext: The specified item could not be found in the keychain.'
    return "Removed value for #{key}, but could not delete from Keychain."
  elsif delete_generic.include? 'password has been deleted.'
    return "Removed value for #{key}, and deleted associated key in Keychain."
  else
    return "Removed value for #{key}."
  end
end
matches(keys) click to toggle source
# File lib/pod/command/keys/rm.rb, line 82
def matches(keys)
  if @key_name.include? '*'
    keys.select { |e| e =~ create_regex(@key_name) }
  else
    keys.select { |e| e == @key_name }
  end
end
run() click to toggle source
# File lib/pod/command/keys/rm.rb, line 45
def run
  keyring = get_current_keyring
  unless keyring
    raise Informative, 'Could not find a project to remove the key from.'
  end

  if @wipe_all
    @key_name = '*'
  end

  matching_keys = matches(keyring.keys)
  if matching_keys.count > 0
    messages = matching_keys.map { |e| delete_key(e, keyring) }
    raise Informative, messages.join("\n")
  else
    raise Informative, "Could not find key that matched \"#{@key_name}\"."
  end
end
validate!() click to toggle source
Calls superclass method
# File lib/pod/command/keys/rm.rb, line 39
def validate!
  super
  verify_podfile_exists!
  help! 'A key name is required for lookup.' unless @key_name || @wipe_all
end