github-api-client 0.1.1 → 0.1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/github_api.rb +6 -1
- data/lib/github_api/base.rb +11 -6
- data/lib/github_api/browser.rb +5 -0
- data/lib/github_api/user.rb +28 -3
- metadata +3 -2
data/lib/github_api.rb
CHANGED
@@ -10,10 +10,15 @@ require 'yaml'
|
|
10
10
|
require 'singleton'
|
11
11
|
require 'active_record'
|
12
12
|
|
13
|
-
|
13
|
+
# General placeholder for all of the GitHub API sweets
|
14
|
+
module GitHub
|
15
|
+
# Keeps all the configuration stuff
|
14
16
|
module Config
|
17
|
+
# Constant with defined all the paths used in the application
|
15
18
|
Path = {:dir => ENV['HOME'] + "/.github", :dbfile => ENV['HOME'] + "/.github/github.db", :migrations => Gem.loaded_specs['github-api-client'].full_gem_path + "/db/migrate", :secrets => ENV['HOME'] + "/.github" + "/secrets.yml"}
|
16
19
|
|
20
|
+
# Sets up the database and migrates it
|
21
|
+
# @return [nil]
|
17
22
|
def self.setup
|
18
23
|
Dir.mkdir GitHub::Config::Path[:dir] rescue nil
|
19
24
|
ActiveRecord::Base.establish_connection :adapter => 'sqlite3', :database => GitHub::Config::Path[:dbfile]
|
data/lib/github_api/base.rb
CHANGED
@@ -2,6 +2,7 @@ module GitHub
|
|
2
2
|
# Basic functionality inherited later
|
3
3
|
class Base
|
4
4
|
# Sends key= value signals at object, that inherits it
|
5
|
+
# @param [Hash] options to assign for an object
|
5
6
|
def build(options = {})
|
6
7
|
options.each_pair do |k, v|
|
7
8
|
self.send "#{k.to_sym}=", v
|
@@ -12,6 +13,7 @@ module GitHub
|
|
12
13
|
# == VERY DANGEROUS AND EVIL
|
13
14
|
# Recursively gets all* GitHub Users, takes years to fetch
|
14
15
|
# * - all that have at least one follower
|
16
|
+
# @return nil
|
15
17
|
def self.sync
|
16
18
|
puts "Synchronizing local database with GitHub"
|
17
19
|
users = GitHub::User.all
|
@@ -24,11 +26,13 @@ module GitHub
|
|
24
26
|
#user.get
|
25
27
|
#user.get_followers
|
26
28
|
end
|
29
|
+
nil
|
27
30
|
end
|
28
31
|
|
29
32
|
# Converts pitfalls from GitHub API differences into normal data
|
33
|
+
# @param [Hash] attributes GitHub API retrieved attributes to be parsed
|
34
|
+
# @return [Hash] parsed attributes, fully compatibile with local db
|
30
35
|
def self.parse_attributes(attributes)
|
31
|
-
#p attributes
|
32
36
|
{:name => :login, :username => :login, :fullname => :name, :followers => :followers_count, :repos => :public_repo_count, :created => :nil}.each do |k, v|
|
33
37
|
unless v == :nil
|
34
38
|
attributes[v] = attributes[k.to_s]
|
@@ -38,13 +42,11 @@ module GitHub
|
|
38
42
|
attributes
|
39
43
|
end
|
40
44
|
|
41
|
-
|
45
|
+
# ActiveRecord fix that returns attributes
|
46
|
+
# @return [Hash] Attributes of the object
|
47
|
+
def to_ary
|
42
48
|
return self.attributes
|
43
49
|
end
|
44
|
-
|
45
|
-
def method_missing(method, *args, &block) #:nodoc:
|
46
|
-
puts "Missing #{method}"
|
47
|
-
end
|
48
50
|
end
|
49
51
|
|
50
52
|
# Singleton class, that is used globally
|
@@ -56,6 +58,9 @@ module GitHub
|
|
56
58
|
# === Objects
|
57
59
|
# * GitHub::User - recognition by key 'user'
|
58
60
|
# More to be added soon
|
61
|
+
# @deprecated Nothing uses it, but may come handy later
|
62
|
+
# @param [String] yaml a YAML content to be parsed
|
63
|
+
# @return [GitHub::User, Array]
|
59
64
|
def self.build_from_yaml(yaml)
|
60
65
|
yaml = YAML::load yaml
|
61
66
|
object = case
|
data/lib/github_api/browser.rb
CHANGED
@@ -4,11 +4,14 @@ module GitHub
|
|
4
4
|
include Singleton
|
5
5
|
|
6
6
|
# Returnes root uri for GitHub API
|
7
|
+
# @return [String] Base GitHub API url for v2
|
7
8
|
def self.base_uri
|
8
9
|
"http://github.com/api/v2/yaml"
|
9
10
|
end
|
10
11
|
|
11
12
|
# Runs HTTP GET request at given uri
|
13
|
+
# @param [String] uri URI to be joined with base_uri and requested
|
14
|
+
# @return [String] request result
|
12
15
|
def self.get(uri)
|
13
16
|
uri = uri.gsub(" ","+")
|
14
17
|
puts "Requesting #{URI.parse(self.base_uri + uri)}"
|
@@ -16,6 +19,8 @@ module GitHub
|
|
16
19
|
end
|
17
20
|
|
18
21
|
# Runs HTTP POST requests with options such as GitHub::User.auth_info
|
22
|
+
# @param [String] uri URI to be joined with base_uri and requested
|
23
|
+
# @return [String] request result
|
19
24
|
def self.post(uri, options = {})
|
20
25
|
uri = uri.gsub(" ","+")
|
21
26
|
puts "Requesting #{URI.parse(self.base_uri + uri)} with options: #{options}"
|
data/lib/github_api/user.rb
CHANGED
@@ -6,6 +6,7 @@ module GitHub
|
|
6
6
|
|
7
7
|
# Fetches info about current_user from GitHub
|
8
8
|
# GitHub::User.new.build(:login => 'asd', :token => 'token').get #=> GitHub::User
|
9
|
+
# @return [GitHub::User] Chainable self object after syncing attributes with GitHub
|
9
10
|
def get
|
10
11
|
self.update_attributes YAML::load(GitHub::Browser.get("/user/show/#{self.login}"))['user']
|
11
12
|
self
|
@@ -14,10 +15,15 @@ module GitHub
|
|
14
15
|
# Static function, that gets information about GitHub::User by login.
|
15
16
|
# === Examples
|
16
17
|
# GitHub::User.get('defunkt') #=> GitHub::User
|
18
|
+
# @param [String] login GitHub user login to fetch
|
19
|
+
# @return [GitHub::User] Newly created, in local database user synced with github
|
17
20
|
def self.get(login)
|
18
21
|
return GitHub::User.find_or_create_by_login YAML::load(GitHub::Browser.get("/user/show/#{login}"))['user']
|
19
22
|
end
|
20
23
|
|
24
|
+
# Searches for users in GitHub database
|
25
|
+
# @param [String] login GitHub user login to search
|
26
|
+
# @return [Array<GitHub::User>] All users that matched login
|
21
27
|
def self.search(login)
|
22
28
|
users = []
|
23
29
|
YAML::load(GitHub::Browser.get("/user/search/#{login}"))['users'].each do |user|
|
@@ -26,11 +32,21 @@ module GitHub
|
|
26
32
|
users
|
27
33
|
end
|
28
34
|
|
29
|
-
|
35
|
+
# Experimental function, requests POST transmission to custom path of GitHub API
|
36
|
+
# @param [Array] route Route splitted like: ['users', 'search', 'chacon']
|
37
|
+
# @param [Hash] options Options to pass with the request
|
38
|
+
# @option [Hash] options 'values[email]' => 'test@api.com'
|
39
|
+
def set(route = [], options = {})
|
30
40
|
return GitHub::Browser.post "/#{route.join('/')}", options.merge(self.auth_info)
|
31
41
|
end
|
32
42
|
|
33
43
|
# End-user way to fetch information
|
44
|
+
# @param [Array<Symbol>] things Things to fetch for GitHub::User
|
45
|
+
# @option things [Symbol] :self Sync with GitHub Database
|
46
|
+
# @option things [Symbol] :followers Map followers from GitHub Database
|
47
|
+
# @return [GitHub::User] Chainable, updated User
|
48
|
+
# @see GitHub::User#get
|
49
|
+
# @see GitHub::User#get_followers
|
34
50
|
def fetch(*things)
|
35
51
|
things.each do |thing|
|
36
52
|
case thing
|
@@ -42,6 +58,8 @@ module GitHub
|
|
42
58
|
end
|
43
59
|
|
44
60
|
# Executes when you got a real object
|
61
|
+
# @see GitHub::User#fetch
|
62
|
+
# @return GitHub::User Chainable after mapping followers association
|
45
63
|
private
|
46
64
|
def get_followers
|
47
65
|
users = YAML::load(GitHub::Browser.get "/user/show/#{login}/followers")['users']
|
@@ -59,8 +77,10 @@ module GitHub
|
|
59
77
|
self
|
60
78
|
end
|
61
79
|
|
62
|
-
# Returns an array with logins of GitHub::User followers
|
63
80
|
public
|
81
|
+
# Returns an array with logins of GitHub::User followers
|
82
|
+
# @param [String] login GitHub login of which followers will be mapped
|
83
|
+
# @return [Array<GitHub::User>] Followers
|
64
84
|
def self.get_followers(login)
|
65
85
|
users = YAML::load(GitHub::Browser.get "/user/show/#{login}/followers")['users']
|
66
86
|
|
@@ -78,11 +98,16 @@ module GitHub
|
|
78
98
|
|
79
99
|
# Collects information from authenticated user.
|
80
100
|
# Used by post requests to authenticate
|
101
|
+
# @return [Hash] Collected from GitHub::User options for HTTP POST request authentication
|
81
102
|
def auth_info
|
82
103
|
{:login => self.login, :token => self.token}
|
83
104
|
end
|
84
105
|
|
85
|
-
# Experimental, sets information about GitHub::User or returns authenticated :self
|
106
|
+
# Experimental, sets information about GitHub::User or returns authenticated :self
|
107
|
+
# @param [String] login Login to which post request will be sent
|
108
|
+
# @param [Hash] options Options to include to a post request
|
109
|
+
# @option options [Hash] email 'values[email]' => 'test@api.com' - Sets user email to test@api.com if authenticated
|
110
|
+
# @return [String] Request retrieved data
|
86
111
|
def post(login, options = {})
|
87
112
|
if [:self, :me].include? login
|
88
113
|
login = self.login
|
metadata
CHANGED
@@ -6,7 +6,8 @@ version: !ruby/object:Gem::Version
|
|
6
6
|
- 0
|
7
7
|
- 1
|
8
8
|
- 1
|
9
|
-
|
9
|
+
- 1
|
10
|
+
version: 0.1.1.1
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- "Jakub Oko\xC5\x84ski"
|
@@ -76,7 +77,7 @@ files:
|
|
76
77
|
- lib/github_api/user.rb
|
77
78
|
- db/migrate/002_create_followings.rb
|
78
79
|
- db/migrate/001_create_users.rb
|
79
|
-
has_rdoc:
|
80
|
+
has_rdoc: false
|
80
81
|
homepage: http://github.com/farnoy/github-api-client
|
81
82
|
licenses: []
|
82
83
|
|