git_hub 0.2.10 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. data/README.rdoc +43 -7
  2. data/Rakefile +1 -0
  3. data/VERSION +1 -1
  4. data/bin/git_hub +1 -0
  5. data/git_hub.gemspec +36 -32
  6. data/lib/git_hub.rb +3 -5
  7. data/lib/git_hub/api.rb +8 -13
  8. data/lib/git_hub/base.rb +44 -42
  9. data/lib/git_hub/commit.rb +6 -4
  10. data/lib/git_hub/extensions.rb +25 -0
  11. data/lib/git_hub/repo.rb +21 -24
  12. data/lib/git_hub/user.rb +8 -6
  13. data/spec/git_hub/api_spec.rb +21 -0
  14. data/spec/git_hub/base_spec.rb +5 -5
  15. data/spec/git_hub/commit_spec.rb +2 -2
  16. data/spec/git_hub/extensions_spec.rb +55 -0
  17. data/spec/git_hub/repo_spec.rb +51 -40
  18. data/spec/git_hub/user_spec.rb +26 -20
  19. data/spec/spec_helper.rb +31 -46
  20. data/spec/stubs/{api_route_error.res → yaml/api_route_error.res} +0 -0
  21. data/spec/stubs/{commits → yaml/commits}/list/joe007/fine_repo/master.res +0 -0
  22. data/spec/stubs/{commits → yaml/commits}/list/joe007/fine_repo/master/README.res +0 -0
  23. data/spec/stubs/{commits → yaml/commits}/show/joe007/fine_repo/3a70f86293b719f193f778a8710b1f83f2f7bf38.res +0 -0
  24. data/spec/stubs/{commits → yaml/commits}/show/joe007/fine_repo/5e61f0687c40ca48214d09dc7ae2d0d0d8fbfeb8.res +0 -0
  25. data/spec/stubs/{commits → yaml/commits}/show/joe007/fine_repo/f7f5dddaa37deacc83f1f56876e2b135389d03ab.res +0 -0
  26. data/spec/stubs/{repos → yaml/repos}/create.1.res +0 -0
  27. data/spec/stubs/{repos → yaml/repos}/create.2.res +0 -0
  28. data/spec/stubs/{repos → yaml/repos}/create.3.res +0 -0
  29. data/spec/stubs/{repos → yaml/repos}/create.4.res +0 -0
  30. data/spec/stubs/{repos → yaml/repos}/delete/new_repo.1.res +0 -0
  31. data/spec/stubs/{repos → yaml/repos}/delete/new_repo.2.res +0 -0
  32. data/spec/stubs/{repos → yaml/repos}/delete/new_repo.res +0 -0
  33. data/spec/stubs/{repos → yaml/repos}/search/fine+repo.res +0 -0
  34. data/spec/stubs/{repos → yaml/repos}/search/joe+repo.res +0 -0
  35. data/spec/stubs/yaml/repos/show/invalid_github_user/err_repo.res +14 -0
  36. data/spec/stubs/{repos → yaml/repos}/show/joe007.res +0 -0
  37. data/spec/stubs/{repos → yaml/repos}/show/joe007/err_repo.res +0 -0
  38. data/spec/stubs/{repos → yaml/repos}/show/joe007/fine_repo.res +0 -0
  39. data/spec/stubs/{repos → yaml/repos}/show/joe007/fine_repo/branches.res +0 -0
  40. data/spec/stubs/{repos → yaml/repos}/show/joe007/fine_repo/tags.res +0 -0
  41. data/spec/stubs/{repos → yaml/repos}/show/joe007/new_repo.res +0 -0
  42. data/spec/stubs/{user → yaml/user}/follow/arvicco.res +0 -0
  43. data/spec/stubs/{user → yaml/user}/search/joe+007.res +0 -0
  44. data/spec/stubs/{user → yaml/user}/show/arvicco.res +0 -0
  45. data/spec/stubs/{user/show/joe_is_not_github_user.res → yaml/user/show/invalid_github_user.res} +7 -3
  46. data/spec/stubs/{user → yaml/user}/show/joe007.auth.res +0 -0
  47. data/spec/stubs/{user → yaml/user}/show/joe007.res +0 -0
  48. data/spec/stubs/{user → yaml/user}/show/joe007/followers.res +0 -0
  49. data/spec/stubs/{user → yaml/user}/show/joe007/following.empty.res +0 -0
  50. data/spec/stubs/{user → yaml/user}/show/joe007/following.res +0 -0
  51. metadata +36 -32
@@ -1,5 +1,4 @@
1
1
  require 'spec'
2
- require 'cgi'
3
2
  require 'fakeweb'
4
3
  require 'fakeweb_matcher'
5
4
  require File.expand_path(File.join(File.dirname(__FILE__), %w[.. lib git_hub]))
@@ -26,64 +25,41 @@ Spec::Runner.configure do |config|
26
25
  config.extend(SpecMacros)
27
26
  end
28
27
 
29
- module GitHubTest
28
+ module GitHubTest
30
29
 
31
30
  # Test related Constants:
32
- TEST_FAKE_WEB = false # turning this flag off switches on real-life github testing
31
+ TEST_FAKE_WEB = true # turning this flag on routes all Net calls to local stubs
33
32
 
34
- # Checks that given block does not raise any errors
35
- def use
36
- lambda {yield}.should_not raise_error
37
- end
33
+ API = GitHub::Api.instance
38
34
 
39
35
  # Extract response from file
40
- def response_from_file(file_path, uri_path='')
36
+ def response_from_file( file_path, uri_path = '' )
41
37
  filename = File.join(File.dirname(__FILE__), 'stubs', file_path + '.res')
42
38
  unless File.exists?(filename) && !File.directory?(filename)
43
- raise "No stub file #{filename}. To obtain it use:\n#{curl_string(uri_path, filename)}"
39
+ raise "No stub file #{filename}. To obtain it use:\n#{curl_string(filename, uri_path)}"
44
40
  end
45
41
  filename
46
42
  end
47
43
 
48
- def curl_string(uri_path, filename)
44
+ # Curl command to retrieve non-existent stub file
45
+ def curl_string( filename, uri_path )
49
46
  if api.authenticated?
50
47
  "curl -i -d \"login=#{api.auth['login']}&token=#{api.auth['token']}\" #{uri_path} > #{filename}"
51
48
  else
52
- "curl -i #{github_yaml}#{path} > #{filename}"
49
+ "curl -i #{uri_path} > #{filename}"
53
50
  end
54
51
  end
55
52
 
56
- # Stubs github server, with options:
57
- # :host:: Host name - default 'github.com'
58
- # :port:: Port - default 80
59
- def stub_server(options={})
60
- server = Net::HTTP.new(options[:host] ||'github.com', options[:port] || 80)
61
- Net::HTTP.stub!(:new).and_return(server)
62
- server
63
- end
64
-
65
- # Stubs http request, with options:
66
- # :path:: Request path - default '/api/v2/yaml/repos/create'
67
- # :get:: Indicates that request is get, otherwise post
68
- def stub_req(options={})
69
- path = options[:path] || '/api/v2/yaml/repos/create'
70
- options[:get] ? Net::HTTP::Get.new(path) : Net::HTTP::Post.new(path)
71
- end
72
-
73
- def stub_server_and_req(options = {})
74
- [stub_server(options), stub_req(options)]
75
- end
76
-
77
53
  # Converts path to uri, registers it with FakeWeb with stub file at stubs/(http)/path as a response
78
54
  # If extensions given (possibly as an Array), looks for stub files with extensions, responds in sequence
79
55
  # If block is given, yields to block and checks that registered uri was hit during block execution
80
- def expect(method, path, extensions = nil)
81
- uri_path = path
56
+ def expect( method, path, extensions = nil )
82
57
  if TEST_FAKE_WEB
58
+ uri_path = path
83
59
  [extensions].flatten.each do |ext|
84
60
  case path
85
61
  when Regexp.new(github_yaml)
86
- file_path = path.sub(github_yaml, '')
62
+ file_path = path.sub(github_yaml, '/yaml')
87
63
  when Regexp.new(github_http)
88
64
  file_path = path.sub(github_http, '/http')
89
65
  else
@@ -102,9 +78,14 @@ module GitHubTest
102
78
  end
103
79
  end
104
80
 
105
- # Auth for joe
81
+ # Remove authentication
82
+ def clear_auth
83
+ API.auth.clear
84
+ end
85
+
86
+ # Authenticate as joe
106
87
  def authenticate_as_joe
107
- api.auth = joe_auth
88
+ API.auth = joe_auth
108
89
  end
109
90
 
110
91
  def joe_auth
@@ -116,7 +97,7 @@ module GitHubTest
116
97
  GitHub::User.find(:user=>'joe007')
117
98
  end
118
99
 
119
- def github_http
100
+ def github_http
120
101
  'http://github.com'
121
102
  end
122
103
 
@@ -124,16 +105,19 @@ module GitHubTest
124
105
  'http://github.com/api/v2/yaml'
125
106
  end
126
107
 
127
- def api
128
- GitHub::Api.instance
108
+ # repo name for 'new_repo' for real life tests - needed because GitHub
109
+ # gets stuck after several attempts to create repo with the same name
110
+ def new_repo
111
+ @new_repo_name ||= TEST_FAKE_WEB ? 'new_repo' : "new_repo#{Time.now.strftime("%Y%m%d-%H%M%S")}"
129
112
  end
130
113
 
114
+ # waits a little bit - needed because cache is sticky on real github
131
115
  def wait
132
- sleep 1 unless TEST_FAKE_WEB # cache is sticky on real github
116
+ sleep 1 unless TEST_FAKE_WEB
133
117
  end
134
118
 
135
119
  # specific expectations used in more than one spec file
136
- def should_be_commit commit, type
120
+ def should_be_commit( commit, type )
137
121
  arvicco = { 'name'=> 'arvicco', 'email'=> 'arvitallian@gmail.com'}
138
122
  commit.should be_a GitHub::Commit
139
123
  commit.author.should == arvicco
@@ -142,18 +126,19 @@ module GitHubTest
142
126
  commit.repo.should == 'fine_repo'
143
127
  case type.to_s
144
128
  when '5e61'
129
+ commit.parents.should == [{"id"=>"f7f5dddaa37deacc83f1f56876e2b135389d03ab"}]
145
130
  commit.sha.should == '5e61f0687c40ca48214d09dc7ae2d0d0d8fbfeb8'
146
131
  commit.url.should == 'http://github.com/joe007/fine_repo/commit/5e61f0687c40ca48214d09dc7ae2d0d0d8fbfeb8'
147
- commit.committed_date.should == "2010-01-08T02:49:26-08:00"
148
- commit.authored_date.should == "2010-01-08T02:49:26-08:00"
132
+ commit.committed.should == Time.parse("2010-01-08T02:49:26-08:00")
133
+ commit.authored.should == Time.parse("2010-01-08T02:49:26-08:00")
149
134
  commit.message.should == 'Version bump to 0.1.2'
150
135
  commit.tree.should == '917a288e375020ac4c0f4413dc6f23d6f06fc51b'
151
136
  when '543b'
152
137
  commit.parents.should == []
153
138
  commit.sha.should == '4f223bdbbfe6acade73f4b81d089f0705b07d75d'
154
139
  commit.url.should == 'http://github.com/joe007/fine_repo/commit/4f223bdbbfe6acade73f4b81d089f0705b07d75d'
155
- commit.committed_date.should == "2010-01-08T01:20:55-08:00"
156
- commit.authored_date.should == "2010-01-08T01:20:55-08:00"
140
+ commit.committed.should == Time.parse("2010-01-08T01:20:55-08:00")
141
+ commit.authored.should == Time.parse("2010-01-08T01:20:55-08:00")
157
142
  commit.message.should == 'First commit'
158
143
  commit.tree.should == '543b9bebdc6bd5c4b22136034a95dd097a57d3dd'
159
144
  end
@@ -0,0 +1,14 @@
1
+ HTTP/1.1 403 Forbidden
2
+ Server: nginx/0.7.61
3
+ Date: Fri, 15 Jan 2010 10:30:10 GMT
4
+ Content-Type: application/x-yaml; charset=utf-8
5
+ Connection: keep-alive
6
+ Status: 403 Forbidden
7
+ X-Runtime: 3ms
8
+ Content-Length: 43
9
+ Set-Cookie: _github_ses=BAh7BiIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNoSGFzaHsABjoKQHVzZWR7AA%3D%3D--884981fc5aa85daf318eeff084d98e2cff92578f; path=/; expires=Wed, 01 Jan 2020 08:00:00 GMT; HttpOnly
10
+ Cache-Control: no-cache
11
+
12
+ ---
13
+ error:
14
+ - error: repository not found
@@ -1,8 +1,8 @@
1
1
  HTTP/1.1 404 Not Found
2
2
  Server: nginx/0.7.61
3
- Date: Wed, 13 Jan 2010 14:51:55 GMT
3
+ Date: Fri, 15 Jan 2010 10:27:53 GMT
4
4
  Content-Type: text/html
5
- Content-Length: 3758
5
+ Content-Length: 3773
6
6
  Connection: keep-alive
7
7
 
8
8
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
@@ -73,7 +73,11 @@ Connection: keep-alive
73
73
  <a href="http://twitter.com/github">Status</a>
74
74
  </div>
75
75
  <div class="company">
76
- GitHub is <a href="http://logicalawesome.com/">Logical Awesome</a> &copy;2010 | <a href="http://github.com/site/terms">Terms of Service</a> | <a href="http://github.com/site/privacy">Privacy Policy</a>
76
+ &copy;
77
+ 2010
78
+ GitHub Inc.
79
+ All rights reserved.
80
+ | <a href="http://github.com/site/terms">Terms of Service</a> | <a href="http://github.com/site/privacy">Privacy Policy</a>
77
81
  </div>
78
82
  </div>
79
83
  <div class="sponsor">
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git_hub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.10
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - arvicco
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-01-14 00:00:00 +03:00
12
+ date: 2010-01-16 00:00:00 +03:00
13
13
  default_executable: git_hub
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -55,46 +55,49 @@ files:
55
55
  - lib/git_hub/api.rb
56
56
  - lib/git_hub/base.rb
57
57
  - lib/git_hub/commit.rb
58
+ - lib/git_hub/extensions.rb
58
59
  - lib/git_hub/repo.rb
59
60
  - lib/git_hub/user.rb
60
61
  - spec/git_hub/api_spec.rb
61
62
  - spec/git_hub/base_spec.rb
62
63
  - spec/git_hub/commit_spec.rb
64
+ - spec/git_hub/extensions_spec.rb
63
65
  - spec/git_hub/repo_spec.rb
64
66
  - spec/git_hub/user_spec.rb
65
67
  - spec/spec.opts
66
68
  - spec/spec_helper.rb
67
- - spec/stubs/api_route_error.res
68
- - spec/stubs/commits/list/joe007/fine_repo/master.res
69
- - spec/stubs/commits/list/joe007/fine_repo/master/README.res
70
- - spec/stubs/commits/show/joe007/fine_repo/3a70f86293b719f193f778a8710b1f83f2f7bf38.res
71
- - spec/stubs/commits/show/joe007/fine_repo/5e61f0687c40ca48214d09dc7ae2d0d0d8fbfeb8.res
72
- - spec/stubs/commits/show/joe007/fine_repo/f7f5dddaa37deacc83f1f56876e2b135389d03ab.res
73
69
  - spec/stubs/http/users/follow.res
74
- - spec/stubs/repos/create.1.res
75
- - spec/stubs/repos/create.2.res
76
- - spec/stubs/repos/create.3.res
77
- - spec/stubs/repos/create.4.res
78
- - spec/stubs/repos/delete/new_repo.1.res
79
- - spec/stubs/repos/delete/new_repo.2.res
80
- - spec/stubs/repos/delete/new_repo.res
81
- - spec/stubs/repos/search/fine+repo.res
82
- - spec/stubs/repos/search/joe+repo.res
83
- - spec/stubs/repos/show/joe007.res
84
- - spec/stubs/repos/show/joe007/err_repo.res
85
- - spec/stubs/repos/show/joe007/fine_repo.res
86
- - spec/stubs/repos/show/joe007/fine_repo/branches.res
87
- - spec/stubs/repos/show/joe007/fine_repo/tags.res
88
- - spec/stubs/repos/show/joe007/new_repo.res
89
- - spec/stubs/user/follow/arvicco.res
90
- - spec/stubs/user/search/joe+007.res
91
- - spec/stubs/user/show/arvicco.res
92
- - spec/stubs/user/show/joe007.auth.res
93
- - spec/stubs/user/show/joe007.res
94
- - spec/stubs/user/show/joe007/followers.res
95
- - spec/stubs/user/show/joe007/following.empty.res
96
- - spec/stubs/user/show/joe007/following.res
97
- - spec/stubs/user/show/joe_is_not_github_user.res
70
+ - spec/stubs/yaml/api_route_error.res
71
+ - spec/stubs/yaml/commits/list/joe007/fine_repo/master.res
72
+ - spec/stubs/yaml/commits/list/joe007/fine_repo/master/README.res
73
+ - spec/stubs/yaml/commits/show/joe007/fine_repo/3a70f86293b719f193f778a8710b1f83f2f7bf38.res
74
+ - spec/stubs/yaml/commits/show/joe007/fine_repo/5e61f0687c40ca48214d09dc7ae2d0d0d8fbfeb8.res
75
+ - spec/stubs/yaml/commits/show/joe007/fine_repo/f7f5dddaa37deacc83f1f56876e2b135389d03ab.res
76
+ - spec/stubs/yaml/repos/create.1.res
77
+ - spec/stubs/yaml/repos/create.2.res
78
+ - spec/stubs/yaml/repos/create.3.res
79
+ - spec/stubs/yaml/repos/create.4.res
80
+ - spec/stubs/yaml/repos/delete/new_repo.1.res
81
+ - spec/stubs/yaml/repos/delete/new_repo.2.res
82
+ - spec/stubs/yaml/repos/delete/new_repo.res
83
+ - spec/stubs/yaml/repos/search/fine+repo.res
84
+ - spec/stubs/yaml/repos/search/joe+repo.res
85
+ - spec/stubs/yaml/repos/show/invalid_github_user/err_repo.res
86
+ - spec/stubs/yaml/repos/show/joe007.res
87
+ - spec/stubs/yaml/repos/show/joe007/err_repo.res
88
+ - spec/stubs/yaml/repos/show/joe007/fine_repo.res
89
+ - spec/stubs/yaml/repos/show/joe007/fine_repo/branches.res
90
+ - spec/stubs/yaml/repos/show/joe007/fine_repo/tags.res
91
+ - spec/stubs/yaml/repos/show/joe007/new_repo.res
92
+ - spec/stubs/yaml/user/follow/arvicco.res
93
+ - spec/stubs/yaml/user/search/joe+007.res
94
+ - spec/stubs/yaml/user/show/arvicco.res
95
+ - spec/stubs/yaml/user/show/invalid_github_user.res
96
+ - spec/stubs/yaml/user/show/joe007.auth.res
97
+ - spec/stubs/yaml/user/show/joe007.res
98
+ - spec/stubs/yaml/user/show/joe007/followers.res
99
+ - spec/stubs/yaml/user/show/joe007/following.empty.res
100
+ - spec/stubs/yaml/user/show/joe007/following.res
98
101
  has_rdoc: true
99
102
  homepage: http://github.com/arvicco/git_hub
100
103
  licenses: []
@@ -127,6 +130,7 @@ test_files:
127
130
  - spec/git_hub/api_spec.rb
128
131
  - spec/git_hub/base_spec.rb
129
132
  - spec/git_hub/commit_spec.rb
133
+ - spec/git_hub/extensions_spec.rb
130
134
  - spec/git_hub/repo_spec.rb
131
135
  - spec/git_hub/user_spec.rb
132
136
  - spec/spec_helper.rb