Rest api with ruby
Version 4 (Eric Davis, 2010-10-21 06:26)
| 1 | 1 | Jean-Philippe Lang | h1. Using the REST API with Ruby |
|---|---|---|---|
| 2 | 1 | Jean-Philippe Lang | |
| 3 | 1 | Jean-Philippe Lang | Redmine REST API follows the Rails's RESTful conventions, so using it with "ActiveResource":http://api.rubyonrails.org/classes/ActiveResource/Base.html is pretty straightforward. |
| 4 | 1 | Jean-Philippe Lang | |
| 5 | 4 | Eric Davis | h2. ActiveResource |
| 6 | 4 | Eric Davis | |
| 7 | 1 | Jean-Philippe Lang | Here is a simple ruby script that demonstrates how to use the Redmine REST API: |
| 8 | 1 | Jean-Philippe Lang | |
| 9 | 1 | Jean-Philippe Lang | <pre> |
| 10 | 1 | Jean-Philippe Lang | <code class="ruby"> |
| 11 | 1 | Jean-Philippe Lang | require 'rubygems' |
| 12 | 1 | Jean-Philippe Lang | require 'active_resource' |
| 13 | 1 | Jean-Philippe Lang | |
| 14 | 1 | Jean-Philippe Lang | # Issue model on the client side |
| 15 | 1 | Jean-Philippe Lang | class Issue < ActiveResource::Base |
| 16 | 1 | Jean-Philippe Lang | self.site = 'http://redmine.server/' |
| 17 | 1 | Jean-Philippe Lang | self.user = 'foo' |
| 18 | 1 | Jean-Philippe Lang | self.password = 'bar' |
| 19 | 1 | Jean-Philippe Lang | end |
| 20 | 1 | Jean-Philippe Lang | |
| 21 | 1 | Jean-Philippe Lang | # Retrieving issues |
| 22 | 1 | Jean-Philippe Lang | issues = Issue.find(:all) |
| 23 | 1 | Jean-Philippe Lang | puts issues.first.subject |
| 24 | 1 | Jean-Philippe Lang | |
| 25 | 1 | Jean-Philippe Lang | # Retrieving an issue |
| 26 | 1 | Jean-Philippe Lang | issue = Issue.find(1) |
| 27 | 1 | Jean-Philippe Lang | puts issue.description |
| 28 | 1 | Jean-Philippe Lang | puts issue.author.name |
| 29 | 1 | Jean-Philippe Lang | |
| 30 | 1 | Jean-Philippe Lang | # Creating an issue |
| 31 | 2 | Jean-Philippe Lang | issue = Issue.new( |
| 32 | 2 | Jean-Philippe Lang | :subject => 'REST API', |
| 33 | 2 | Jean-Philippe Lang | :assigned_to_id => 1, |
| 34 | 2 | Jean-Philippe Lang | :project_id => 1, |
| 35 | 3 | J Doe | :custom_field_values => {'2' => 'Fixed'} |
| 36 | 2 | Jean-Philippe Lang | ) |
| 37 | 1 | Jean-Philippe Lang | if issue.save |
| 38 | 1 | Jean-Philippe Lang | puts issue.id |
| 39 | 1 | Jean-Philippe Lang | else |
| 40 | 1 | Jean-Philippe Lang | puts issue.errors.full_messages |
| 41 | 1 | Jean-Philippe Lang | end |
| 42 | 1 | Jean-Philippe Lang | |
| 43 | 1 | Jean-Philippe Lang | # Updating an issue |
| 44 | 1 | Jean-Philippe Lang | issue = Issue.find(1) |
| 45 | 1 | Jean-Philippe Lang | issue.subject = 'REST API' |
| 46 | 1 | Jean-Philippe Lang | issue.save |
| 47 | 1 | Jean-Philippe Lang | |
| 48 | 1 | Jean-Philippe Lang | # Deleting an issue |
| 49 | 1 | Jean-Philippe Lang | issue = Issue.find(1) |
| 50 | 1 | Jean-Philippe Lang | issue.destroy |
| 51 | 1 | Jean-Philippe Lang | </code> |
| 52 | 1 | Jean-Philippe Lang | </pre> |
| 53 | 4 | Eric Davis | |
| 54 | 4 | Eric Davis | h2. RedmineClient gem |
| 55 | 4 | Eric Davis | |
| 56 | 4 | Eric Davis | Eric Davis has created a gem that has ActiveResource wrappers for Redmine's API. See his post "Redmine Client - Access the Redmine API in Ruby":http://redmineblog.com/articles/redmine-client-access-the-redmine-api-in-ruby/ for more details and an example. |