Changesets can be listed by changeset number.
The Git repository is here.
- Revision:
- 15
- Log:
Attempt to update Typo to a Typo SVN HEAD release from around the
time the prototype installation was set up on the RISC OS Open Limited
web site. Timestamps place this at 04-Jul so a revision from 05-Jul or
earlier was pulled and copied over the 2.6.0 tarball stable code.
- Author:
- adh
- Date:
- Sat Jul 22 23:27:35 +0100 2006
- Size:
- 5528 Bytes
1 | # Requires that XmlSimple is already loaded, like it is from within script/console in the latest beta Rails |
2 | # Author: David Heinemeier Hansson, 37signals |
3 | |
4 | require 'yaml' |
5 | require 'net/https' |
6 | |
7 | class BackpackAPI |
8 | attr_accessor :username, :token, :current_page_id |
9 | |
10 | def initialize(username, token) |
11 | @username, @token = username, token |
12 | connect |
13 | end |
14 | |
15 | def connect(use_ssl = false) |
16 | @connection = Net::HTTP.new("#{@username}.backpackit.com", use_ssl ? 443 : 80) |
17 | @connection.use_ssl = use_ssl |
18 | @connection.verify_mode = OpenSSL::SSL::VERIFY_NONE if use_ssl |
19 | end |
20 | |
21 | def page_id=(id) |
22 | self.current_page_id = id |
23 | end |
24 | alias :pi= :page_id= |
25 | |
26 | def request(path, parameters = {}, second_try = false) |
27 | parameters = { "token" => @token }.merge(parameters) |
28 | |
29 | response = @connection.post("/ws/#{path}", parameters.to_yaml, "X-POST_DATA_FORMAT" => "yaml") |
30 | |
31 | if response.code == "200" |
32 | result = XmlSimple.xml_in(response.body) |
33 | result.delete "success" |
34 | result.empty? ? true : result |
35 | elsif response.code == "302" && !second_try |
36 | connect(true) |
37 | request(path, parameters, true) |
38 | else |
39 | raise "Error occured (#{response.code}): #{response.body}" |
40 | end |
41 | end |
42 | alias :r :request |
43 | |
44 | |
45 | # Items ---- |
46 | |
47 | def list_items(page_id = current_page_id) |
48 | request "page/#{page_id}/items/list" |
49 | end |
50 | alias :li :list_items |
51 | |
52 | def create_item(content, page_id = current_page_id) |
53 | request "page/#{page_id}/items/add", "item" => { "content" => content } |
54 | end |
55 | alias :ci :create_item |
56 | |
57 | def update_item(item_id, content, page_id = current_page_id) |
58 | request "page/#{page_id}/items/update/#{item_id}", "item" => { "content" => content } |
59 | end |
60 | alias :ui :update_item |
61 | |
62 | def destroy_item(item_id, page_id = current_page_id) |
63 | request "page/#{page_id}/items/destroy/#{item_id}" |
64 | end |
65 | alias :di :destroy_item |
66 | |
67 | def toggle_item(item_id, page_id = current_page_id) |
68 | request "page/#{page_id}/items/toggle/#{item_id}" |
69 | end |
70 | alias :ti :toggle_item |
71 | |
72 | def move_item(item_id, direction, page_id = current_page_id) |
73 | request "page/#{page_id}/items/move/#{item_id}", "direction" => "move_#{direction}" |
74 | end |
75 | alias :mi :move_item |
76 | |
77 | |
78 | # Notes ---- |
79 | |
80 | def list_notes(page_id = current_page_id) |
81 | request "page/#{page_id}/notes/list" |
82 | end |
83 | alias :li :list_notes |
84 | |
85 | def create_note(title, body, page_id = current_page_id) |
86 | request "page/#{page_id}/notes/create", "note" => { "title" => title, "body" => body } |
87 | end |
88 | alias :cn :create_note |
89 | |
90 | def update_note(note_id, title, body, page_id = current_page_id) |
91 | request "page/#{page_id}/notes/update/#{note_id}", "note" => { "title" => title, "body" => body } |
92 | end |
93 | alias :un :update_note |
94 | |
95 | def destroy_note(note_id, page_id = current_page_id) |
96 | request "page/#{page_id}/notes/destroy/#{note_id}" |
97 | end |
98 | alias :dn :destroy_note |
99 | |
100 | |
101 | # Emails ---- |
102 | |
103 | def list_emails(page_id = current_page_id) |
104 | request "page/#{page_id}/emails/list" |
105 | end |
106 | alias :le :list_emails |
107 | |
108 | def show_email(email_id, page_id = current_page_id) |
109 | request "page/#{page_id}/emails/show/#{email_id}" |
110 | end |
111 | alias :se :show_email |
112 | |
113 | def destroy_email(email_id, page_id = current_page_id) |
114 | request "page/#{page_id}/emails/destroy/#{email_id}" |
115 | end |
116 | alias :de :destroy_email |
117 | |
118 | |
119 | # Tags ---- |
120 | |
121 | def list_pages_with_tag(tag_id) |
122 | request "tags/select/#{tag_id}" |
123 | end |
124 | alias :lpt :list_pages_with_tag |
125 | |
126 | def tag_page(tags, page_id = current_page_id) |
127 | request "page/#{page_id}/tags/tag", "tags" => tags |
128 | end |
129 | alias :tp :tag_page |
130 | |
131 | |
132 | # Pages ---- |
133 | |
134 | def list_pages |
135 | request "pages/all" |
136 | end |
137 | alias :lp :list_pages |
138 | |
139 | def create_page(title, body) |
140 | request "pages/new", "page" => { "title" => title, "description" => body } |
141 | end |
142 | alias :cp :create_page |
143 | |
144 | def show_page(page_id = current_page_id) |
145 | request "page/#{page_id}" |
146 | end |
147 | alias :sp :show_page |
148 | |
149 | def destroy_page(page_id = current_page_id) |
150 | request "page/#{page_id}/destroy" |
151 | end |
152 | alias :dp :destroy_page |
153 | |
154 | def update_title(title, page_id = current_page_id) |
155 | request "page/#{page_id}/update_title", "page" => { "title" => title } |
156 | end |
157 | alias :ut :update_title |
158 | |
159 | def update_body(body, page_id = current_page_id) |
160 | request "page/#{page_id}/update_body", "page" => { "description" => body } |
161 | end |
162 | alias :ub :update_body |
163 | |
164 | def link_page(linked_page_id, page_id = current_page_id) |
165 | request "page/#{page_id}/link", "linked_page_id" => linked_page_id |
166 | end |
167 | alias :lip :link_page |
168 | |
169 | def unlink_page(linked_page_id, page_id = current_page_id) |
170 | request "page/#{page_id}/unlink", "linked_page_id" => linked_page_id |
171 | end |
172 | alias :ulip :unlink_page |
173 | |
174 | def share_page(email_addresses, public_page = nil, page_id = current_page_id) |
175 | parameters = { "email_addresses" => email_addresses } |
176 | parameters = parameters.merge({ "page" => { "public" => public_page ? "1" : "0" }}) unless public_page.nil? |
177 | request "page/#{page_id}/share", parameters |
178 | end |
179 | |
180 | |
181 | # Reminders --- |
182 | |
183 | def list_reminders |
184 | request "reminders" |
185 | end |
186 | alias :lr :list_reminders |
187 | |
188 | def create_reminder(content, remind_at = "") |
189 | request "reminders/create", "reminder" => { "content" => content, "remind_at" => remind_at } |
190 | end |
191 | alias :cr :create_reminder |
192 | |
193 | def update_reminder(reminder_id, content, remind_at) |
194 | request "reminders/update/#{reminder_id}", "reminder" => { "content" => content, "remind_at" => remind_at } |
195 | end |
196 | alias :ur :update_reminder |
197 | |
198 | def destroy_reminder(reminder_id) |
199 | request "reminders/destroy/#{reminder_id}" |
200 | end |
201 | alias :dr :destroy_reminder |
202 | end |