github_api 0.8.1 → 0.8.2

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 (99) hide show
  1. data/README.md +2 -1
  2. data/features/README.rdoc +4 -4
  3. data/features/cassettes/gitignore/get.yml +60 -0
  4. data/features/cassettes/gitignore/get_raw.yml +224 -0
  5. data/features/cassettes/gitignore/list.yml +67 -0
  6. data/features/cassettes/issues/comments/get.yml +71 -0
  7. data/features/cassettes/issues/comments/list_issue.yml +82 -0
  8. data/features/cassettes/issues/comments/list_repo.yml +266 -0
  9. data/features/cassettes/pull_requests/comments/get.yml +159 -0
  10. data/features/cassettes/pull_requests/comments/list_pull.yml +54 -0
  11. data/features/cassettes/pull_requests/comments/list_repo.yml +54 -0
  12. data/features/cassettes/repos/list_repos.yml +129 -0
  13. data/features/cassettes/users/all.yml +256 -0
  14. data/features/gitignore.feature +37 -0
  15. data/features/issues/comments.feature +37 -0
  16. data/features/pull_requests/comments.feature +27 -0
  17. data/features/repos.feature +8 -0
  18. data/features/step_definitions/common_steps.rb +2 -0
  19. data/features/users.feature +8 -0
  20. data/lib/github_api.rb +1 -0
  21. data/lib/github_api/client.rb +5 -0
  22. data/lib/github_api/git_data/tags.rb +4 -4
  23. data/lib/github_api/gitignore.rb +56 -0
  24. data/lib/github_api/issues/comments.rb +23 -9
  25. data/lib/github_api/pull_requests/comments.rb +24 -6
  26. data/lib/github_api/repos.rb +14 -1
  27. data/lib/github_api/repos/keys.rb +4 -4
  28. data/lib/github_api/users.rb +21 -0
  29. data/lib/github_api/users/keys.rb +6 -6
  30. data/lib/github_api/version.rb +1 -1
  31. data/spec/fixtures/gitignore/template.json +4 -0
  32. data/spec/fixtures/gitignore/template_raw +1 -0
  33. data/spec/fixtures/gitignore/templates.json +9 -0
  34. data/spec/fixtures/users/users.json +9 -0
  35. data/spec/github/activity/notifications/mark_spec.rb +1 -1
  36. data/spec/github/activity/starring/starring_spec.rb +2 -2
  37. data/spec/github/activity/watching/watching_spec.rb +2 -2
  38. data/spec/github/git_data/commits/create_spec.rb +75 -0
  39. data/spec/github/git_data/commits/get_spec.rb +50 -0
  40. data/spec/github/git_data/commits_spec.rb +1 -126
  41. data/spec/github/git_data/references/create_spec.rb +67 -0
  42. data/spec/github/git_data/references/delete_spec.rb +38 -0
  43. data/spec/github/git_data/references/get_spec.rb +54 -0
  44. data/spec/github/git_data/references/list_spec.rb +77 -0
  45. data/spec/github/git_data/references/update_spec.rb +62 -0
  46. data/spec/github/git_data/references_spec.rb +1 -298
  47. data/spec/github/git_data/tags/create_spec.rb +61 -0
  48. data/spec/github/git_data/tags/get_spec.rb +48 -0
  49. data/spec/github/git_data/tags_spec.rb +0 -108
  50. data/spec/github/git_data/trees/create_spec.rb +62 -0
  51. data/spec/github/git_data/trees/get_spec.rb +69 -0
  52. data/spec/github/git_data/trees_spec.rb +0 -133
  53. data/spec/github/gitignore/get_spec.rb +54 -0
  54. data/spec/github/gitignore/list_spec.rb +42 -0
  55. data/spec/github/issues/comments_spec.rb +46 -11
  56. data/spec/github/pull_requests/comments_spec.rb +46 -11
  57. data/spec/github/pull_requests_spec.rb +3 -3
  58. data/spec/github/repos/contents/archive_spec.rb +26 -0
  59. data/spec/github/repos/contents/get_spec.rb +30 -0
  60. data/spec/github/repos/contents/readme_spec.rb +30 -0
  61. data/spec/github/repos/hooks/create_spec.rb +68 -0
  62. data/spec/github/repos/hooks/delete_spec.rb +40 -0
  63. data/spec/github/repos/hooks/edit_spec.rb +77 -0
  64. data/spec/github/repos/hooks/get_spec.rb +49 -0
  65. data/spec/github/repos/hooks/list_spec.rb +54 -0
  66. data/spec/github/repos/hooks/test_spec.rb +40 -0
  67. data/spec/github/repos/hooks_spec.rb +2 -337
  68. data/spec/github/repos/keys/create_spec.rb +50 -0
  69. data/spec/github/repos/keys/delete_spec.rb +40 -0
  70. data/spec/github/repos/keys/edit_spec.rb +40 -0
  71. data/spec/github/repos/keys/get_spec.rb +43 -0
  72. data/spec/github/repos/keys/list_spec.rb +52 -0
  73. data/spec/github/repos/keys_spec.rb +2 -213
  74. data/spec/github/repos/list_spec.rb +19 -3
  75. data/spec/github/repos/merging/merge_spec.rb +58 -0
  76. data/spec/github/repos/pub_sub_hubbub_spec.rb +16 -14
  77. data/spec/github/repos/statuses/create_spec.rb +54 -0
  78. data/spec/github/repos/statuses/list_spec.rb +53 -0
  79. data/spec/github/repos/statuses_spec.rb +1 -114
  80. data/spec/github/users/emails/add_spec.rb +33 -0
  81. data/spec/github/users/emails/delete_spec.rb +33 -0
  82. data/spec/github/users/emails/list_spec.rb +52 -0
  83. data/spec/github/users/followers/list_spec.rb +68 -0
  84. data/spec/github/users/followers_spec.rb +0 -70
  85. data/spec/github/users/get_spec.rb +66 -0
  86. data/spec/github/users/keys/create_spec.rb +51 -0
  87. data/spec/github/users/keys/delete_spec.rb +37 -0
  88. data/spec/github/users/keys/get_spec.rb +50 -0
  89. data/spec/github/users/keys/list_spec.rb +50 -0
  90. data/spec/github/users/keys/update_spec.rb +56 -0
  91. data/spec/github/users/list_spec.rb +45 -0
  92. data/spec/github/users/update_spec.rb +56 -0
  93. metadata +96 -43
  94. data/spec/github/repos/contents_spec.rb +0 -65
  95. data/spec/github/repos/merging_spec.rb +0 -71
  96. data/spec/github/repos/starring_spec.rb +0 -4
  97. data/spec/github/users/emails_spec.rb +0 -110
  98. data/spec/github/users/keys_spec.rb +0 -256
  99. data/spec/github/users_spec.rb +0 -128
@@ -0,0 +1,37 @@
1
+ Feature: Markdown API
2
+
3
+ Background:
4
+ Given I have "Github::Gitignore" instance
5
+
6
+ Scenario: List available templates
7
+
8
+ Given I want to list resources
9
+ When I make request within a cassette named "gitignore/list"
10
+ Then the response status should be 200
11
+ And the response type should be JSON
12
+ And the response should have 76 items
13
+ And the response should contain Ruby
14
+ And the response should contain Rails
15
+
16
+ Scenario: Get a single template
17
+
18
+ Given I want to get resource with the following params:
19
+ | template_name |
20
+ | Ruby |
21
+ When I make request within a cassette named "gitignore/get"
22
+ Then the response status should be 200
23
+ And the response type should be JSON
24
+ And the response should have 2 items
25
+
26
+ Scenario: Get a raw contents
27
+
28
+ Given I want to get resource with the following params:
29
+ | template_name |
30
+ | Ruby |
31
+ And I pass the following request options:
32
+ | mime |
33
+ | application/vnd.github.raw |
34
+ When I make request within a cassette named "gitignore/get_raw"
35
+ Then the response status should be 200
36
+ And the response type should be RAW
37
+ And the response should contain InstalledFiles
@@ -0,0 +1,37 @@
1
+ Feature: Issues Comments API
2
+
3
+ Background:
4
+ Given I have "Github::Issues::Comments" instance
5
+
6
+ Scenario: List in a repository
7
+
8
+ Given I want to list resources with the following params:
9
+ | user | repo |
10
+ | peter-murach | github |
11
+ When I make request within a cassette named "issues/comments/list_repo"
12
+ Then the response status should be 200
13
+ And the response type should be JSON
14
+ And the response should not be empty
15
+
16
+ Scenario: List on an issue
17
+
18
+ Given I want to list resources with the following params:
19
+ | user | repo |
20
+ | peter-murach | github |
21
+ And I pass the following request options:
22
+ | issue_id |
23
+ | 61 |
24
+ When I make request within a cassette named "issues/comments/list_issue"
25
+ Then the response status should be 200
26
+ And the response type should be JSON
27
+ And the response should not be empty
28
+
29
+ Scenario: Get a single comment
30
+
31
+ Given I want to get resource with the following params:
32
+ | user | repo | comment_id |
33
+ | peter-murach | github | 10321836 |
34
+ When I make request within a cassette named "issues/comments/get"
35
+ Then the response status should be 200
36
+ And the response type should be JSON
37
+ And the response should not be empty
@@ -0,0 +1,27 @@
1
+ Feature: Pull Requests Comments API
2
+
3
+ Background:
4
+ Given I have "Github::PullRequests::Comments" instance
5
+
6
+ Scenario: List in a repository
7
+
8
+ Given I want to list resources with the following params:
9
+ | user | repo |
10
+ | peter-murach | github |
11
+ When I make request within a cassette named "pull_requests/comments/list_repo"
12
+ Then the response status should be 200
13
+ And the response type should be JSON
14
+ And the response should have 0 items
15
+
16
+ Scenario: List on a pull request
17
+
18
+ Given I want to list resources with the following params:
19
+ | user | repo |
20
+ | peter-murach | github |
21
+ And I pass the following request options:
22
+ | request_id |
23
+ | 62 |
24
+ When I make request within a cassette named "pull_requests/comments/list_pull"
25
+ Then the response status should be 200
26
+ And the response type should be JSON
27
+ And the response should have 0 items
@@ -44,6 +44,14 @@ Feature: Repositories API
44
44
  And the response type should be JSON
45
45
  And the response should not be empty
46
46
 
47
+ Scenario: All repositories
48
+
49
+ Given I want to list resources
50
+ When I make request within a cassette named "repos/list_repos"
51
+ Then the response status should be 200
52
+ And the response type should be JSON
53
+ And the response should not be empty
54
+
47
55
  Scenario: Get a repository
48
56
 
49
57
  Given I want to get resource with the following params:
@@ -42,6 +42,8 @@ Then /^the response type should be (.*)$/ do |type|
42
42
  @response.content_type.should =~ /application\/json/
43
43
  when 'html'
44
44
  @response.content_type.should =~ /text\/html/
45
+ when 'raw'
46
+ @response.content_type.should =~ /raw/
45
47
  end
46
48
  end
47
49
 
@@ -3,6 +3,14 @@ Feature: Users API
3
3
  Background:
4
4
  Given I have "Github::Users" instance
5
5
 
6
+ Scenario: List all users
7
+
8
+ Given I want to list resources
9
+ When I make request within a cassette named "users/all"
10
+ Then the response status should be 200
11
+ And the response type should be JSON
12
+ And the response should not be empty
13
+
6
14
  Scenario: Get authenticated user
7
15
 
8
16
  Given I want to get resource
data/lib/github_api.rb CHANGED
@@ -71,6 +71,7 @@ module Github
71
71
  :Issues => 'issues',
72
72
  :Gists => 'gists',
73
73
  :GitData => 'git_data',
74
+ :Gitignore => 'gitignore',
74
75
  :Orgs => 'orgs',
75
76
  :PullRequests => 'pull_requests',
76
77
  :Users => 'users',
@@ -18,6 +18,11 @@ module Github
18
18
  @gists ||= ApiFactory.new 'Gists', options
19
19
  end
20
20
 
21
+ def gitignore(options = {})
22
+ @gitignore ||= ApiFactory.new 'Gitignore', options
23
+ end
24
+ alias :git_ignore :gitignore
25
+
21
26
  # The Git Database API gives you access to read and write raw Git objects
22
27
  # to your Git database on GitHub and to list and update your references
23
28
  # (branch heads and tags).
@@ -60,12 +60,12 @@ module Github
60
60
  # = Examples
61
61
  # github = Github.new
62
62
  # github.git_data.tags.create 'user-name', 'repo-name',
63
- # "tag" => "v0.0.1",
63
+ # "tag" => "v0.0.1",
64
64
  # "message" => "initial version\n",
65
- # "type": "commit",
66
- # "object": "c3d0be41ecbe669545ee3e94d31ed9a4bc91ee3c",
65
+ # "type" => "commit",
66
+ # "object" => "c3d0be41ecbe669545ee3e94d31ed9a4bc91ee3c",
67
67
  # "tagger" => {
68
- # "name" => "Scott Chacon",
68
+ # "name" => "Scott Chacon",
69
69
  # "email" => "schacon@gmail.com",
70
70
  # "date" => "2011-06-17T14:53:3"
71
71
  # }
@@ -0,0 +1,56 @@
1
+ # encoding: utf-8
2
+
3
+ module Github
4
+
5
+ # When you create a new GitHub repository via the API, you can specify a
6
+ # .gitignore template to apply to the repository upon creation.
7
+ class Gitignore < API
8
+
9
+ # Creates new Gitignore API
10
+ def initialize(options = {})
11
+ super(options)
12
+ end
13
+
14
+ # List all templates available to pass as an option when creating a repository.
15
+ #
16
+ # = Examples
17
+ # github = Github.new
18
+ # github.gitignore.list
19
+ # github.gitignore.list { |template| ... }
20
+ #
21
+ def list(*args)
22
+ params = args.extract_options!
23
+ normalize! params
24
+
25
+ response = get_request("/gitignore/templates", params)
26
+ return response unless block_given?
27
+ response.each { |el| yield el }
28
+ end
29
+ alias :all :list
30
+
31
+ # Get a single template
32
+ #
33
+ # = Examples
34
+ # github = Github.new
35
+ # github.gitignore.get "template-name"
36
+ #
37
+ # Use the raw media type to get the raw contents.
38
+ #
39
+ # = Examples
40
+ # github = Github.new
41
+ # github.gitignore.get "template-name", mime: 'applicatin/vnd.github.raw'
42
+ #
43
+ def get(name, params={})
44
+ normalize! params
45
+ assert_presence_of name
46
+
47
+ if (mime_type = params.delete('mime'))
48
+ options = { :raw => true, :headers => {'Accept' => mime_type} }
49
+ end
50
+
51
+ get_request("/gitignore/templates/#{name}", params, options || {})
52
+ end
53
+ alias :find :get
54
+
55
+ end # Gitignore
56
+ end # Github
@@ -18,17 +18,33 @@ module Github
18
18
  #
19
19
  # = Examples
20
20
  # github = Github.new
21
- # github.issues.comments.all 'user-name', 'repo-name', 'issue-id'
22
- # github.issues.comments.all 'user-name', 'repo-name', 'issue-id' {|com| .. }
21
+ # github.issues.comments.all 'user-name', 'repo-name', issue_id: 'id'
22
+ # github.issues.comments.all 'user-name', 'repo-name', issue_id: 'id' {|com| .. }
23
23
  #
24
- def list(user_name, repo_name, issue_id, params={})
24
+ # List comments in a repository
25
+ #
26
+ # = Parameters
27
+ # * <tt>:sort</tt> - Optional string, <tt>created</tt> or <tt>updated</tt>
28
+ # * <tt>:direction</tt> - Optional string, <tt>asc</tt> or <tt>desc</tt>.
29
+ # Ignored with sort parameter.
30
+ # * <tt>:since</tt> - Optional string of a timestamp in ISO 8601
31
+ # format: YYYY-MM-DDTHH:MM:SSZ
32
+ #
33
+ # = Examples
34
+ # github = Github.new
35
+ # github.issues.comments.all 'user-name', 'repo-name'
36
+ # github.issues.comments.all 'user-name', 'repo-name' {|com| .. }
37
+ #
38
+ def list(user_name, repo_name, params={})
25
39
  set :user => user_name, :repo => repo_name
26
- assert_presence_of user, repo, issue_id
27
-
40
+ assert_presence_of user, repo
28
41
  normalize! params
29
- # _merge_mime_type(:issue_comment, params)
30
42
 
31
- response = get_request("/repos/#{user}/#{repo}/issues/#{issue_id}/comments", params)
43
+ response = if (issue_id = params.delete('issue_id'))
44
+ get_request("/repos/#{user}/#{repo}/issues/#{issue_id}/comments", params)
45
+ else
46
+ get_request("/repos/#{user}/#{repo}/issues/comments", params)
47
+ end
32
48
  return response unless block_given?
33
49
  response.each { |el| yield el }
34
50
  end
@@ -43,9 +59,7 @@ module Github
43
59
  def get(user_name, repo_name, comment_id, params={})
44
60
  set :user => user_name, :repo => repo_name
45
61
  assert_presence_of user, repo, comment_id
46
-
47
62
  normalize! params
48
- # _merge_mime_type(:issue_comment, params)
49
63
 
50
64
  get_request("/repos/#{user}/#{repo}/issues/comments/#{comment_id}", params)
51
65
  end
@@ -17,16 +17,34 @@ module Github
17
17
  #
18
18
  # = Examples
19
19
  # github = Github.new
20
- # github.pull_requests.comments.list 'user-name', 'repo-name', 'request-id'
20
+ # github.pull_requests.comments.list 'user-name', 'repo-name', request_id: 'id'
21
21
  #
22
- def list(user_name, repo_name, request_id, params={})
22
+ # List comments in a repository
23
+ #
24
+ # By default, Review Comments are ordered by ascending ID.
25
+ #
26
+ # = Parameters
27
+ #
28
+ # * <tt>:sort</tt> - Optional string, <tt>created</tt> or <tt>updated</tt>
29
+ # * <tt>:direction</tt> - Optional string, <tt>asc</tt> or <tt>desc</tt>.
30
+ # Ignored with sort parameter.
31
+ # * <tt>:since</tt> - Optional string of a timestamp in ISO 8601
32
+ # format: YYYY-MM-DDTHH:MM:SSZ
33
+ # = Examples
34
+ # github = Github.new
35
+ # github.pull_requests.comments.list 'user-name', 'repo-name'
36
+ # github.pull_requests.comments.list 'user-name', 'repo-name' { |comm| ... }
37
+ #
38
+ def list(user_name, repo_name, params={})
23
39
  set :user => user_name, :repo => repo_name
24
- assert_presence_of user, repo, request_id
25
-
40
+ assert_presence_of user, repo
26
41
  normalize! params
27
- # _merge_mime_type(:pull_comment, params)
28
42
 
29
- response = get_request("/repos/#{user}/#{repo}/pulls/#{request_id}/comments", params)
43
+ response = if (request_id = params.delete('request_id'))
44
+ get_request("/repos/#{user}/#{repo}/pulls/#{request_id}/comments", params)
45
+ else
46
+ get_request("/repos/#{user}/#{repo}/pulls/comments", params)
47
+ end
30
48
  return response unless block_given?
31
49
  response.each { |el| yield el }
32
50
  end
@@ -294,6 +294,17 @@ module Github
294
294
  # github.repos.list
295
295
  # github.repos.list { |repo| ... }
296
296
  #
297
+ # List all repositories
298
+ #
299
+ # This provides a dump of every repository, in the order that they were created.
300
+ # = Parameters
301
+ # * <tt>:since</tt> - the integer ID of the last Repository that you've seen.
302
+ #
303
+ # = Examples
304
+ # github = Github.new
305
+ # github.repos.list
306
+ # github.repos.list { |repo| ... }
307
+ #
297
308
  # List public repositories for the specified user.
298
309
  #
299
310
  # = Examples
@@ -317,9 +328,11 @@ module Github
317
328
  get_request("/users/#{user_name}/repos", params)
318
329
  elsif (org_name = params.delete("org"))
319
330
  get_request("/orgs/#{org_name}/repos", params)
320
- else
331
+ elsif authenticated?
321
332
  # For authenticated user
322
333
  get_request("/user/repos", params)
334
+ else
335
+ get_request("/repositories", params)
323
336
  end
324
337
  return response unless block_given?
325
338
  response.each { |el| yield el }
@@ -3,7 +3,7 @@
3
3
  module Github
4
4
  class Repos::Keys < API
5
5
 
6
- VALID_KEY_PARAM_NAMES = %w[ title key ].freeze
6
+ VALID_KEY_OPTIONS = %w[ title key ].freeze
7
7
 
8
8
  # List deploy keys
9
9
  #
@@ -54,8 +54,8 @@ module Github
54
54
  set :user => user_name, :repo => repo_name
55
55
  assert_presence_of user, repo
56
56
  normalize! params
57
- filter! VALID_KEY_PARAM_NAMES, params
58
- assert_required_keys(VALID_KEY_PARAM_NAMES, params)
57
+ filter! VALID_KEY_OPTIONS, params
58
+ assert_required_keys(VALID_KEY_OPTIONS, params)
59
59
 
60
60
  post_request("/repos/#{user}/#{repo}/keys", params)
61
61
  end
@@ -77,7 +77,7 @@ module Github
77
77
  assert_presence_of user, repo, key_id
78
78
 
79
79
  normalize! params
80
- filter! VALID_KEY_PARAM_NAMES, params
80
+ filter! VALID_KEY_OPTIONS, params
81
81
 
82
82
  patch_request("/repos/#{user}/#{repo}/keys/#{key_id}", params)
83
83
  end
@@ -40,6 +40,27 @@ module Github
40
40
  @keys ||= ApiFactory.new 'Users::Keys'
41
41
  end
42
42
 
43
+ # List all users.
44
+ #
45
+ # This provides a dump of every user, in the order that they signed up
46
+ # for GitHub.
47
+ #
48
+ # = Parameters
49
+ # * <tt>:since</tt> - The integer ID of the last User that you’ve seen.
50
+ #
51
+ # = Examples
52
+ # users = Github::Users.new
53
+ # users.list
54
+ #
55
+ def list(params={})
56
+ normalize! params
57
+
58
+ response = get_request("/users", params)
59
+ return response unless block_given?
60
+ response.each { |el| yield el }
61
+ end
62
+ alias :all :list
63
+
43
64
  # Get a single unauthenticated user
44
65
  #
45
66
  # = Examples
@@ -9,8 +9,8 @@ module Github
9
9
  #
10
10
  # = Examples
11
11
  # github = Github.new :oauth_token => '...'
12
- # github.users.followers.list
13
- # github.users.followers.list { |key| ... }
12
+ # github.users.keys.list
13
+ # github.users.keys.list { |key| ... }
14
14
  #
15
15
  def list(params={})
16
16
  normalize! params
@@ -24,7 +24,7 @@ module Github
24
24
  #
25
25
  # = Examples
26
26
  # github = Github.new :oauth_token => '...'
27
- # github.users.followers.get 'key-id'
27
+ # github.users.keys.get 'key-id'
28
28
  #
29
29
  def get(key_id, params={})
30
30
  assert_presence_of key_id
@@ -41,7 +41,7 @@ module Github
41
41
  #
42
42
  # = Examples
43
43
  # github = Github.new :oauth_token => '...'
44
- # github.users.followers.create "title" => "octocat@octomac",
44
+ # github.users.keys.create "title" => "octocat@octomac",
45
45
  # "key" => "ssh-rsa AAA..."
46
46
  #
47
47
  def create(params={})
@@ -58,7 +58,7 @@ module Github
58
58
  #
59
59
  # = Examples
60
60
  # github = Github.new :oauth_token => '...'
61
- # github.users.followers.update 'key-id', "title" => "octocat@octomac",
61
+ # github.users.keys.update 'key-id', "title" => "octocat@octomac",
62
62
  # "key" => "ssh-rsa AAA..."
63
63
  #
64
64
  def update(key_id, params={})
@@ -72,7 +72,7 @@ module Github
72
72
  #
73
73
  # = Examples
74
74
  # github = Github.new :oauth_token => '...'
75
- # github.users.followers.delete 'key-id'
75
+ # github.users.keys.delete 'key-id'
76
76
  #
77
77
  def delete(key_id, params={})
78
78
  assert_presence_of key_id