ghs 0.1.5 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/bin/ghs +33 -20
  2. metadata +19 -3
data/bin/ghs CHANGED
@@ -1,37 +1,51 @@
1
1
  #!/usr/bin/env ruby
2
2
  require 'rubygems'
3
- require "yaml"
3
+ require "json"
4
4
  require 'trollop'
5
5
  require 'open-uri'
6
+ require 'contracts'
6
7
 
8
+ def Contract.failure_callback(data)
9
+ puts "Oops: expected #{data[:contract]}, got #{data[:arg]} in #{data[:method].name}. Exiting."
10
+ exit
11
+ end
12
+
13
+ include Contracts
14
+ use_contracts self
15
+
16
+ Repo = Or[Hash, nil]
17
+
18
+ Contract String
7
19
  def find_user
8
20
  x = `git config github.user`
9
21
  x.chomp
10
22
  end
11
23
 
12
- def get_repo(user, repo)
13
- begin
14
- YAML.load(open("http://github.com/api/v2/yaml/repos/show/#{user}/#{repo}").read)
15
- rescue
24
+ Contract String, Repo
25
+ def req(url)
26
+ JSON.parse(open("https://api.github.com#{url}").read)
27
+ rescue OpenURI::HTTPError => e
16
28
  nil
17
- end
18
29
  end
19
30
 
31
+ Contract String, String, Repo
32
+ def get_repo(user, repo)
33
+ req "/repos/#{user}/#{repo}"
34
+ end
35
+
36
+ Contract String, Repo
20
37
  def find_user_repo(repo)
21
38
  user = find_user
22
39
  return nil if user == ""
23
- repo_info = get_repo(user, repo)
24
- if repo_info
25
- repo_info["repository"][:url] = "git@github.com:#{user}/#{repo}"
26
- end
27
- repo_info
40
+ get_repo(user, repo)
28
41
  end
29
42
 
43
+ Contract String, Repo
30
44
  def find_generic_repo(repo)
31
- results = YAML.load(open("http://github.com/api/v2/yaml/repos/search/#{repo}").read)
45
+ results = req "/legacy/repos/search/#{repo}"
32
46
  Trollop::die "Couldn't find a url" if results["repositories"].empty?
33
47
  Trollop::die "Multiple repos found, not sure which one you wanted.\nTo let me make the choice, rerun with the --best flag" unless results["repositories"].size == 1 || OPTS[:best]
34
- user = results["repositories"][0][:username]
48
+ user = results["repositories"][0]["username"]
35
49
  get_repo(user, repo)
36
50
  end
37
51
 
@@ -39,7 +53,7 @@ OPTS = Trollop::options do
39
53
  banner <<-EOS
40
54
  Find the clone url for any repo on github, quickly.
41
55
  Usage: #{$0} [repo name]
42
- Use it to clone a repo: git clone `ghs [reponame]`
56
+ Use it to clone a repo: git clone `ghs [repo name]`
43
57
  EOS
44
58
  opt :best, "If multiple repos are found, choose the first one."
45
59
  end
@@ -47,15 +61,14 @@ end
47
61
  Trollop::die("no repo specified") if ARGV.empty?
48
62
  result = find_user_repo(ARGV[0]) || find_generic_repo(ARGV[0])
49
63
  Trollop::die "couldn't find a url." unless result
50
- result = result["repository"]
51
64
 
52
- STDERR.puts "
65
+ STDERR.puts %{
53
66
  ==
54
67
 
55
- Matched repository: #{result[:name]}
56
- Description: #{result[:description]}
68
+ Matched repository: #{result["name"]}
69
+ Description: #{result["description"]}
57
70
 
58
71
  ==
59
- "
72
+ }
60
73
 
61
- puts "#{result[:url]}.git"
74
+ puts result["ssh_url"]
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ghs
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 5
10
- version: 0.1.5
9
+ - 6
10
+ version: 0.1.6
11
11
  platform: ruby
12
12
  authors:
13
13
  - Aditya Bhargava
@@ -32,6 +32,22 @@ dependencies:
32
32
  version: "0"
33
33
  type: :runtime
34
34
  version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: contracts
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 17
44
+ segments:
45
+ - 0
46
+ - 0
47
+ - 7
48
+ version: 0.0.7
49
+ type: :runtime
50
+ version_requirements: *id002
35
51
  description: Find the clone url for repos on Github
36
52
  email: bluemangroupie@gmail.com
37
53
  executables: