class Gemstash::Dependencies::Fetcher
Public Class Methods
new(gems, scope, http_client, db_model)
click to toggle source
# File lib/gemstash/dependencies.rb, line 32 def initialize(gems, scope, http_client, db_model) @gems = Set.new(gems) @scope = scope @http_client = http_client @db_model = db_model @dependencies = [] end
Public Instance Methods
fetch()
click to toggle source
# File lib/gemstash/dependencies.rb, line 40 def fetch fetch_from_cache fetch_from_database fetch_from_web cache_missing @dependencies end
Private Instance Methods
cache_missing()
click to toggle source
# File lib/gemstash/dependencies.rb, line 90 def cache_missing @gems.each do |gem| gemstash_env.cache.set_dependency(@scope, gem, []) end end
done?()
click to toggle source
# File lib/gemstash/dependencies.rb, line 50 def done? @gems.empty? end
fetch_from_cache()
click to toggle source
# File lib/gemstash/dependencies.rb, line 54 def fetch_from_cache gemstash_env.cache.dependencies(@scope, @gems) do |gem, value| @gems.delete(gem) @dependencies += value end end
fetch_from_database()
click to toggle source
# File lib/gemstash/dependencies.rb, line 61 def fetch_from_database return if done? return unless @db_model log.info "Querying dependencies: #{@gems.to_a.join(", ")}" @db_model.fetch(@gems) do |gem, value| @gems.delete(gem) gemstash_env.cache.set_dependency(@scope, gem, value) @dependencies += value end end
fetch_from_web()
click to toggle source
# File lib/gemstash/dependencies.rb, line 74 def fetch_from_web return if done? return unless @http_client log.info "Fetching dependencies: #{@gems.to_a.join(", ")}" gems_param = @gems.map {|gem| CGI.escape(gem) }.join(",") fetched = @http_client.get("api/v1/dependencies?gems=#{gems_param}") fetched = Marshal.load(fetched).group_by {|r| r[:name] } fetched.each do |gem, result| @gems.delete(gem) gemstash_env.cache.set_dependency(@scope, gem, result) @dependencies += result end end