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