hiddengems 0.2.0 → 0.2.3

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: 1d32c87fa374dc7a6cd4428bb8aec3edee96cb3aba55b105083dbc448b73cb46
4
- data.tar.gz: 7fe47951cbd11ec15ff5ce5e5f732c6248bf4816164d4054efdb7170b11403f5
3
+ metadata.gz: 55b3634a3b5823bdd3d634dad3e013d377a7e16f3f33496bcc3859dbee798199
4
+ data.tar.gz: b495911b4b3b4b6f16c43dd539a726bff9422e0c0de4812d17f44fcbab3cf31b
5
5
  SHA512:
6
- metadata.gz: 1a17294f5dfdc32e028abeb2308567931ead99a5808bbbfd6758c8a7117d0ae308964f4eda9b3224910cf4b516a278b22451ce8063861ad06cf66aadb1c08b58
7
- data.tar.gz: '0696b97afbcbb2ad5c210ffb588fbcf61b90e8f42287f961d85f38cf2dcbf92bb387bde31114ee52ae3feca72ab74851be268778977dc6013fd7edbf49eeffc3'
6
+ metadata.gz: b9e48d6fa7a5d51c3a8cbe3d15fb51abd22ed9741b2de2f76b5aaf519ec4e693755a35417e20b23378c5ddd7122cd6b7deaaeaf55b52f91eb0a6eab6c9d695f1
7
+ data.tar.gz: 9e5811bc5737f1d13d524091867f3d797f76f832150cfcb36f6fe240c99e07963c00f1bbebb723acb8429b475871c01cd39c68e71cd21c202fa66eabe55911e8
data/README.md CHANGED
@@ -7,12 +7,13 @@ and sorts the search results by a number of ranking parameters:
7
7
  - number of versions
8
8
  - date of latest version
9
9
  - average date of all released versions
10
+ - download linear regression trend slope
10
11
 
11
12
  Using the above, it produces a table of found gems sorted by "vitality", which
12
13
  works like this:
13
14
 
14
15
  The gem's ranking order for each of the above ranking parameters is summed together.
15
- The ranking sum that is loweest produces the highest "vitality" ranking.
16
+ The ranking sum that is lowest produces the highest "vitality" ranking.
16
17
 
17
18
  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
19
 
@@ -20,30 +21,31 @@ Example:
20
21
 
21
22
  ```
22
23
  $ hiddengems.rb 'zabbix sender'
23
- Search term zabbix sender returned 6 hits
24
+ Found +6 gems (total 6)
25
+ Search term 'zabbix sender' returned 6 hits
24
26
  Simple Rankings
25
- +---------------------------+------------------------+---------------------------+---------------------------+
26
- |by_downloads |by_versions |by_latest_version_date |by_avg_version_date |
27
- +---------------------------+------------------------+---------------------------+---------------------------+
28
- |zabbix-ruby-client (51296) |zabbix-ruby-client (24) |zabbix_sender_api (2022) |zabbix_sender_api (2021) |
29
- |zabbix_sender (34951) |zabbix_sender_api (11) |zabbix_sender (2020) |zabbix_sender (2017) |
30
- |zabbix_send (13447) |zabbix_sender (5) |zabbix_sender_legacy (2016)|zabbix_sender_legacy (2016)|
31
- |zabbix_receiver (10271) |zabbix_sender_legacy (5)|zabbix-ruby-client (2016) |zabbix_receiver (2015) |
32
- |zabbix_sender_api (10031) |zabbix_receiver (5) |zabbix_receiver (2015) |zabbix-ruby-client (2014) |
33
- |zabbix_sender_legacy (9939)|zabbix_send (3) |zabbix_send (2013) |zabbix_send (2013) |
34
- +---------------------------+------------------------+---------------------------+---------------------------+
27
+ +----+---------------------------+------------------------+---------------------------+---------------------------+--------------------------+
28
+ |rank|by_downloads |by_versions |by_latest_version_date |by_avg_version_date |by_download_slope |
29
+ +----+---------------------------+------------------------+---------------------------+---------------------------+--------------------------+
30
+ |0 |zabbix-ruby-client (51368) |zabbix-ruby-client (24) |zabbix_sender_api (2022) |zabbix_sender_api (2021) |zabbix_send (1286) |
31
+ |1 |zabbix_sender (35004) |zabbix_sender_api (11) |zabbix_sender (2020) |zabbix_sender (2017) |zabbix_receiver (375) |
32
+ |2 |zabbix_send (13456) |zabbix_sender (5) |zabbix_sender_legacy (2016)|zabbix_sender_legacy (2016)|zabbix_sender (319) |
33
+ |3 |zabbix_receiver (10286) |zabbix_sender_legacy (5)|zabbix-ruby-client (2016) |zabbix_receiver (2015) |zabbix_sender_legacy (278)|
34
+ |4 |zabbix_sender_api (10064) |zabbix_receiver (5) |zabbix_receiver (2015) |zabbix-ruby-client (2014) |zabbix_sender_api (100) |
35
+ |5 |zabbix_sender_legacy (9954)|zabbix_send (3) |zabbix_send (2013) |zabbix_send (2013) |zabbix-ruby-client (64) |
36
+ +----+---------------------------+------------------------+---------------------------+---------------------------+--------------------------+
35
37
 
36
38
  Vitality Ranking:
37
- +-----------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+
38
- |name |info |
39
- +-----------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+
40
- |zabbix_sender |Zabbix Sender gem |
41
- |zabbix_sender_api |This gem implements an api that abstracts the zabbix sender/trapper mechanism. It saves tons of time when you… |
42
- |zabbix_sender_legacy |Improved zabbix_sender gem just for legacy ruby < 2.0 like in Debian Wheezy |
43
- |zabbix-ruby-client |A zabbix alternative to zabbix-agent using zabbix-sender. |
44
- |zabbix_send |Send data to Zabbix trappers from Ruby |
45
- |zabbix_receiver |Server to receive sender data from zabbix-agent. |
46
- +-----------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+
39
+ +-----+-----------------------------------+----------------------------------------------------------------------------------------------------+
40
+ |score|name |info |
41
+ +-----+-----------------------------------+----------------------------------------------------------------------------------------------------+
42
+ |7 |zabbix_sender |Zabbix Sender gem |
43
+ |9 |zabbix_sender_api |This gem implements an api that abstracts the zabbix sender/trapper mechanism. It saves tons of ti… |
44
+ |12 |zabbix-ruby-client |A zabbix alternative to zabbix-agent using zabbix-sender. |
45
+ |15 |zabbix_sender_legacy |Improved zabbix_sender gem just for legacy ruby < 2.0 like in Debian Wheezy |
46
+ |15 |zabbix_receiver |Server to receive sender data from zabbix-agent. |
47
+ |17 |zabbix_send |Send data to Zabbix trappers from Ruby |
48
+ +-----+-----------------------------------+----------------------------------------------------------------------------------------------------+
47
49
  ```
48
50
 
49
51
  ## Installation
data/exe/hiddengems.rb CHANGED
@@ -67,8 +67,14 @@ curpage = 1
67
67
  gems = Array.new
68
68
  gemdict = Hash.new
69
69
  until curpage == 0
70
+ dupepad = 0
70
71
  gemPage = JSON.parse(Faraday.get("https://rubygems.org/api/v1/search.json?page=#{curpage}&query=#{searchTerm}").body).collect { |each| OpenStruct.new(each)}.collect {|gem|
71
72
  gem.extend(GemEntry)
73
+ if gemdict.has_key?(gem.name)
74
+ puts "(rejected a dupe)"
75
+ dupepad += 1
76
+ next
77
+ end
72
78
  gem[:versions] = JSON.parse(
73
79
  Faraday.get(
74
80
  "https://rubygems.org/api/v1/versions/#{gem.name}.json"
@@ -79,31 +85,15 @@ until curpage == 0
79
85
  gem[:rank] = 0
80
86
  gemdict[gem.name] = gem
81
87
  gem
82
- }
88
+ }.reject(&:nil?)
83
89
  gems += gemPage
84
90
  puts "Found +#{gemPage.size} gems (total #{gems.size})"
85
- curpage = ((gemPage.size < 30) ? 0 : curpage.next)
91
+ curpage = (((gemPage.size + dupepad) < 30) ? 0 : curpage.next)
86
92
  puts "looking for more..." if curpage != 0
87
93
  end
88
94
 
89
95
 
90
- puts "Search term #{searchTerm} returned #{gems.size} hits"
91
-
92
- # Things we wanna see sorted:
93
- # + number of versions
94
- # + date of last version
95
- # + avg date of all versions
96
- # + number of downloads
97
- # - downloads per day per version
98
- # - average downloads per day
99
- # - last downloads per day
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
106
-
96
+ puts "Search term '#{searchTerm}' returned #{gems.size} hits"
107
97
 
108
98
  data = Hash.new
109
99
  data[:by_downloads] = gems.sort {|a,b| b.downloads <=> a.downloads}.collect {|each| "#{each.name} (#{each.downloads})"}
@@ -112,19 +102,22 @@ data[:by_latest_version_date] = gems.sort {|a,b| b.latestVersionDate <=> a.lates
112
102
  data[:by_avg_version_date] = gems.sort {|a,b| b.avgDateOfAllVersions<=> a.avgDateOfAllVersions}.collect {|each| "#{each.name} (#{each.avgDateOfAllVersions.year})"}
113
103
  data[:by_download_slope] = gems.sort {|a,b| b.downloadSlope <=> a.downloadSlope}.collect {|each| "#{each.name} (#{each.downloadSlope.round})"}
114
104
  report = Array.new
105
+ rank = 0
115
106
  gems.each_index {|index|
116
107
  record = Hash.new
108
+ record[:rank] = rank
117
109
  [:by_downloads,:by_versions,:by_latest_version_date,:by_avg_version_date,:by_download_slope].each {|column|
118
110
  record[column] = data[column][index]
119
111
  gemdict[data[column][index].split(' (').first][:rank] += index
120
112
  }
121
113
  report.push(record)
114
+ rank += 1
122
115
  }
123
116
 
124
117
  puts "Simple Rankings"
125
- puts TTY::Table.new(header: data.keys, rows: report).render(:ascii)
118
+ puts TTY::Table.new(header: [:rank]+data.keys, rows: report).render(:ascii, resize: false, column_widths: [5,30,30,30,30,30])
126
119
 
127
120
  puts "\nVitality Ranking:"
128
- 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)
121
+ 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)
129
122
 
130
123
  puts
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Hiddengems
4
- VERSION = "0.2.0"
4
+ VERSION = "0.2.3"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hiddengems
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dave Parker