lib/github/client.rb in git-layer-0.1.0 vs lib/github/client.rb in git-layer-0.2.0
- old
+ new
@@ -1,39 +1,110 @@
require 'rest-client'
+require 'json'
module Github
class Client
-
-
DEFAULT_OPTIONS = {
access_token: nil,
+ user: {}
}
attr_accessor :options
+ # stores user access_token to make authenticated requests
def initialize(options={})
- store_options options
+ store_options(options)
check_token
end
+ # returns user access_token
def access_token
@options[:access_token]
end
- def user
- RestClient.get("https://api.github.com/user", {params: {:access_token => self.access_token}})
+ # fetches user information from github API using access_token
+ # to identify user
+ def user(options={})
+ if options.empty?
+ get_user('user') if options.empty?
+ else
+ get_user("users/#{options[:login]}")
+ end
end
+ # getter functions access information storked in
+ # @options or fetch information (which stores it)
+ # and returns it
+ # getter for name
+ def name(options={})
+ if options.empty?
+ user["name"]
+ else
+ user(options)["name"]
+ end
+ end
+
+ # getter for login
+ def login(options={})
+ if options.empty?
+ user["login"]
+ else
+ options[:login]
+ end
+ end
+
+ # getter for email
+ def email(options={})
+ if options.empty?
+ user["email"]
+ else
+ user(options)["email"]
+ end
+ end
+
+ # getter for user page url
+ def html_url(options={})
+ if options.empty?
+ user["html_url"]
+ else
+ user(options)["html_url"]
+ end
+ end
+
+ # getter for url to get repositories from API
+ def repos_url(options={})
+ if options.empty?
+ user['repos_url']
+ else
+ user(options)['repos_url']
+ end
+ end
+
+ # fetches user's repositories and wraps them in RepoResponseWrapper
+ def repos(options={})
+ Github::ReposResponseWrapper.new(request(repos_url(options), access_token), access_token)
+ end
+
private
+
+ # stores provided optiosn (included access token)
def store_options(options)
@options ||= DEFAULT_OPTIONS.dup
@options.merge!(options)
end
+ # checks presence of access token on initialization. Client doesn't work without it
def check_token
raise ArgumentError, "No access token provided" if !access_token
end
+
+ # fetches user information from API using access_token to identify user
+ def get_user(path)
+ JSON.parse(RestClient.get("https://api.github.com/" + path, {params: {access_token: self.access_token}}))
+ end
+
+
end
end
\ No newline at end of file