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.