class Travis::Client::EnvVar::List

def [](key)

def [](key)
  return super if key.is_a? Integer
  detect { |e| e.name == key.to_s }
end

def []=(key, value)

def []=(key, value)
  return super if key.is_a? Integer
  upsert(key.to_s, value)
end

def __getobj__

def __getobj__
  super || (self.list = @generator.call)
end

def add(name, value, options = {})

def add(name, value, options = {})
  body       = JSON.dump(:env_var => options.merge(:name => name, :value => value))
  result     = session.post(EnvVar.path(self), body)
  self.list += [result['env_var']]
end

def initialize(repository, &block)

def initialize(repository, &block)
  @repository = repository
  @generator  = block || ::Proc.new { session.get(EnvVar.path(repository))['env_vars'] }
  super(nil)
end

def list=(list)

def list=(list)
  __setobj__ list.dup.freeze
end

def reload

def reload
  __setobj__ nil
  self
end

def repository_id

def repository_id
  repository.id
end

def session

def session
  repository.session
end

def upsert(name, value, options = {})

def upsert(name, value, options = {})
  entries = select { |e| e.name == name }
  if entries.any?
    entries.first.update(options.merge(:value => value))
    entries[1..-1].each { |e| e.delete }
  else
    add(name, value, options)
  end
  reload
end