hiddengems 0.1.1 → 0.2.1

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: 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: