github_cli 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. data/.travis.yml +3 -0
  2. data/CHANGELOG.md +7 -0
  3. data/Gemfile.lock +4 -4
  4. data/README.md +8 -1
  5. data/features/blob.feature +8 -0
  6. data/features/collaborator.feature +10 -0
  7. data/features/commit.feature +8 -0
  8. data/features/content.feature +9 -0
  9. data/features/gist.feature +15 -0
  10. data/features/pull_request.feature +14 -0
  11. data/features/search.feature +7 -30
  12. data/features/search_commands.feature +33 -0
  13. data/features/watching.feature +11 -0
  14. data/lib/github_cli/apis.rb +2 -0
  15. data/lib/github_cli/apis/content.rb +28 -0
  16. data/lib/github_cli/apis/search.rb +35 -0
  17. data/lib/github_cli/cli.rb +9 -5
  18. data/lib/github_cli/command.rb +2 -1
  19. data/lib/github_cli/commands.rb +2 -0
  20. data/lib/github_cli/commands/blobs.rb +0 -4
  21. data/lib/github_cli/commands/collaborators.rb +0 -8
  22. data/lib/github_cli/commands/commits.rb +0 -4
  23. data/lib/github_cli/commands/contents.rb +49 -0
  24. data/lib/github_cli/commands/downloads.rb +0 -8
  25. data/lib/github_cli/commands/emails.rb +0 -6
  26. data/lib/github_cli/commands/events.rb +0 -16
  27. data/lib/github_cli/commands/followers.rb +0 -10
  28. data/lib/github_cli/commands/forks.rb +0 -4
  29. data/lib/github_cli/commands/gists.rb +0 -18
  30. data/lib/github_cli/commands/hooks.rb +0 -10
  31. data/lib/github_cli/commands/issues.rb +0 -10
  32. data/lib/github_cli/commands/keys.rb +0 -10
  33. data/lib/github_cli/commands/labels.rb +0 -20
  34. data/lib/github_cli/commands/members.rb +0 -10
  35. data/lib/github_cli/commands/milestones.rb +0 -10
  36. data/lib/github_cli/commands/organizations.rb +0 -6
  37. data/lib/github_cli/commands/pull_requests.rb +0 -16
  38. data/lib/github_cli/commands/references.rb +0 -10
  39. data/lib/github_cli/commands/repositories.rb +0 -18
  40. data/lib/github_cli/commands/search.rb +39 -0
  41. data/lib/github_cli/commands/tags.rb +0 -4
  42. data/lib/github_cli/commands/teams.rb +0 -26
  43. data/lib/github_cli/commands/trees.rb +0 -4
  44. data/lib/github_cli/commands/users.rb +0 -4
  45. data/lib/github_cli/commands/watching.rb +0 -10
  46. data/lib/github_cli/subcommands.rb +6 -0
  47. data/lib/github_cli/version.rb +1 -1
  48. metadata +32 -12
data/.travis.yml CHANGED
@@ -7,3 +7,6 @@ notifications:
7
7
  rvm:
8
8
  - 1.9.2
9
9
  - 1.9.3
10
+ - rbx-19mode
11
+ - jruby
12
+ - ruby-head
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ 0.4.1 (June 28, 2012)
2
+
3
+ * Add search api commands.
4
+ * Add repo content api commands.
5
+ * Remove params from all commands up to command.
6
+ * Add more feature tests for the command interface.
7
+
1
8
  0.4.0 (June 15, 2012)
2
9
 
3
10
  * Add user api commands.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- github_cli (0.4.0)
4
+ github_cli (0.4.1)
5
5
  github_api (~> 0.6)
6
6
  thor
7
7
 
@@ -27,12 +27,12 @@ GEM
27
27
  ffi (1.0.11)
28
28
  gherkin (2.11.0)
29
29
  json (>= 1.4.6)
30
- github_api (0.6.0)
31
- faraday (~> 0.8.0)
30
+ github_api (0.6.1)
31
+ faraday (~> 0.8.1)
32
32
  hashie (~> 1.2.0)
33
33
  multi_json (~> 1.3)
34
34
  nokogiri (~> 1.5.2)
35
- oauth2 (~> 0.7)
35
+ oauth2
36
36
  hashie (1.2.0)
37
37
  httpauth (0.1)
38
38
  json (1.7.3)
data/README.md CHANGED
@@ -1,8 +1,9 @@
1
1
  # GithubCLI<img src="https://github.com/peter-murach/github_cli/raw/master/ghc_logo.png" align="right" />
2
- [![Build Status](https://secure.travis-ci.org/peter-murach/github_cli.png?branch=master)][travis] [![Dependency Status](https://gemnasium.com/peter-murach/github_cli.png?travis)][gemnasium]
2
+ [![Build Status](https://secure.travis-ci.org/peter-murach/github_cli.png?branch=master)][travis] [![Dependency Status](https://gemnasium.com/peter-murach/github_cli.png?travis)][gemnasium] [![Code Climate](https://codeclimate.com/badge.png)][codeclimate]
3
3
 
4
4
  [travis]: http://travis-ci.org/peter-murach/github_cli
5
5
  [gemnasium]: https://gemnasium.com/peter-murach/github_cli
6
+ [codeclimate]: https://codeclimate.com/github/peter-murach/github_cli
6
7
 
7
8
  CLI-based access to GitHub API v3 that works hand-in-hand with 'github_api' gem.
8
9
 
@@ -114,6 +115,12 @@ Interact with authorizations:
114
115
  $ ghc auth
115
116
  ```
116
117
 
118
+ Interact with search:
119
+
120
+ ```shell
121
+ $ ghc search
122
+ ```
123
+
117
124
  ### Output Format
118
125
 
119
126
  The API responses can be formatted as `csv`, `json`, `pretty`, `table`.
@@ -0,0 +1,8 @@
1
+ Feature: ghc blob
2
+
3
+ Scenario: Available commands
4
+
5
+ When I run `ghc blob`
6
+ Then the exit status should be 0
7
+ And the output should contain "ghc blob get"
8
+ And the output should contain "ghc blob create"
@@ -0,0 +1,10 @@
1
+ Feature: ghc collab
2
+
3
+ Scenario: Available commands
4
+
5
+ When I run `ghc collab`
6
+ Then the exit status should be 0
7
+ And the output should contain "ghc collab list"
8
+ And the output should contain "ghc collab add"
9
+ And the output should contain "ghc collab collab"
10
+ And the output should contain "ghc collab remove"
@@ -0,0 +1,8 @@
1
+ Feature: ghc commit
2
+
3
+ Scenario: Available commands
4
+
5
+ When I run `ghc commit`
6
+ Then the exit status should be 0
7
+ And the output should contain "ghc commit get"
8
+ And the output should contain "ghc commit create"
@@ -0,0 +1,9 @@
1
+ Feature: ghc content
2
+
3
+ Scenario: Available commands
4
+
5
+ When I run `ghc content`
6
+ Then the exit status should be 0
7
+ And the output should contain "ghc content get"
8
+ And the output should contain "ghc content readme"
9
+ And the output should contain "ghc content archive"
@@ -0,0 +1,15 @@
1
+ Feature: ghc gist
2
+
3
+ Scenario: Available commands
4
+
5
+ When I run `ghc gist`
6
+ Then the exit status should be 0
7
+ And the output should contain "ghc gist create"
8
+ And the output should contain "ghc gist delete"
9
+ And the output should contain "ghc gist edit"
10
+ And the output should contain "ghc gist get"
11
+ And the output should contain "ghc gist fork"
12
+ And the output should contain "ghc gist list"
13
+ And the output should contain "ghc gist star"
14
+ And the output should contain "ghc gist starred"
15
+ And the output should contain "ghc gist unstar"
@@ -0,0 +1,14 @@
1
+ Feature: ghc pull request
2
+
3
+ Scenario: Available commands
4
+
5
+ When I run `ghc pull`
6
+ Then the exit status should be 0
7
+ And the output should contain "ghc pull commits"
8
+ And the output should contain "ghc pull create"
9
+ And the output should contain "ghc pull files"
10
+ And the output should contain "ghc pull get"
11
+ And the output should contain "ghc pull list"
12
+ And the output should contain "ghc pull merge"
13
+ And the output should contain "ghc pull merged"
14
+ And the output should contain "ghc pull update"
@@ -1,33 +1,10 @@
1
- @search
2
- Feature: Github API Commands Search
1
+ Feature: ghc search
3
2
 
4
- As a developer who wants to search for commands that leverage GitHub APIs
5
- When I use interface provided by GHC
6
- I have ability to list commands by search criteria
3
+ Scenario: Available commands
7
4
 
8
- Scenario: Listing
9
- When I run `ghc list`
5
+ When I run `ghc search`
10
6
  Then the exit status should be 0
11
- And the output should contain:
12
- """
13
- Github CLI client
14
-
15
- Commands:
16
- """
17
-
18
- Scenario Outline: Pattern Matching
19
- When I run `ghc list <pattern>`
20
- Then the output should contain "repo"
21
- And the output should not contain "issue"
22
-
23
- Examples:
24
- | pattern |
25
- | re |
26
- | repo |
27
-
28
- Scenario: No Match
29
- When I run `ghc list bla`
30
- Then the output should contain:
31
- """
32
- ghc: 'bla' is not a ghc command. See 'ghc --help'.
33
- """
7
+ And the output should contain "ghc search email"
8
+ And the output should contain "ghc search issue"
9
+ And the output should contain "ghc search repo"
10
+ And the output should contain "ghc search user"
@@ -0,0 +1,33 @@
1
+ @search
2
+ Feature: Github API Commands Search
3
+
4
+ As a developer who wants to search for commands that leverage GitHub APIs
5
+ When I use interface provided by GHC
6
+ I have ability to list commands by search criteria
7
+
8
+ Scenario: Listing
9
+ When I run `ghc list`
10
+ Then the exit status should be 0
11
+ And the output should contain:
12
+ """
13
+ Github CLI client
14
+
15
+ Commands:
16
+ """
17
+
18
+ Scenario Outline: Pattern Matching
19
+ When I run `ghc list <pattern>`
20
+ Then the output should contain "repo"
21
+ And the output should not contain "issue"
22
+
23
+ Examples:
24
+ | pattern |
25
+ | re |
26
+ | repo |
27
+
28
+ Scenario: No Match
29
+ When I run `ghc list bla`
30
+ Then the output should contain:
31
+ """
32
+ ghc: 'bla' is not a ghc command. See 'ghc --help'.
33
+ """
@@ -0,0 +1,11 @@
1
+ Feature: ghc watching
2
+
3
+ Scenario: Available commands
4
+
5
+ When I run `ghc watch`
6
+ Then the exit status should be 0
7
+ And the output should contain "ghc watch start"
8
+ And the output should contain "ghc watch stop"
9
+ And the output should contain "ghc watch watched"
10
+ And the output should contain "ghc watch watchers"
11
+ And the output should contain "ghc watch watching"
@@ -13,6 +13,7 @@ end
13
13
  blob
14
14
  collaborator
15
15
  commit
16
+ content
16
17
  download
17
18
  email
18
19
  follower
@@ -28,6 +29,7 @@ end
28
29
  pull_request
29
30
  reference
30
31
  repository
32
+ search
31
33
  tag
32
34
  team
33
35
  tree
@@ -0,0 +1,28 @@
1
+ # encoding: utf-8
2
+
3
+ module GithubCLI
4
+ class Content < API
5
+
6
+ class << self
7
+
8
+ def get(user, repo, path, params, format)
9
+ output format do
10
+ github_api.repos.contents.get user, repo, path, params
11
+ end
12
+ end
13
+
14
+ def readme(user, repo, params, format)
15
+ output format do
16
+ github_api.repos.contents.readme user, repo, params
17
+ end
18
+ end
19
+
20
+ def archive(user, repo, params, format)
21
+ output format do
22
+ github_api.repos.contents.archive user, repo, params
23
+ end
24
+ end
25
+ end
26
+
27
+ end # Content
28
+ end # GithubCLI
@@ -0,0 +1,35 @@
1
+ # encoding: utf-8
2
+
3
+ module GithubCLI
4
+ class Search < API
5
+
6
+ class << self
7
+
8
+ def issue(owner, repo, keyword, params, format)
9
+ output format do
10
+ github_api.search.issues params.update(:owner => owner, :repo => repo, :keyword => keyword)
11
+ end
12
+ end
13
+
14
+ def repo(params, format)
15
+ output format do
16
+ github_api.search.repos params
17
+ end
18
+ end
19
+
20
+ def user(params, format)
21
+ output format do
22
+ github_api.search.users params
23
+ end
24
+ end
25
+
26
+ def email(params, format)
27
+ output format do
28
+ github_api.search.email params
29
+ end
30
+ end
31
+
32
+ end
33
+
34
+ end # Search
35
+ end # GithubCLI
@@ -13,11 +13,15 @@ module GithubCLI
13
13
  options["no-pager"] ? Pager.disable : Pager.enable
14
14
  end
15
15
 
16
- map "repository" => :repo,
17
- "reference" => :ref,
18
- "is" => :issue,
19
- "--version" => :version,
20
- "ls" => :list
16
+ ALIASES = {
17
+ 'repository' => 'repo',
18
+ 'reference' => 'ref',
19
+ 'is' => :issue,
20
+ '--version' => 'version',
21
+ 'ls' => 'list'
22
+ }
23
+
24
+ map ALIASES
21
25
 
22
26
  class_option :config, :type => :string,
23
27
  :desc => "Configuration file.", :banner => "Config file name",
@@ -6,13 +6,14 @@ module GithubCLI
6
6
 
7
7
  API_CLASSES = %w(
8
8
  c_l_i
9
- repo download key fork hook watch collab
9
+ repo download key fork hook watch collab content
10
10
  issue label milestone
11
11
  tag tree blob reference commit
12
12
  pull
13
13
  user email follower
14
14
  org member team
15
15
  event
16
+ search
16
17
  )
17
18
 
18
19
  HELP_COMMAND = 'help'
@@ -6,6 +6,7 @@ module GithubCLI
6
6
  autoload :Blobs, 'github_cli/commands/blobs'
7
7
  autoload :Collaborators, 'github_cli/commands/collaborators'
8
8
  autoload :Commits, 'github_cli/commands/commits'
9
+ autoload :Contents, 'github_cli/commands/contents'
9
10
  autoload :Downloads, 'github_cli/commands/downloads'
10
11
  autoload :Emails, 'github_cli/commands/emails'
11
12
  autoload :Events, 'github_cli/commands/events'
@@ -22,6 +23,7 @@ module GithubCLI
22
23
  autoload :PullRequests, 'github_cli/commands/pull_requests'
23
24
  autoload :References, 'github_cli/commands/references'
24
25
  autoload :Repositories, 'github_cli/commands/repositories'
26
+ autoload :Search, 'github_cli/commands/search'
25
27
  autoload :Tags, 'github_cli/commands/tags'
26
28
  autoload :Teams, 'github_cli/commands/teams'
27
29
  autoload :Trees, 'github_cli/commands/trees'
@@ -6,8 +6,6 @@ module GithubCLI
6
6
  namespace :blob
7
7
 
8
8
  desc 'get <user> <repo> <sha>', 'Get a Blob'
9
- method_option :params, :type => :hash, :default => {},
10
- :desc => 'Additonal request parameters e.i per_page:100'
11
9
  def get(user, repo, sha)
12
10
  Blob.get user, repo, sha, options[:params], options[:format]
13
11
  end
@@ -19,8 +17,6 @@ module GithubCLI
19
17
  content - String of content \n
20
18
  encoding - String containing encoding utf-8 or base64
21
19
  DESC
22
- method_option :params, :type => :hash, :default => {},
23
- :desc => 'Additonal request parameters e.i per_page:100'
24
20
  def create(user, repo)
25
21
  Blob.create user, repo, options[:params], options[:format]
26
22
  end
@@ -6,29 +6,21 @@ module GithubCLI
6
6
  namespace :collab
7
7
 
8
8
  desc 'list <user> <repo>', 'Lists collaborators'
9
- method_option :params, :type => :hash, :default => {},
10
- :desc => 'Additional request parameters e.i per_page:100'
11
9
  def list(user, repo)
12
10
  Collaborator.all user, repo, options[:params], options[:format]
13
11
  end
14
12
 
15
13
  desc 'add <user> <repo> <collab>', 'Add a collaborator'
16
- method_option :params, :type => :hash, :default => {},
17
- :desc => 'Additional request parameters e.i per_page:100'
18
14
  def add(user, repo, collab)
19
15
  Collaborator.add user, repo, collab, options[:params], options[:format]
20
16
  end
21
17
 
22
18
  desc 'collab <user> <repo> <collab>', 'Checks if user is a collaborator on a given repo'
23
- method_option :params, :type => :hash, :default => {},
24
- :desc => 'Additional request parameters e.i per_page:100'
25
19
  def collab(user, repo, collab)
26
20
  Collaborator.collaborator? user, repo, collab, options[:params], options[:format]
27
21
  end
28
22
 
29
23
  desc 'remove <user> <repo> <id>', 'Remove a collaborator'
30
- method_option :params, :type => :hash, :default => {},
31
- :desc => 'Additonal request parameters e.i per_page:100'
32
24
  def remove(user, repo, collab)
33
25
  Collaborator.remove user, repo, collab, options[:params]. options[:format]
34
26
  end
@@ -6,8 +6,6 @@ module GithubCLI
6
6
  namespace :commit
7
7
 
8
8
  desc 'get <user> <repo> <sha>', 'Get a Commit'
9
- method_option :params, :type => :hash, :default => {},
10
- :desc => 'Additonal request parameters e.i per_page:100'
11
9
  def get(user, repo, sha)
12
10
  Commit.get user, repo, sha, options[:params], options[:format]
13
11
  end
@@ -31,8 +29,6 @@ module GithubCLI
31
29
  committer.email - String of the email of the committer of the commit \n
32
30
  committer.date:: Timestamp of when this commit was committed
33
31
  DESC
34
- method_option :params, :type => :hash, :default => {},
35
- :desc => 'Additonal request parameters e.i per_page:100'
36
32
  def create(user, repo)
37
33
  Commit.create user, repo, options[:params], options[:format]
38
34
  end
@@ -0,0 +1,49 @@
1
+ # encoding: utf-8
2
+
3
+ module GithubCLI
4
+ class Commands::Contents < Command
5
+
6
+ namespace :content
7
+
8
+ desc 'get <user> <repo> <path>', 'Get repository <path> contents'
9
+ long_desc <<-DESC
10
+ This method returns the contents of any file or directory in a repository.
11
+
12
+ Parameters
13
+
14
+ ref - Optional string - The String name of the Commit/Branch/Tag. Defaults to master.
15
+ DESC
16
+ def get(user, repo, path)
17
+ Content.get user, repo, path, options[:params], options[:format]
18
+ end
19
+
20
+ desc 'readme <user> <repo>', 'Get the README'
21
+ long_desc <<-DESC
22
+ Parameters
23
+
24
+ ref - Optional string - The String name of the Commit/Branch/Tag. Defaults to master.
25
+ DESC
26
+ def readme(user, repo)
27
+ Content.readme user, repo, options[:params], options[:format]
28
+ end
29
+
30
+ desc 'archive <user> <repo>', 'Get archive link'
31
+ long_desc <<-DESC
32
+ This method will return a 302 to a URL to download a tarball or zipball
33
+ archive for a repository. Please make sure your HTTP framework is configured
34
+ to follow redirects or you will need to use the Location header to make
35
+ a second GET request.\n
36
+
37
+ Note: For private repositories, these links are temporary and expire quickly.
38
+
39
+ Parameters
40
+
41
+ archive_format - Required string - either tarball or zipball\n
42
+ ref - Optional string - valid Git reference, defaults to master\n
43
+ DESC
44
+ def archive(user, repo)
45
+ Content.archive user, repo, options[:params], options[:format]
46
+ end
47
+
48
+ end # Contents
49
+ end # GithubCLI