github_api 0.4.3 → 0.4.4

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.
data/README.md CHANGED
@@ -141,13 +141,19 @@ or organisation name, allow you to switch the way the data is returned to you, f
141
141
 
142
142
  ```ruby
143
143
  @github = Github.new
144
- @github.git_data.tree 'peter-murach', 'github', 'c18647b75d72f19c1e0cc8af031e5d833b7f12ea' # => gets a tree
144
+ @github.git_data.tree 'peter-murach', 'github', 'c18647b75d72f19c1e0cc8af031e5d833b7f12ea'
145
+ # => gets a tree
145
146
 
146
- @github.git_data.tree 'peter-murach', 'github', 'c18647b75d72f19c1e0cc8af031e5d833b7f12ea', :recursive => true # => gets a whole tree recursively
147
+ @github.git_data.tree 'peter-murach', 'github', 'c18647b75d72f19c1e0cc8af031e5d833b7f12ea', :recursive => true
148
+ # => gets a whole tree recursively
149
+ ```
147
150
 
148
151
  by passing a block you can iterate over the file tree
149
152
 
150
- @github.git_data.tree 'peter-murach', 'github', 'c18647b75d72f19c1e0cc8af031e5d833b7f12ea', :recursive => true do |file|
153
+ ```ruby
154
+ @github.git_data.tree 'peter-murach', 'github', 'c18647b75d72f19c1e0cc8af031e5d833b7f12ea',
155
+ :recursive => true do |file|
156
+
151
157
  puts file.path
152
158
  end
153
159
  ```
@@ -210,7 +216,7 @@ end
210
216
  or
211
217
 
212
218
  Github.new(:oauth_token => YOUR_OAUTH_TOKEN)
213
- Github.new(:basic_auth => 'login:password)
219
+ Github.new(:basic_auth => 'login:password')
214
220
  ```
215
221
 
216
222
  All parameters can be overwirtten as per method call. By passing parameters hash...
@@ -0,0 +1,121 @@
1
+ ---
2
+ - !ruby/struct:VCR::HTTPInteraction
3
+ request: !ruby/struct:VCR::Request
4
+ method: :get
5
+ uri: https://api.github.com:443/gists/999390/comments
6
+ body:
7
+ headers:
8
+ accept-encoding:
9
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
10
+ response: !ruby/struct:VCR::Response
11
+ status: !ruby/struct:VCR::ResponseStatus
12
+ code: 200
13
+ message: OK
14
+ headers:
15
+ server:
16
+ - nginx/1.0.4
17
+ date:
18
+ - Sun, 05 Feb 2012 12:59:01 GMT
19
+ content-type:
20
+ - application/json; charset=utf-8
21
+ transfer-encoding:
22
+ - chunked
23
+ connection:
24
+ - keep-alive
25
+ status:
26
+ - 200 OK
27
+ x-ratelimit-limit:
28
+ - "5000"
29
+ etag:
30
+ - "\"505353f9d67f512676a7f199e6cd34db\""
31
+ x-ratelimit-remaining:
32
+ - "4997"
33
+ content-encoding:
34
+ - gzip
35
+ body: !binary |
36
+ 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
119
+ 7wwy/en9+ut/AVz6QpKlNAAA
120
+
121
+ http_version: "1.1"
@@ -0,0 +1,46 @@
1
+ ---
2
+ - !ruby/struct:VCR::HTTPInteraction
3
+ request: !ruby/struct:VCR::Request
4
+ method: :get
5
+ uri: https://api.github.com:443/gists/comments/33469
6
+ body:
7
+ headers:
8
+ accept-encoding:
9
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
10
+ response: !ruby/struct:VCR::Response
11
+ status: !ruby/struct:VCR::ResponseStatus
12
+ code: 200
13
+ message: OK
14
+ headers:
15
+ server:
16
+ - nginx/1.0.4
17
+ date:
18
+ - Sun, 05 Feb 2012 12:59:01 GMT
19
+ content-type:
20
+ - application/json; charset=utf-8
21
+ transfer-encoding:
22
+ - chunked
23
+ connection:
24
+ - keep-alive
25
+ status:
26
+ - 200 OK
27
+ x-ratelimit-limit:
28
+ - "5000"
29
+ etag:
30
+ - "\"612aa3594782fab47ab767da9f377a8c\""
31
+ x-ratelimit-remaining:
32
+ - "4996"
33
+ content-encoding:
34
+ - gzip
35
+ body: !binary |
36
+ H4sIAAAAAAAAA4VSy27cMAz8FcJAb+vX2smuDRQ5FAjSe5BDLwElUbZgWRIk
37
+ ua0T5N8jO91ie2luA4kznCH5mi1eZ302xuhCX5boVDGoOC6s4HYuBxViKBOa
38
+ ySTQNO1tlx0yZsWaSE/kV+DW6gNoa6cAWk0EcSTwNNBvCoBGgMM47v+LSw+e
39
+ YFJaKzOAIy+tn9FwKuDbSHwCu0S4WLmy4Tg6X4rV2JxpFV/IQ2ICI8PHGf20
40
+ qSEIJSX5ZBQwOOIRrLzusZsJHDUylURWyGG0vyD1X2GTDiAsfAdDJMAaeCA/
41
+ 2eUOUtzFCYwknjGm0MeqrvPqJm/qx/q2P970TfNjqwnks/71/+PcikK5p0mU
42
+ weNPjOiflUi6TNatrLqT5GdG7flUdazFTiIxLpF3MhG0HZRJpReBP/R/NxiI
43
+ L56Ki/i+xo/C8rMWd+Lr3zs4tueCCpxwRlUYiiWGQDFcHceX472acaCQwKXb
44
+ Nc7rtiqcGZLxLeCpObf12wfe7+iQcU+fzPXtHbPbLeKgAgAA
45
+
46
+ http_version: "1.1"
@@ -0,0 +1,25 @@
1
+ Feature: Accessing Gists Comments API
2
+ In order to interact with github gist comments
3
+ GithubAPI gem
4
+ Should return the expected results depending on passed parameters
5
+
6
+ Background:
7
+ Given I have "Github::Gists" instance
8
+
9
+ Scenario: Lists comments on a gist
10
+ When I am looking for "comments" with the following params:
11
+ | gist_id |
12
+ | 999390 |
13
+ And I make request within a cassette named "gists/comments/all"
14
+ Then the response should be "200"
15
+ And the response type should be "JSON"
16
+ And the response should have 18 items
17
+
18
+ Scenario: Gets a single gist's comment
19
+ When I am looking for "comment" with the following params:
20
+ | comment_id |
21
+ | 33469 |
22
+ And I make request within a cassette named "gists/comments/first"
23
+ Then the response should be "200"
24
+ And the response type should be "JSON"
25
+ And the response should not be empty
@@ -17,3 +17,7 @@ end
17
17
  Then /^the response should have (\d+) items$/ do |size|
18
18
  @response.size.should eql size.to_i
19
19
  end
20
+
21
+ Then /^the response should not be empty$/ do
22
+ @response.should_not be_empty
23
+ end
@@ -59,6 +59,7 @@ module Github
59
59
 
60
60
  autoload_all 'github_api',
61
61
  :API => 'api',
62
+ :ApiFactory => 'api_factory',
62
63
  :Client => 'client',
63
64
  :Repos => 'repos',
64
65
  :Request => 'request',
@@ -78,6 +79,8 @@ module Github
78
79
  :Authorizations => 'authorizations',
79
80
  :PageLinks => 'page_links',
80
81
  :PageIterator => 'page_iterator',
81
- :PagedRequest => 'paged_request'
82
+ :PagedRequest => 'paged_request',
83
+ :Validation => 'validation',
84
+ :Filter => 'filter'
82
85
 
83
86
  end # Github
@@ -2,12 +2,14 @@
2
2
 
3
3
  require 'github_api/configuration'
4
4
  require 'github_api/connection'
5
+ require 'github_api/validation'
5
6
  require 'github_api/request'
6
7
  require 'github_api/mime_type'
7
8
  require 'github_api/core_ext/hash'
8
9
  require 'github_api/core_ext/array'
9
10
  require 'github_api/compatibility'
10
11
  require 'github_api/api/actions'
12
+ require 'github_api/api_factory'
11
13
 
12
14
  module Github
13
15
 
@@ -17,12 +19,8 @@ module Github
17
19
  include MimeType
18
20
  include Connection
19
21
  include Request
20
-
21
- VALID_API_KEYS = [
22
- 'page',
23
- 'per_page',
24
- 'jsonp_callback'
25
- ]
22
+ include Validation
23
+ include Filter
26
24
 
27
25
  attr_reader *Configuration::VALID_OPTIONS_KEYS
28
26
  attr_accessor *VALID_API_KEYS
@@ -69,14 +67,6 @@ module Github
69
67
  Github.api_client = self
70
68
  end
71
69
 
72
- # Passes configuration options to instantiated class
73
- def _create_instance(klass, options)
74
- options.symbolize_keys!
75
- instance = klass.send :new, options
76
- Github.api_client = instance
77
- instance
78
- end
79
-
80
70
  # Responds to attribute query or attribute clear
81
71
  def method_missing(method, *args, &block) # :nodoc:
82
72
  case method.to_s
@@ -89,23 +79,6 @@ module Github
89
79
  end
90
80
  end
91
81
 
92
- def _validate_inputs(required, provided) # :nodoc:
93
- required.all? do |key|
94
- provided.has_deep_key? key
95
- end
96
- end
97
-
98
- def _validate_presence_of(*params) # :nodoc:
99
- params.each do |param|
100
- raise ArgumentError, "parameter cannot be nil" if param.nil?
101
- end
102
- end
103
-
104
- def _validate_user_repo_params(user_name, repo_name) # :nodoc:
105
- raise ArgumentError, "[user] parameter cannot be nil" if user_name.nil?
106
- raise ArgumentError, "[repo] parameter cannot be nil" if repo_name.nil?
107
- end
108
-
109
82
  def _update_user_repo_params(user_name, repo_name=nil) # :nodoc:
110
83
  self.user = user_name || self.user
111
84
  self.repo = repo_name || self.repo
@@ -119,45 +92,6 @@ module Github
119
92
  { 'user' => self.user, 'repo' => self.repo }.merge!(params)
120
93
  end
121
94
 
122
- # Turns any keys from nested hashes including nested arrays into strings
123
- def _normalize_params_keys(params) # :nodoc:
124
- case params
125
- when Hash
126
- params.keys.each do |k|
127
- params[k.to_s] = params.delete(k)
128
- _normalize_params_keys(params[k.to_s])
129
- end
130
- when Array
131
- params.map! do |el|
132
- _normalize_params_keys(el)
133
- end
134
- else
135
- params.to_s
136
- end
137
- return params
138
- end
139
-
140
- # Removes any keys from nested hashes that don't match predefiend keys
141
- def _filter_params_keys(keys, params) # :nodoc:
142
- case params
143
- when Hash
144
- params.keys.each do |k, v|
145
- unless (keys.include?(k) or VALID_API_KEYS.include?(k))
146
- params.delete(k)
147
- else
148
- _filter_params_keys(keys, params[k])
149
- end
150
- end
151
- when Array
152
- params.map! do |el|
153
- _filter_params_keys(keys, el)
154
- end
155
- else
156
- params
157
- end
158
- return params
159
- end
160
-
161
95
  def _hash_traverse(hash, &block)
162
96
  hash.each do |key, val|
163
97
  block.call(key)
@@ -175,18 +109,6 @@ module Github
175
109
  return hash
176
110
  end
177
111
 
178
- # Ensures that hash values contain predefined values
179
- def _validate_params_values(options, params) # :nodoc:
180
- params.each do |k, v|
181
- next unless options.keys.include?(k)
182
- if options[k].is_a?(Array) && !options[k].include?(params[k])
183
- raise ArgumentError, "Wrong value for #{k}, allowed: #{options[k].join(', ')}"
184
- elsif options[k].is_a?(Regexp) && !(options[k] =~ params[k])
185
- raise ArgumentError, "String does not match the parameter value."
186
- end
187
- end
188
- end
189
-
190
112
  def _merge_mime_type(resource, params) # :nodoc:
191
113
  # params['resource'] = resource
192
114
  # params['mime_type'] = params['mime_type'] || :raw
@@ -18,8 +18,8 @@ module Github
18
18
 
19
19
  def api_methods_in(klass)
20
20
  puts "---"
21
- (klass.send(:instance_methods, false) - ['actions']).sort.each do |rest_met|
22
- puts "|--> #{rest_met}"
21
+ (klass.send(:instance_methods, false) - ['actions']).sort.each do |method|
22
+ puts "|--> #{method}"
23
23
  end
24
24
  klass.included_modules.each do |mod|
25
25
  if mod.to_s =~ /#{klass}/
@@ -34,5 +34,17 @@ module Github
34
34
  nil
35
35
  end
36
36
 
37
+ def append_arguments(method)
38
+ _method = self.method(method)
39
+ if _method.arity == 0
40
+ args = "()"
41
+ elsif _method.arity > 0
42
+ args = "(few)"
43
+ else
44
+ args = "(else)"
45
+ end
46
+ args
47
+ end
48
+
37
49
  end # API
38
50
  end # Github
@@ -0,0 +1,24 @@
1
+ # encoding: utf-8
2
+
3
+ require 'github_api/core_ext/hash'
4
+
5
+ module Github
6
+ class ApiFactory
7
+
8
+ # Instantiates a new github api object
9
+ def self.new(klass, options={})
10
+ return _create_instance(klass, options) if klass
11
+ raise ArgumentError, 'must provied klass to be instantiated'
12
+ end
13
+
14
+ private
15
+
16
+ # Passes configuration options to instantiated class
17
+ def self._create_instance(klass, options)
18
+ options.symbolize_keys!
19
+ instance = Github.const_get(klass.to_sym).new options
20
+ Github.api_client = instance
21
+ instance
22
+ end
23
+ end
24
+ end # Github
@@ -4,51 +4,51 @@ module Github
4
4
  class Client < API
5
5
 
6
6
  def gists(options = {})
7
- @gists ||= _create_instance Github::Gists, options
7
+ @gists ||= ApiFactory.new 'Gists', options
8
8
  end
9
9
 
10
10
  # The Git Database API gives you access to read and write raw Git objects
11
11
  # to your Git database on GitHub and to list and update your references
12
12
  # (branch heads and tags).
13
13
  def git_data(options = {})
14
- @git_data ||= _create_instance Github::GitData, options
14
+ @git_data ||= ApiFactory.new 'GitData', options
15
15
  end
16
16
  alias :git :git_data
17
17
 
18
18
  def issues(options = {})
19
- @issues ||= _create_instance Github::Issues, options
19
+ @issues ||= ApiFactory.new 'Issues', options
20
20
  end
21
21
 
22
22
  def orgs(options = {})
23
- @orgs ||= _create_instance Github::Orgs, options
23
+ @orgs ||= ApiFactory.new 'Orgs', options
24
24
  end
25
25
  alias :organizations :orgs
26
26
 
27
27
  def pull_requests(options = {})
28
- @pull_requests ||= _create_instance Github::PullRequests, options
28
+ @pull_requests ||= ApiFactory.new 'PullRequests', options
29
29
  end
30
30
 
31
31
  def repos(options = {})
32
- @repos ||= _create_instance Github::Repos, options
32
+ @repos ||= ApiFactory.new 'Repos', options
33
33
  end
34
34
  alias :repositories :repos
35
35
 
36
36
  # Many of the resources on the users API provide a shortcut for getting
37
37
  # information about the currently authenticated user.
38
38
  def users(options = {})
39
- @users ||= _create_instance Github::Users, options
39
+ @users ||= ApiFactory.new 'Users', options
40
40
  end
41
41
 
42
42
  # This is a read-only API to the GitHub events.
43
43
  # These events power the various activity streams on the site.
44
44
  def events(options = {})
45
- @events ||= _create_instance Github::Events, options
45
+ @events ||= ApiFactory.new 'Events', options
46
46
  end
47
47
 
48
48
  # An API for users to manage their own tokens. You can only access your own
49
49
  # tokens, and only through Basic Authentication.
50
50
  def oauth(options = {})
51
- @oauth ||= _create_instance Github::Authorizations, options
51
+ @oauth ||= ApiFactory.new 'Authorizations', options
52
52
  end
53
53
 
54
54
  end # Client