gem-miner 1.0.0 → 1.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.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/gem-miner/miner.rb +20 -38
- data/lib/gem-miner/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 45b783b580304695597d60a41c305c62e87852c5
|
4
|
+
data.tar.gz: 55e39dd7c73c4537b24bf5d16224316c656c7b6b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: de7ef4b644f140c372fe5dea92b62868c5976bf04cff77463f1dc67f7a3ac22fa755badfba4c9228f2244e7e901f4e0522d8a49d3af8c893cea9873f8b18b262
|
7
|
+
data.tar.gz: 7855ded7681ebb9a728b3a7398440be90b52f76c59737b1f34442a01eee1ddf108cb57900299a5807d5115957e0245a3bf6e9d68d2df5df5307bd24eda6993e1
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# GemMiner
|
2
2
|
|
3
|
+
[](https://badge.fury.io/rb/gem-miner)
|
3
4
|
[](https://travis-ci.org/reevoo/gem-miner)
|
4
|
-
|
5
5
|
[](https://codeclimate.com/github/reevoo/gem-miner)
|
6
6
|
|
7
7
|
|
data/lib/gem-miner/miner.rb
CHANGED
@@ -8,8 +8,11 @@ module GemMiner
|
|
8
8
|
class Miner
|
9
9
|
include Logger
|
10
10
|
|
11
|
-
|
12
|
-
|
11
|
+
GEMFILE_REGEX = /gem[\s]+([^\n\;]+)/
|
12
|
+
GEMSPEC_REGEX = /dependency[\s]+([^\n\;]+)/
|
13
|
+
|
14
|
+
def self.gems_for(github_search_query, github_token)
|
15
|
+
new(github_search_query, GithubClient.new(github_token)).gems
|
13
16
|
end
|
14
17
|
|
15
18
|
def initialize(github_search_query, github_client = GithubClient.new)
|
@@ -37,8 +40,8 @@ module GemMiner
|
|
37
40
|
# ...
|
38
41
|
# }
|
39
42
|
def collect_gems!
|
40
|
-
gemfiles =
|
41
|
-
gemspecs =
|
43
|
+
gemfiles = parse_sources('Gemfile', GEMFILE_REGEX)
|
44
|
+
gemspecs = parse_sources('gemspec', GEMSPEC_REGEX)
|
42
45
|
|
43
46
|
gems = merge_hashes(gemfiles, gemspecs)
|
44
47
|
|
@@ -50,45 +53,24 @@ module GemMiner
|
|
50
53
|
end
|
51
54
|
|
52
55
|
# Collects all of the gemfiles for all Reevoo repositories.
|
53
|
-
# Returns a dictionary with the gem as the key and an array of repositories
|
54
|
-
# values.
|
55
|
-
def
|
56
|
-
results = search("filename
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
memo[
|
62
|
-
memo[name_of(result)] += extract_gemfile(result[:content])
|
56
|
+
# Returns a dictionary with the gem as the key and an array of repositories
|
57
|
+
# as values.
|
58
|
+
def parse_sources(filename, regex)
|
59
|
+
results = search("filename:#{filename} #{@github_search_query}")
|
60
|
+
log "Parsing #{results.count} #{filename}s"
|
61
|
+
files = results.reduce({}) do |memo, result|
|
62
|
+
# We might have more than one dep file in a repository...
|
63
|
+
memo[result[:name]] ||= []
|
64
|
+
memo[result[:name]] += extract_deps(result[:content], regex)
|
63
65
|
log '.'
|
64
66
|
memo
|
65
67
|
end
|
66
68
|
log "done!\n"
|
67
|
-
|
68
|
-
end
|
69
|
-
|
70
|
-
GEM_REGEX = /gem[\s]+([^\n\;]+)/
|
71
|
-
def extract_gemfile(gemfile)
|
72
|
-
gemfile.gsub(/\"/, '\'').scan(GEM_REGEX).flatten
|
69
|
+
files
|
73
70
|
end
|
74
71
|
|
75
|
-
def
|
76
|
-
|
77
|
-
log "Parsing #{results.count} gemspecs"
|
78
|
-
gemspecs = results.reduce({}) do |memo, result|
|
79
|
-
# We might have more than one Gemfile in a repository...
|
80
|
-
memo[name_of(result)] ||= []
|
81
|
-
memo[name_of(result)] += extract_gemspec(result[:content])
|
82
|
-
log '.'
|
83
|
-
memo
|
84
|
-
end
|
85
|
-
log "done!\n"
|
86
|
-
gemspecs
|
87
|
-
end
|
88
|
-
|
89
|
-
GEMSPEC_REGEX = /dependency[\s]+([^\n\;]+)/
|
90
|
-
def extract_gemspec(gemspec)
|
91
|
-
gemspec.gsub(/\"/, '\'').scan(GEMSPEC_REGEX).flatten
|
72
|
+
def extract_deps(file, regex)
|
73
|
+
file.gsub(/\"/, '\'').scan(regex).flatten
|
92
74
|
end
|
93
75
|
|
94
76
|
def search(query)
|
@@ -101,7 +83,7 @@ module GemMiner
|
|
101
83
|
# h2 = { b: [1, 3], c: [1, 2, 3] }
|
102
84
|
# merge_hashes(h1, h2) # => { a: [1, 2, 3], b: [1, 2, 3, 4], c: [1, 2, 3] }
|
103
85
|
#
|
104
|
-
# From http://stackoverflow.com/questions/11171834
|
86
|
+
# From http://stackoverflow.com/questions/11171834
|
105
87
|
def merge_hashes(hash1, hash2)
|
106
88
|
hash1.merge(hash2) { |key, oldval, newval| (oldval | newval) }
|
107
89
|
end
|
data/lib/gem-miner/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gem-miner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Reevoo
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-11-
|
11
|
+
date: 2015-11-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: octokit
|