class Gemstash::GemYanker

Class that supports yanking a gem from the private repository of gems.

Public Class Methods

new(auth, gem_name, slug) click to toggle source
# File lib/gemstash/gem_yanker.rb, line 28
def initialize(auth, gem_name, slug)
  @auth = auth
  @gem_name = gem_name
  @slug = slug
end
serve(app) click to toggle source
# File lib/gemstash/gem_yanker.rb, line 22
def self.serve(app)
  gem_name = app.params[:gem_name]
  slug = Gemstash::DB::Version.slug(app.params)
  new(app.auth, gem_name, slug).serve
end

Public Instance Methods

serve() click to toggle source
# File lib/gemstash/gem_yanker.rb, line 34
def serve
  check_auth
  update_database
  invalidate_cache
end

Private Instance Methods

check_auth() click to toggle source
# File lib/gemstash/gem_yanker.rb, line 50
def check_auth
  @auth.check("yank")
end
full_name() click to toggle source
# File lib/gemstash/gem_yanker.rb, line 46
def full_name
  @full_name ||= "#{@gem_name}-#{@slug}"
end
invalidate_cache() click to toggle source
# File lib/gemstash/gem_yanker.rb, line 67
def invalidate_cache
  gemstash_env.cache.invalidate_gem("private", @gem_name)
end
storage() click to toggle source
# File lib/gemstash/gem_yanker.rb, line 42
def storage
  @storage ||= Gemstash::Storage.for("private").for("gems")
end
update_database() click to toggle source
# File lib/gemstash/gem_yanker.rb, line 54
def update_database
  gemstash_env.db.transaction do
    raise UnknownGemError, "Cannot yank an unknown gem!" unless Gemstash::DB::Rubygem[name: @gem_name]

    version = Gemstash::DB::Version.find_by_full_name(full_name)
    raise UnknownVersionError, "Cannot yank an unknown version!" unless version
    raise YankedVersionError, "Cannot yank an already yanked version!" unless version.indexed

    version.deindex
    storage.resource(version.storage_id).update_properties(indexed: false)
  end
end