rdep 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.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/bin/rdep +5 -0
  3. data/lib/rdep.rb +114 -0
  4. metadata +45 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 09ed84869e7fee47e5b36da474e650946689697d
4
+ data.tar.gz: 474d042ec05791d09c51146c504bc5874d603a0c
5
+ SHA512:
6
+ metadata.gz: 53a731747bbf5af64ada59afbbd346b402ade2eca0d770016fde1a244ddb8381668f5f76d6e367bd75de2dc9632e67755f5296868a37e199516db13e0a8c6e8a
7
+ data.tar.gz: d65d9d43a28a5706831187a325e428ca4555c67610050d708fc2865d609a4c1538e04453c0cc7bfe4d51c240c8352d2cb56c38599a85e432c2081a8d7d8f3644
data/bin/rdep ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rdep'
4
+
5
+ RDep::run(ARGV)
data/lib/rdep.rb ADDED
@@ -0,0 +1,114 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ require 'net/http'
4
+ require 'json'
5
+ require 'tmpdir'
6
+
7
+ module RDep
8
+
9
+ def self.load_gemspec(gemspecPath)
10
+ Gem::Specification.load(gemspecPath)
11
+ end
12
+
13
+ def self.load_gemfile(gemfilePath)
14
+ gemfilePathname = Pathname.new(gemfilePath)
15
+
16
+ wd = Dir.pwd
17
+ Dir.chdir(gemfilePathname.parent)
18
+ builder = Bundler::Dsl.new
19
+ builder.eval_gemfile(gemfilePathname.basename)
20
+ Dir.chdir(wd)
21
+
22
+ return builder
23
+ end
24
+
25
+ def self.gemspec_from_gem_name(gem, reqs)
26
+ reqs_str = reqs.join(',')
27
+ wd = Dir.pwd
28
+ Dir.mktmpdir("rdep") do |d|
29
+ Dir.chdir(d)
30
+ system "gem fetch #{gem} -v '#{reqs_str}'"
31
+ system "gem unpack #{gem}"
32
+ Dir.chdir(wd)
33
+ gemspecs = Dir.glob("#{d}/#{gem}*/*.gemspec")
34
+
35
+ if gemspecs.length != 1
36
+ return nil
37
+ end
38
+ return load_gemspec(gemspecs[0])
39
+ end
40
+ end
41
+
42
+ @@vcs_url_patterns = [
43
+ /(https?\:\/\/github\.com\/[^\/]+\/[^\/]+)(?:\/.*)?/,
44
+ /(https?\:\/\/bitbucket\.org\/[^\/]+\/[^\/]+)(?:\/.*)?/,
45
+ ]
46
+
47
+ # Accepts gem name. Returns source code URI, nil if none present
48
+ def self.fetch_source_url(gem)
49
+ uri = URI("https://rubygems.org/api/v1/gems/#{gem}.json")
50
+ resp = Net::HTTP.get(uri)
51
+ j = JSON.parse(resp)
52
+
53
+ if j['source_code_uri'] != nil
54
+ return j['source_code_uri']
55
+ end
56
+
57
+ @@vcs_url_patterns.each do |reg|
58
+ match = reg.match(j['homepage_uri'])
59
+ if match != nil && match.length >= 2
60
+ return match[1]
61
+ end
62
+ end
63
+
64
+ return nil
65
+ end
66
+
67
+ def self.metadata(project_dir)
68
+ gemspecs = Dir.glob(File.join(project_dir, '*.gemspec'))
69
+ gemfile = File.join(project_dir, 'Gemfile')
70
+
71
+ if gemspecs.length > 1
72
+ raise "Found more than one .gemspec file: #{gemspecs}"
73
+ end
74
+
75
+ if gemspecs.length == 1
76
+ gemspec = RDep::load_gemspec(gemspecs[0])
77
+ {
78
+ name: gemspec.name,
79
+ version: gemspec.version,
80
+ dependencies: gemspec.dependencies.map {|d|
81
+ {
82
+ name: d.name,
83
+ requirements: d.requirements_list,
84
+ source_url: fetch_source_url(d.name),
85
+ }
86
+ },
87
+ }
88
+ elsif File.exists?(gemfile)
89
+ gemfile_info = RDep::load_gemfile(gemfile)
90
+ {
91
+ name: nil,
92
+ version: nil,
93
+ dependencies: gemfile_info.dependencies.map {|d|
94
+ {
95
+ name: d.name,
96
+ requirements: d.requirements_list,
97
+ source_url: fetch_source_url(d.name),
98
+ }
99
+ },
100
+ }
101
+ else
102
+ nil
103
+ end
104
+ end
105
+
106
+ def self.run(args)
107
+ metadata = RDep::metadata(args[0])
108
+ puts JSON.dump(metadata)
109
+ end
110
+ end
111
+
112
+ if __FILE__ == $0
113
+ RDep::run(ARGV)
114
+ end
metadata ADDED
@@ -0,0 +1,45 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rdep
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Beyang Liu
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-04-18 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: ''
14
+ email: beyang@sourcegraph.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - bin/rdep
20
+ - lib/rdep.rb
21
+ homepage: https://sourcegraph.com
22
+ licenses:
23
+ - Apache 2
24
+ metadata: {}
25
+ post_install_message:
26
+ rdoc_options: []
27
+ require_paths:
28
+ - lib
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ required_rubygems_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ requirements: []
40
+ rubyforge_project:
41
+ rubygems_version: 2.2.2
42
+ signing_key:
43
+ specification_version: 4
44
+ summary: ''
45
+ test_files: []