class Gemstash::SpecsBuilder
Builds a Marshal’ed and GZipped array of arrays containing specs as:
- name, Gem::Version, platform
Attributes
result[R]
Public Class Methods
invalidate_stored()
click to toggle source
# File lib/gemstash/specs_builder.rb, line 21 def self.invalidate_stored storage = Gemstash::Storage.for("private").for("specs_collection") storage.resource("specs.4.8.gz").delete(:specs) storage.resource("latest_specs.4.8.gz").delete(:specs) storage.resource("prerelease_specs.4.8.gz").delete(:specs) end
new(auth, prerelease: false, latest: false)
click to toggle source
# File lib/gemstash/specs_builder.rb, line 28 def initialize(auth, prerelease: false, latest: false) @auth = auth @prerelease = prerelease @latest = latest end
serve(app)
click to toggle source
# File lib/gemstash/specs_builder.rb, line 14 def self.serve(app) prerelease = app.params.fetch(:prerelease, false) latest = app.params.fetch(:latest, false) app.content_type "application/octet-stream" new(app.auth, prerelease: prerelease, latest: latest).serve end
Public Instance Methods
serve()
click to toggle source
# File lib/gemstash/specs_builder.rb, line 34 def serve check_auth if gemstash_env.config[:protected_fetch] fetch_from_storage return result if result fetch_versions marshal gzip store_result result end
Private Instance Methods
check_auth()
click to toggle source
# File lib/gemstash/specs_builder.rb, line 99 def check_auth @auth.check("fetch") end
fetch_from_storage()
click to toggle source
# File lib/gemstash/specs_builder.rb, line 62 def fetch_from_storage specs = fetch_resource return unless specs.exist?(:specs) @result = specs.load(:specs).content(:specs) rescue StandardError # On the off-chance of a race condition between specs.exist? and specs.load @result = nil end
fetch_resource()
click to toggle source
# File lib/gemstash/specs_builder.rb, line 52 def fetch_resource if @latest storage.resource("latest_specs.4.8.gz") elsif @prerelease storage.resource("prerelease_specs.4.8.gz") else storage.resource("specs.4.8.gz") end end
fetch_versions()
click to toggle source
# File lib/gemstash/specs_builder.rb, line 72 def fetch_versions @versions = Gemstash::DB::Version.for_spec_collection(prerelease: @prerelease, latest: @latest).map(&:to_spec) end
gzip()
click to toggle source
# File lib/gemstash/specs_builder.rb, line 80 def gzip @result ||= begin output = StringIO.new gz = Zlib::GzipWriter.new(output) begin gz.write(@marshal) ensure gz.close end output.string end end
marshal()
click to toggle source
# File lib/gemstash/specs_builder.rb, line 76 def marshal @marshal ||= Marshal.dump(@versions) end
storage()
click to toggle source
# File lib/gemstash/specs_builder.rb, line 48 def storage @storage ||= Gemstash::Storage.for("private").for("specs_collection") end
store_result()
click to toggle source
# File lib/gemstash/specs_builder.rb, line 95 def store_result fetch_resource.save(specs: @result) end