gem_stats 0.0.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.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/Rakefile +15 -0
- data/bin/fetchgemstats +7 -0
- data/bin/geminfo +14 -0
- data/config/mongo.yml +2 -0
- data/gem_stats.gemspec +26 -0
- data/lib/gem_stats/connection.rb +8 -0
- data/lib/gem_stats/fetcher.rb +24 -0
- data/lib/gem_stats/gem.rb +24 -0
- data/lib/gem_stats/gem_info.rb +54 -0
- data/lib/gem_stats/version.rb +3 -0
- data/lib/gem_stats.rb +11 -0
- data/test/fetcher_test.rb +17 -0
- data/test/gem_info_test.rb +22 -0
- data/test/test_helper.rb +2 -0
- metadata +117 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require "bundler/gem_tasks"
|
4
|
+
require 'rake/testtask'
|
5
|
+
|
6
|
+
desc 'Default: run unit tests.'
|
7
|
+
task :default => :test
|
8
|
+
|
9
|
+
desc 'Test the get_or_build gem.'
|
10
|
+
Rake::TestTask.new(:test) do |t|
|
11
|
+
t.libs << 'lib'
|
12
|
+
t.libs << 'test'
|
13
|
+
t.pattern = 'test/**/*_test.rb'
|
14
|
+
t.verbose = true
|
15
|
+
end
|
data/bin/fetchgemstats
ADDED
data/bin/geminfo
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'gem_stats'
|
3
|
+
|
4
|
+
ARGV.each do |gem_name|
|
5
|
+
@gem_info = GemStats::GemInfo.new(gem_name)
|
6
|
+
|
7
|
+
clients = @gem_info.clients
|
8
|
+
puts "Dependencies in runtime mode: #{clients.map(&:name).join(', ')}"
|
9
|
+
puts "Total: #{clients.count}"
|
10
|
+
|
11
|
+
clients = @gem_info.clients(:development)
|
12
|
+
puts "Dependencies in development mode: #{clients.map(&:name).join(', ')}"
|
13
|
+
puts "Total: #{clients.count}"
|
14
|
+
end
|
data/config/mongo.yml
ADDED
data/gem_stats.gemspec
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "gem_stats/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "gem_stats"
|
7
|
+
s.version = GemStats::VERSION
|
8
|
+
s.authors = ["Andrey Koleshko"]
|
9
|
+
s.email = ["ka8725@gmail.com"]
|
10
|
+
s.homepage = ""
|
11
|
+
s.summary = %q{Fetch full statistic for the given gem name}
|
12
|
+
s.description = %q{Just put gemstats your_gem_name and have a pleasure to see full statistic for this gem}
|
13
|
+
|
14
|
+
s.rubyforge_project = "gem_stats"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
# specify any dependencies here; for example:
|
22
|
+
s.add_development_dependency "rake"
|
23
|
+
s.add_runtime_dependency "json"
|
24
|
+
s.add_runtime_dependency "mongo_mapper"
|
25
|
+
s.add_runtime_dependency "bson_ext"
|
26
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'rubygems/spec_fetcher'
|
2
|
+
|
3
|
+
module GemStats
|
4
|
+
class Fetcher
|
5
|
+
def self.list(all_versions = false, prerelease = false)
|
6
|
+
@gem_list ||= ::Gem::SpecFetcher.new.list(all_versions, prerelease).values.flatten(1)
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.list_names
|
10
|
+
@list_name ||= list.map(&:first)
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.fetch_and_safe
|
14
|
+
threads = []
|
15
|
+
list_names.each do |name|
|
16
|
+
threads << Thread.new(name) { |name| GemInfo.new(name).save }
|
17
|
+
if threads.count == 50
|
18
|
+
threads.each(&:join)
|
19
|
+
threads = []
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'mongo_mapper'
|
2
|
+
|
3
|
+
module GemStats
|
4
|
+
class Gem
|
5
|
+
include MongoMapper::Document
|
6
|
+
|
7
|
+
key :name, String
|
8
|
+
key :runtime_dependencies, Array
|
9
|
+
key :development_dependencies, Array
|
10
|
+
key :version, String
|
11
|
+
key :downloads, Integer
|
12
|
+
key :version_downloads, String
|
13
|
+
key :authors, String
|
14
|
+
key :info, String
|
15
|
+
key :project_uri, String
|
16
|
+
key :gem_uri, String
|
17
|
+
key :homepage_uri, String
|
18
|
+
key :wiki_uri, String
|
19
|
+
key :documentation_uri, String
|
20
|
+
key :mailing_list_uri, String
|
21
|
+
key :source_code_uri, String
|
22
|
+
key :bug_tracker_uri, String
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'open-uri'
|
3
|
+
|
4
|
+
module GemStats
|
5
|
+
class GemInfo
|
6
|
+
API_URL = "https://rubygems.org/api/v1/gems/"
|
7
|
+
REQUEST_FORMAT = 'json'
|
8
|
+
|
9
|
+
attr_reader :name
|
10
|
+
|
11
|
+
def initialize(name)
|
12
|
+
@name = name
|
13
|
+
end
|
14
|
+
|
15
|
+
def info
|
16
|
+
@info ||= JSON.load open("#{API_URL}#{@name}.#{REQUEST_FORMAT}").read
|
17
|
+
end
|
18
|
+
|
19
|
+
def dependencies(env = 'runtime')
|
20
|
+
@dependencies ||= {}
|
21
|
+
@dependencies[env.to_s] ||= info['dependencies'][env.to_s].inject([]) { |sum, gem| sum << gem['name'] }
|
22
|
+
end
|
23
|
+
|
24
|
+
def clients(env = 'runtime')
|
25
|
+
Gem.where("#{env}_dependencies" => @name).all
|
26
|
+
end
|
27
|
+
|
28
|
+
def save
|
29
|
+
log @name
|
30
|
+
gem = Gem.find_by_name(@name) || Gem.new
|
31
|
+
gem.attributes = {:name => @name,
|
32
|
+
:runtime_dependencies => dependencies,
|
33
|
+
:development_dependencies => dependencies('development'),
|
34
|
+
:version => info['version'],
|
35
|
+
:downloads => info['downloads'],
|
36
|
+
:version_downloads => info['version_downloads'],
|
37
|
+
:authors => info['authors'],
|
38
|
+
:info => info['info'],
|
39
|
+
:project_uri => info['project_uri'],
|
40
|
+
:gem_uri => info['gem_uri'],
|
41
|
+
:homepage_uri => info['homepage_uri'],
|
42
|
+
:wiki_uri => info['wiki_uri'],
|
43
|
+
:documentation_uri => info['documentation_uri'],
|
44
|
+
:mailing_list_uri => info['mailing_list_uri'],
|
45
|
+
:source_code_uri => info['source_code_uri'],
|
46
|
+
:bug_tracker_uri => info['bug_tracker_uri']}
|
47
|
+
gem.save
|
48
|
+
end
|
49
|
+
|
50
|
+
def log(message)
|
51
|
+
puts message
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/lib/gem_stats.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class FetcherTest < Test::Unit::TestCase
|
4
|
+
include GemStats
|
5
|
+
|
6
|
+
def test_fetch_list_gems
|
7
|
+
assert_not_nil Fetcher.list
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_size_of_fetcher_list
|
11
|
+
assert_equal Fetcher.list.count, Fetcher.list_names.count
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_fetch_and_save
|
15
|
+
assert_equal true, Fetcher.respond_to?(:fetch_and_safe)
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class GemInfoTest < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@gem = GemStats::GemInfo.new('get_or_build')
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_fetch
|
9
|
+
assert_not_nil @gem.info
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_dependencies
|
13
|
+
assert_equal [], @gem.dependencies
|
14
|
+
assert_equal ["actionpack", "activerecord", "rake", "sqlite3"].sort, @gem.dependencies(:development).sort
|
15
|
+
assert_equal [], @gem.dependencies(:runtime)
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_clients
|
19
|
+
assert_equal [], @gem.clients.to_a
|
20
|
+
assert_equal [], @gem.clients(:development).to_a
|
21
|
+
end
|
22
|
+
end
|
data/test/test_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,117 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: gem_stats
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Andrey Koleshko
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-03-29 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
requirement: &70259170946480 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70259170946480
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: json
|
27
|
+
requirement: &70259170946020 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70259170946020
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: mongo_mapper
|
38
|
+
requirement: &70259170945420 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :runtime
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70259170945420
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: bson_ext
|
49
|
+
requirement: &70259170944820 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :runtime
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70259170944820
|
58
|
+
description: Just put gemstats your_gem_name and have a pleasure to see full statistic
|
59
|
+
for this gem
|
60
|
+
email:
|
61
|
+
- ka8725@gmail.com
|
62
|
+
executables:
|
63
|
+
- fetchgemstats
|
64
|
+
- geminfo
|
65
|
+
extensions: []
|
66
|
+
extra_rdoc_files: []
|
67
|
+
files:
|
68
|
+
- .gitignore
|
69
|
+
- Gemfile
|
70
|
+
- Rakefile
|
71
|
+
- bin/fetchgemstats
|
72
|
+
- bin/geminfo
|
73
|
+
- config/mongo.yml
|
74
|
+
- gem_stats.gemspec
|
75
|
+
- lib/gem_stats.rb
|
76
|
+
- lib/gem_stats/connection.rb
|
77
|
+
- lib/gem_stats/fetcher.rb
|
78
|
+
- lib/gem_stats/gem.rb
|
79
|
+
- lib/gem_stats/gem_info.rb
|
80
|
+
- lib/gem_stats/version.rb
|
81
|
+
- test/fetcher_test.rb
|
82
|
+
- test/gem_info_test.rb
|
83
|
+
- test/test_helper.rb
|
84
|
+
homepage: ''
|
85
|
+
licenses: []
|
86
|
+
post_install_message:
|
87
|
+
rdoc_options: []
|
88
|
+
require_paths:
|
89
|
+
- lib
|
90
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
91
|
+
none: false
|
92
|
+
requirements:
|
93
|
+
- - ! '>='
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
96
|
+
segments:
|
97
|
+
- 0
|
98
|
+
hash: -2815935118913676328
|
99
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
|
+
none: false
|
101
|
+
requirements:
|
102
|
+
- - ! '>='
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
segments:
|
106
|
+
- 0
|
107
|
+
hash: -2815935118913676328
|
108
|
+
requirements: []
|
109
|
+
rubyforge_project: gem_stats
|
110
|
+
rubygems_version: 1.8.10
|
111
|
+
signing_key:
|
112
|
+
specification_version: 3
|
113
|
+
summary: Fetch full statistic for the given gem name
|
114
|
+
test_files:
|
115
|
+
- test/fetcher_test.rb
|
116
|
+
- test/gem_info_test.rb
|
117
|
+
- test/test_helper.rb
|