module Bestgems::Client::Trends

Public Instance Methods

daily_downloads(gem_name) click to toggle source
# File lib/bestgems/client/trends.rb, line 11
def daily_downloads(gem_name)
  res = get "#{Bestgems.api_gems_endpoint}/#{gem_name}/daily_downloads.json"
  json2rb_obj(res)
end
daily_ranking(gem_name) click to toggle source
# File lib/bestgems/client/trends.rb, line 21
def daily_ranking(gem_name)
  res = get "#{Bestgems.api_gems_endpoint}/#{gem_name}/daily_ranking.json"
  json2rb_obj(res)
end
growth(gem_name, base_days:5) click to toggle source

return: growth point based on diff between total and daily ranking

in base_days(default: 5).
# File lib/bestgems/client/trends.rb, line 28
def growth(gem_name, base_days:5)
  total = total_ranking(gem_name)
  daily = daily_ranking(gem_name)
  total, daily = [total, daily].map do |data|
    data.take(base_days).inject(0) { |m, (_, rank)| rank ? m + rank : m }
  end
  (total - daily) / base_days
end
json2rb_obj(data) click to toggle source
# File lib/bestgems/client/trends.rb, line 37
def json2rb_obj(data)
  JSON.parse(data).inject({}) do |mem, h|
    date, val = h.values
    mem[date] = val
    mem
  end
end
total_downloads(gem_name) click to toggle source
# File lib/bestgems/client/trends.rb, line 6
def total_downloads(gem_name)
  res = get "#{Bestgems.api_gems_endpoint}/#{gem_name}/total_downloads.json"
  json2rb_obj(res)
end
total_ranking(gem_name) click to toggle source
# File lib/bestgems/client/trends.rb, line 16
def total_ranking(gem_name)
  res = get "#{Bestgems.api_gems_endpoint}/#{gem_name}/total_ranking.json"
  json2rb_obj(res)
end