Every repository with this icon (
Every repository with this icon (
| name | age | message | |
|---|---|---|---|
| |
.gitignore | Mon Aug 24 01:10:33 -0700 2009 | |
| |
.yardoc | Fri Jul 31 00:10:03 -0700 2009 | |
| |
LICENSE | Sat Apr 18 20:22:54 -0700 2009 | |
| |
README.rdoc | Thu Aug 06 00:02:43 -0700 2009 | |
| |
Rakefile | Thu Nov 05 12:25:40 -0800 2009 | |
| |
VERSION.yml | Fri Nov 06 05:02:36 -0800 2009 | |
| |
contrib/ | Wed Apr 22 14:29:30 -0700 2009 | |
| |
doc/ | Fri Jul 31 00:03:25 -0700 2009 | |
| |
examples/ | Wed Jul 29 23:11:27 -0700 2009 | |
| |
lib/ | Fri Nov 06 05:02:37 -0800 2009 | |
| |
octopi.gemspec | Mon Nov 09 16:10:13 -0800 2009 | |
| |
real_world_test/ | Mon Aug 24 00:48:53 -0700 2009 | |
| |
test/ | Fri Nov 06 05:02:37 -0800 2009 | |
| |
test_auth.rb | Mon Aug 24 00:13:39 -0700 2009 |
octopi
Octopi is a Ruby interface to GitHub API v2 (develop.github.com).
To install it as a Gem, just run:
$ sudo gem install octopi
Get notifications via Twitter, following @octopi_gem: twitter.com/octopi_gem
Authenticated Usage
Seamless authentication using .gitconfig defaults
If you have your ~/.gitconfig file in place, and you have a [github] section (if you don’t, take a look at this GitHub Guides entry: github.com/guides/tell-git-your-user-name-and-email-address), you can use seamless authentication using this method:
authenticated do
repo = Repository.find(:name => "api-labrat", :user => "fcoury")
end
Explicit authentication
Sometimes, you may not want to get authentication data from ~/.gitconfig. You want to use GitHub API authenticated as a third party. For this use case, you have a couple of options too.
1. Providing login and token inline:
authenticated_with "mylogin", "mytoken" do
repo = Repository.find(:name => "api-labrat", :user => "fcoury")
issue = repo.open_issue :title => "Sample issue",
:body => "This issue was opened using GitHub API and Octopi"
puts issue.number
end
2. Providing login and password inline:
authenticated_with "mylogin", "password" do
repo = Repository.find(:name => "api-labrat", :user => "fcoury")
issue = repo.open_issue :title => "Sample issue",
:body => "This issue was opened using GitHub API and Octopi"
puts issue.number
end
3. Providing a YAML file with authentication information:
Use the following format:
# # Octopi GitHub API configuration file # # GitHub user login and token login: github-username token: github-token # Trace level # Possible values: # false - no tracing, same as if the param is ommited # true - will output each POST or GET operation to the stdout # curl - same as true, but in addition will output the curl equivalent of each command (for debugging) trace: curl
And change the way you connect to:
authenticated_with :config => "github.yml" do |g|
(...)
end
Anonymous Usage
This reflects the usage of the API to retrieve information on a read-only fashion, where the user doesn’t have to be authenticated.
Users API
Getting user information
user = User.find("fcoury")
puts "#{user.name} is being followed by #{user.followers.join(", ")} and following #{user.following.join(", ")}"
The bang methods `followers!` and `following!` retrieves a full User object for each user login returned, so it has to be used carefully.
user.followers!.each do |u|
puts " - #{u.name} (#{u.login}) has #{u.public_repo_count} repo(s)"
end
Searching for user
users = User.find_all("silva")
puts "#{users.size} users found for 'silva':"
users.each do |u|
puts " - #{u.name}"
end
Repositories API
repo = user.repository("octopi") # same as: Repository.find("fcoury", "octopi")
puts "Repository: #{repo.name} - #{repo.description} (by #{repo.owner}) - #{repo.url}"
puts " Tags: #{repo.tags and repo.tags.map {|t| t.name}.join(", ")}"
Search:
repos = Repository.find_all("ruby", "git")
puts "#{repos.size} repository(ies) with 'ruby' and 'git':"
repos.each do |r|
puts " - #{r.name}"
end
Issues API integrated into the Repository object:
issue = repo.issues.first
puts "First open issue: #{issue.number} - #{issue.title} - Created at: #{issue.created_at}"
Single issue information:
issue = repo.issue(11)
Commits API information from a Repository object:
first_commit = repo.commits.first
puts "First commit: #{first_commit.id} - #{first_commit.message} - by #{first_commit.author['name']}"
Single commit information:
puts "Diff:"
first_commit.details.modified.each {|m| puts "#{m['filename']} DIFF: #{m['diff']}" }
Author
- Felipe Coury - felipecoury.com
- HasMany.info blog - hasmany.info
Contributors
In alphabetical order:
- Ryan Bigg - frozenplague.net
- Brandon Calloway - github.com/bcalloway
- runpaint - github.com/runpaint
Thanks guys!
Copyright
Copyright © 2009 Felipe Coury. See LICENSE for details.







