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 +4 -4
- data/README.md +2 -0
- data/exe/hiddengems.rb +17 -3
- data/hiddengems.gemspec +1 -0
- data/lib/hiddengems/version.rb +1 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1d32c87fa374dc7a6cd4428bb8aec3edee96cb3aba55b105083dbc448b73cb46
|
4
|
+
data.tar.gz: 7fe47951cbd11ec15ff5ce5e5f732c6248bf4816164d4054efdb7170b11403f5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
# -
|
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
|
data/lib/hiddengems/version.rb
CHANGED
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.
|
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-
|
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:
|