hiddengems 0.1.1 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0ed328d3dc6959f2086b502143f0692538ddbdfcc6ffd8abb65e7c68424f4d6a
4
- data.tar.gz: 0d181ea2f22fc4244f72f437f1c7df8476a75016cf4d0dbb45aae9ebd91bb69e
3
+ metadata.gz: 00f25eebd3d13ccf280ea8b5868905c3dec6dfc7033b890f8ad6ece71b88e5b8
4
+ data.tar.gz: 606dc74c1f9b1372d85bb9690d163ce5bdb8552c750d8ad82918385aeaa910ca
5
5
  SHA512:
6
- metadata.gz: 91e56a957df7c31b007eac9652e902b7ea06762eedc17e58cde6f0767c4d3984b6fbd7e9e0c634a0fa68a15c8ea2c696281b04a856074c1b3ebcfd1381eb1460
7
- data.tar.gz: 49f32704bb775fa2160bd2b1a2b6359dd689b385b90a96484e2f7d63eda3d5bf5516c9018879ce75241aad51eeda932d0ba921995f4f2a69295d299fd02e4ff0
6
+ metadata.gz: adeed64f5fe52b2358127b6f84740fb99deff4a3b6578243fd9bdf4d7f1e266cfc796de44d3faf0be7fd4492b7cc1a48d2ee5ff0ec1a92f6c7aca97c3600e361
7
+ data.tar.gz: c19a760280479a2624e84420a93cf0193677a1f0b943cb1c4765e782a0119a560880d5e6e96f2e2049d663035f4b306ec6aa2bec9250c816e55881813bcbd0c2
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,42 +81,37 @@ 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
 
82
- puts "Search term #{searchTerm} returned #{gems.size} hits"
83
-
84
- # Things we wanna see sorted:
85
- # + number of versions
86
- # + date of last version
87
- # + avg date of all versions
88
- # + number of downloads
89
- # - downloads per day per version
90
- # - average downloads per day
91
- # - last downloads per day
92
- # - velocity of downloads per day per version
93
-
90
+ puts "Search term '#{searchTerm}' returned #{gems.size} hits"
94
91
 
95
92
  data = Hash.new
96
93
  data[:by_downloads] = gems.sort {|a,b| b.downloads <=> a.downloads}.collect {|each| "#{each.name} (#{each.downloads})"}
97
94
  data[:by_versions] = gems.sort {|a,b| b.totalVersions <=> a.totalVersions}.collect {|each| "#{each.name} (#{each.totalVersions})"}
98
95
  data[:by_latest_version_date] = gems.sort {|a,b| b.latestVersionDate <=> a.latestVersionDate}.collect {|each| "#{each.name} (#{each.latestVersionDate.year})"}
99
96
  data[:by_avg_version_date] = gems.sort {|a,b| b.avgDateOfAllVersions<=> a.avgDateOfAllVersions}.collect {|each| "#{each.name} (#{each.avgDateOfAllVersions.year})"}
97
+ data[:by_download_slope] = gems.sort {|a,b| b.downloadSlope <=> a.downloadSlope}.collect {|each| "#{each.name} (#{each.downloadSlope.round})"}
100
98
  report = Array.new
99
+ rank = 0
101
100
  gems.each_index {|index|
102
101
  record = Hash.new
103
- [:by_downloads,:by_versions,:by_latest_version_date,:by_avg_version_date].each {|column|
102
+ record[:rank] = rank
103
+ [:by_downloads,:by_versions,:by_latest_version_date,:by_avg_version_date,:by_download_slope].each {|column|
104
104
  record[column] = data[column][index]
105
105
  gemdict[data[column][index].split(' (').first][:rank] += index
106
106
  }
107
107
  report.push(record)
108
+ rank += 1
108
109
  }
109
110
 
110
111
  puts "Simple Rankings"
111
- puts TTY::Table.new(header: data.keys, rows: report).render(:ascii)
112
+ puts TTY::Table.new(header: [:rank]+data.keys, rows: report).render(:ascii)
112
113
 
113
114
  puts "\nVitality Ranking:"
114
- puts TTY::Table.new(header: [:name,:info], rows: gems.sort {|a,b| a.ranking<=>b.ranking}.collect {|each| [each.name,each.info]}).render(:ascii, column_widths: [15,20],resize: true)
115
+ puts TTY::Table.new(header: [:score, :name,:info], rows: gems.sort {|a,b| a.rank<=>b.rank}.collect {|each| [each.rank,each.name,each.info]}).render(:ascii, column_widths: [5,35,100],resize: false)
115
116
 
116
117
  puts
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.1"
4
+ VERSION = "0.2.1"
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.1
4
+ version: 0.2.1
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: