hiddengems 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0f68060eb1130cc3f42b1db1801de72527a1bdc51980557883b12493dd72bbde
4
- data.tar.gz: 2092ac85a1696099c7cfab6802b30f2b741c3354f4abc6ad2b01b3d0de49f58e
3
+ metadata.gz: 1d32c87fa374dc7a6cd4428bb8aec3edee96cb3aba55b105083dbc448b73cb46
4
+ data.tar.gz: 7fe47951cbd11ec15ff5ce5e5f732c6248bf4816164d4054efdb7170b11403f5
5
5
  SHA512:
6
- metadata.gz: ff84e6f76960871827d4e7cc3d254ab6170628b651092c8833db041b6700b309feb0ab36be91288a9126d3f0d3c970681939ac65bf7afd45e76151a6678a8c97
7
- data.tar.gz: 29c84023222bb564c2b27e53c4b5d5f4783861d62d9c73d178ca9f2d7288c6569edb0cd5c7b70c8f70b7d04ed9fcfddcc30980b3ae4ba81a10ef1482054e0b50
6
+ metadata.gz: 1a17294f5dfdc32e028abeb2308567931ead99a5808bbbfd6758c8a7117d0ae308964f4eda9b3224910cf4b516a278b22451ce8063861ad06cf66aadb1c08b58
7
+ data.tar.gz: '0696b97afbcbb2ad5c210ffb588fbcf61b90e8f42287f961d85f38cf2dcbf92bb387bde31114ee52ae3feca72ab74851be268778977dc6013fd7edbf49eeffc3'
data/README.md CHANGED
@@ -14,6 +14,8 @@ works like this:
14
14
  The gem's ranking order for each of the above ranking parameters is summed together.
15
15
  The ranking sum that is loweest produces the highest "vitality" ranking.
16
16
 
17
+ The rationale for this is: bestgems.org ranks only according to download counts. If developers are using just bestgems.org's results to help find libraries that they need, they'll end up with results that are heavily biased toward libraries that have simply been around for a long time; if a gem has been around for many years it will accrue lots of downloads regardless of whether the gem is being actively developed/improved.
18
+
17
19
  Example:
18
20
 
19
21
  ```
data/exe/hiddengems.rb CHANGED
@@ -5,6 +5,7 @@ require 'faraday'
5
5
  require 'ostruct'
6
6
  require 'tty-table'
7
7
  require 'pry-rescue'
8
+ require 'linear_regression_trend'
8
9
 
9
10
  searchTerm = ARGV[0]
10
11
 
@@ -39,7 +40,12 @@ module GemEntry
39
40
  res.push(version.to_h)
40
41
  nextRelease = version.publishedDate
41
42
  }
42
- res
43
+ res.collect{|each|each[:downloadsPerDay]}
44
+ end
45
+
46
+ def downloadSlope
47
+ slope = LinearRegressionTrend::Calculator.new(versionDownloadHistory).slope
48
+ slope.nan? ? 0 : slope
43
49
  end
44
50
  end
45
51
 
@@ -75,7 +81,9 @@ until curpage == 0
75
81
  gem
76
82
  }
77
83
  gems += gemPage
84
+ puts "Found +#{gemPage.size} gems (total #{gems.size})"
78
85
  curpage = ((gemPage.size < 30) ? 0 : curpage.next)
86
+ puts "looking for more..." if curpage != 0
79
87
  end
80
88
 
81
89
 
@@ -89,7 +97,12 @@ puts "Search term #{searchTerm} returned #{gems.size} hits"
89
97
  # - downloads per day per version
90
98
  # - average downloads per day
91
99
  # - last downloads per day
92
- # - velocity of downloads per day per version
100
+ # - trajectory of downloads per day per version
101
+ # - peak downloads
102
+ # - min downloads
103
+ # - where is it now
104
+ # - slope of a line from peak to current
105
+ # - slope of line from nadir to current
93
106
 
94
107
 
95
108
  data = Hash.new
@@ -97,10 +110,11 @@ data[:by_downloads] = gems.sort {|a,b| b.downloads <=> a.downloads}.collect {|ea
97
110
  data[:by_versions] = gems.sort {|a,b| b.totalVersions <=> a.totalVersions}.collect {|each| "#{each.name} (#{each.totalVersions})"}
98
111
  data[:by_latest_version_date] = gems.sort {|a,b| b.latestVersionDate <=> a.latestVersionDate}.collect {|each| "#{each.name} (#{each.latestVersionDate.year})"}
99
112
  data[:by_avg_version_date] = gems.sort {|a,b| b.avgDateOfAllVersions<=> a.avgDateOfAllVersions}.collect {|each| "#{each.name} (#{each.avgDateOfAllVersions.year})"}
113
+ data[:by_download_slope] = gems.sort {|a,b| b.downloadSlope <=> a.downloadSlope}.collect {|each| "#{each.name} (#{each.downloadSlope.round})"}
100
114
  report = Array.new
101
115
  gems.each_index {|index|
102
116
  record = Hash.new
103
- [:by_downloads,:by_versions,:by_latest_version_date,:by_avg_version_date].each {|column|
117
+ [:by_downloads,:by_versions,:by_latest_version_date,:by_avg_version_date,:by_download_slope].each {|column|
104
118
  record[column] = data[column][index]
105
119
  gemdict[data[column][index].split(' (').first][:rank] += index
106
120
  }
data/hiddengems.gemspec CHANGED
@@ -36,6 +36,7 @@ Gem::Specification.new do |spec|
36
36
  spec.add_dependency 'ostruct'
37
37
  spec.add_dependency 'tty-table'
38
38
  spec.add_dependency 'pry-rescue'
39
+ spec.add_dependency 'linear_regression_trend'
39
40
 
40
41
  # For more information and examples about making a new gem, checkout our
41
42
  # guide at: https://bundler.io/guides/creating_gem.html
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Hiddengems
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hiddengems
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dave Parker
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-08-29 00:00:00.000000000 Z
11
+ date: 2022-08-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: linear_regression_trend
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
97
111
  description: Provides a cli that lets you search rubygems for a search term. Displays
98
112
  multiple ranking criteria with emphasis on project vitality
99
113
  email: