rt-client 0.2.2 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/rt/client.rb +52 -6
  2. data/rt/rtxmlsrv.rb +15 -0
  3. metadata +88 -35
data/rt/client.rb CHANGED
@@ -5,6 +5,7 @@ require "rest_client"
5
5
  require "tmail"
6
6
  require "iconv"
7
7
  require 'mime/types' # requires both nokogiri and rcov. Yuck.
8
+ require 'date'
8
9
 
9
10
  ##A ruby library API to Request Tracker's REST interface. Requires the
10
11
  ##rubygems rest-client, tmail and mime-types to be installed. You can
@@ -20,7 +21,7 @@ require 'mime/types' # requires both nokogiri and rcov. Yuck.
20
21
 
21
22
  class RT_Client
22
23
 
23
- UA = "Mozilla/5.0 ruby RT Client Interface 0.2"
24
+ UA = "Mozilla/5.0 ruby RT Client Interface 0.3.1"
24
25
  attr_reader :status, :site, :version, :cookies, :server, :user, :cookie
25
26
 
26
27
  # Create a new RT_Client object. Load up our stored cookie and check it.
@@ -53,7 +54,7 @@ class RT_Client
53
54
  # cookies=<directory>
54
55
  def initialize(*params)
55
56
  @boundary = "----xYzZY#{rand(1000000).to_s}xYzZY"
56
- @version = "0.2"
57
+ @version = "0.3"
57
58
  @status = "Not connected"
58
59
  @server = "http://localhost/"
59
60
  @user = "rt_user"
@@ -143,7 +144,11 @@ class RT_Client
143
144
  sid = $~[2]
144
145
  end
145
146
  reply = {}
146
- resp = @site["#{type}/#{sid}/show"].get
147
+ if type.downcase == 'user'
148
+ resp = @site["#{type}/#{sid}"].get
149
+ else
150
+ resp = @site["#{type}/#{sid}/show"].get
151
+ end
147
152
  resp.gsub!(/RT\/\d\.\d\.\d\s\d{3}\s.*\n\n/,"") # toss the HTTP response
148
153
  resp.gsub!(/\n\n/,"\n") # remove double spacing, TMail stops at a blank line
149
154
  return {:error => resp, } if resp =~ /does not exist./
@@ -215,7 +220,7 @@ class RT_Client
215
220
  # For a full list of possible parameters that you can specify, look at
216
221
  # "/opt/rt/bin/rt edit user/1"
217
222
  #
218
- # new_id = rt.create_user(:Name => "Joe Smith", :EmailAddress => "joes\@here.com")
223
+ # new_id = rt.create_user(:Name => "Joe_Smith", :EmailAddress => "joes\@here.com")
219
224
  def create_user(field_hash)
220
225
  field_hash[:id] = "user/new"
221
226
  payload = compose(field_hash)
@@ -228,7 +233,27 @@ class RT_Client
228
233
  end
229
234
  new_user # return the new user id or the full REST response
230
235
  end
231
-
236
+
237
+ # edit or create a user. If the user exists, edits the user as "edit" would.
238
+ # If the user doesn't exist, creates it as "create_user" would.
239
+ def edit_or_create_user(field_hash)
240
+ if field_hash.has_key? :id
241
+ id = field_hash[:id]
242
+ if id !~ /^user\//
243
+ id = "user/#{id}"
244
+ field_hash[:id] = id
245
+ end
246
+ else
247
+ raise "RT_Client.edit_or_create_user require a user id in the 'id' key."
248
+ end
249
+ resp1 = "not called"
250
+ resp2 = "not called"
251
+ resp1 = edit(field_hash)
252
+ resp2 = create_user(field_hash) if resp1 =~ /does not exist./
253
+ resp = "Edit: #{resp1}\nCreate:#{resp2}"
254
+ resp
255
+ end
256
+
232
257
  # edit an existing ticket/user. Requires a hash containing RT
233
258
  # form fields as keys. the key :id is required.
234
259
  # returns the complete REST response, whatever it is. If the
@@ -276,6 +301,17 @@ class RT_Client
276
301
  @site["ticket/#{id}/comment"].post payload
277
302
  end
278
303
 
304
+ def usersearch(field_hash)
305
+ if field_hash.has_key? :EmailAddress
306
+ email = field_hash[:EmailAddress]
307
+ else
308
+ raise "RT_Client.usersearch requires a user email in the 'EmailAddress' key."
309
+ end
310
+ payload = compose(field_hash)
311
+ resp = @site["search/user/?query=EmailAddress='#{email}'"].post payload
312
+ resp
313
+ end
314
+
279
315
  # correspond on a ticket. Requires a hash, which must have an :id key
280
316
  # containing the ticket number. Returns the REST response. For a list of
281
317
  # fields you can use in correspondence, try "/opt/rt3/bin/rt correspond
@@ -369,7 +405,17 @@ class RT_Client
369
405
  th = TMail::Mail.parse(ticket)
370
406
  reply = {}
371
407
  th.each_header do |k,v|
372
- reply["#{k}"] = v.to_s
408
+ case k
409
+ when 'created','due','told','lastupdated','started'
410
+ begin
411
+ vv = DateTime.parse(v.to_s)
412
+ reply["#{k}"] = vv.strftime("%Y-%m-%d %H:%M:%S")
413
+ rescue ArgumentError
414
+ reply["#{k}"] = v.to_s
415
+ end
416
+ else
417
+ reply["#{k}"] = v.to_s
418
+ end
373
419
  end
374
420
  replies.push reply
375
421
  end
data/rt/rtxmlsrv.rb CHANGED
@@ -8,6 +8,7 @@ require "rubygems" # so we can load gems
8
8
  require "rt/client" # rt-client REST library
9
9
  require "xmlrpc/server" # that's what we're doing
10
10
  require "date" # for parsing arbitrary date formats
11
+ require "pp"
11
12
 
12
13
  PORT=8080
13
14
  MAX_CONN=50
@@ -43,6 +44,7 @@ class TicketSrv
43
44
  meth 'string create(struct)','Calls RT_Client::create'
44
45
  meth 'string create_user(struct)','Calls RT_Client::create_user'
45
46
  meth 'string edit(struct)','Calls RT_Client::edit'
47
+ meth 'string edit_or_create_user(struct)','Calls RT_Client::edit_or_create_user'
46
48
  meth 'struct get_attachment(struct)','Calls RT_Client::get_attachment'
47
49
  meth 'struct history(struct)','Calls RT_Client::history (long form)'
48
50
  meth 'struct history_item(struct)','Calls RT_Client::history_item'
@@ -132,6 +134,19 @@ class TicketSrv
132
134
  val
133
135
  end
134
136
 
137
+ # Allows new users to be edited or created if they don't exist
138
+ def edit_or_create_user(struct)
139
+ struct.remapkeys!
140
+ if struct.has_key? :user and struct.has_key? :pass
141
+ rt = RT_Client.new(:user => struct[:user], :pass => struct[:pass])
142
+ else
143
+ rt = RT_Client.new
144
+ end
145
+ val = rt.edit_or_create_user(struct)
146
+ rt = nil
147
+ val
148
+ end
149
+
135
150
  # Allows existing ticket to be modified via RT_Client::edit
136
151
  def edit(struct)
137
152
  struct.remapkeys!
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rt-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ hash: 17
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 3
9
+ - 1
10
+ version: 0.3.1
5
11
  platform: ruby
6
12
  authors:
7
13
  - Tom Lahti
@@ -9,80 +15,117 @@ autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
17
 
12
- date: 2009-06-01 00:00:00 -07:00
18
+ date: 2010-07-30 00:00:00 -07:00
13
19
  default_executable:
14
20
  dependencies:
15
21
  - !ruby/object:Gem::Dependency
16
22
  name: rest-client
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
20
26
  requirements:
21
27
  - - ">="
22
28
  - !ruby/object:Gem::Version
29
+ hash: 25
30
+ segments:
31
+ - 0
32
+ - 9
23
33
  version: "0.9"
24
- version:
34
+ type: :runtime
35
+ version_requirements: *id001
25
36
  - !ruby/object:Gem::Dependency
26
37
  name: tmail
27
- type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
30
41
  requirements:
31
42
  - - ">="
32
43
  - !ruby/object:Gem::Version
44
+ hash: 31
45
+ segments:
46
+ - 1
47
+ - 2
48
+ - 0
33
49
  version: 1.2.0
34
- version:
50
+ type: :runtime
51
+ version_requirements: *id002
35
52
  - !ruby/object:Gem::Dependency
36
53
  name: mime-types
37
- type: :runtime
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
54
+ prerelease: false
55
+ requirement: &id003 !ruby/object:Gem::Requirement
56
+ none: false
40
57
  requirements:
41
58
  - - ">="
42
59
  - !ruby/object:Gem::Version
60
+ hash: 47
61
+ segments:
62
+ - 1
63
+ - 16
43
64
  version: "1.16"
44
- version:
65
+ type: :runtime
66
+ version_requirements: *id003
45
67
  - !ruby/object:Gem::Dependency
46
68
  name: archive-tar-minitar
47
- type: :runtime
48
- version_requirement:
49
- version_requirements: !ruby/object:Gem::Requirement
69
+ prerelease: false
70
+ requirement: &id004 !ruby/object:Gem::Requirement
71
+ none: false
50
72
  requirements:
51
73
  - - ">="
52
74
  - !ruby/object:Gem::Version
75
+ hash: 1
76
+ segments:
77
+ - 0
78
+ - 5
53
79
  version: "0.5"
54
- version:
80
+ type: :runtime
81
+ version_requirements: *id004
55
82
  - !ruby/object:Gem::Dependency
56
83
  name: nokogiri
57
- type: :runtime
58
- version_requirement:
59
- version_requirements: !ruby/object:Gem::Requirement
84
+ prerelease: false
85
+ requirement: &id005 !ruby/object:Gem::Requirement
86
+ none: false
60
87
  requirements:
61
88
  - - ">="
62
89
  - !ruby/object:Gem::Version
90
+ hash: 11
91
+ segments:
92
+ - 1
93
+ - 2
63
94
  version: "1.2"
64
- version:
95
+ type: :runtime
96
+ version_requirements: *id005
65
97
  - !ruby/object:Gem::Dependency
66
98
  name: hoe
67
- type: :runtime
68
- version_requirement:
69
- version_requirements: !ruby/object:Gem::Requirement
99
+ prerelease: false
100
+ requirement: &id006 !ruby/object:Gem::Requirement
101
+ none: false
70
102
  requirements:
71
103
  - - ">="
72
104
  - !ruby/object:Gem::Version
105
+ hash: 51
106
+ segments:
107
+ - 1
108
+ - 9
109
+ - 0
73
110
  version: 1.9.0
74
- version:
111
+ type: :runtime
112
+ version_requirements: *id006
75
113
  - !ruby/object:Gem::Dependency
76
114
  name: rcov
77
- type: :runtime
78
- version_requirement:
79
- version_requirements: !ruby/object:Gem::Requirement
115
+ prerelease: false
116
+ requirement: &id007 !ruby/object:Gem::Requirement
117
+ none: false
80
118
  requirements:
81
119
  - - ">="
82
120
  - !ruby/object:Gem::Version
121
+ hash: 27
122
+ segments:
123
+ - 0
124
+ - 8
83
125
  version: "0.8"
84
- version:
85
- description: RT_Client is a ruby object that accesses the REST interface version 1.0 of a Request Tracker instance. See http://www.bestpractical.com/ for Request Tracker.
126
+ type: :runtime
127
+ version_requirements: *id007
128
+ description: " RT_Client is a ruby object that accesses the REST interface version 1.0\n of a Request Tracker instance. See http://www.bestpractical.com/ for\n Request Tracker.\n"
86
129
  email: toml@bitstatement.net
87
130
  executables: []
88
131
 
@@ -95,6 +138,8 @@ files:
95
138
  - rt/rtxmlsrv.rb
96
139
  has_rdoc: true
97
140
  homepage:
141
+ licenses: []
142
+
98
143
  post_install_message:
99
144
  rdoc_options:
100
145
  - --inline-source
@@ -103,23 +148,31 @@ rdoc_options:
103
148
  require_paths:
104
149
  - .
105
150
  required_ruby_version: !ruby/object:Gem::Requirement
151
+ none: false
106
152
  requirements:
107
153
  - - ">="
108
154
  - !ruby/object:Gem::Version
155
+ hash: 59
156
+ segments:
157
+ - 1
158
+ - 8
159
+ - 6
109
160
  version: 1.8.6
110
- version:
111
161
  required_rubygems_version: !ruby/object:Gem::Requirement
162
+ none: false
112
163
  requirements:
113
164
  - - ">="
114
165
  - !ruby/object:Gem::Version
166
+ hash: 3
167
+ segments:
168
+ - 0
115
169
  version: "0"
116
- version:
117
170
  requirements:
118
171
  - A working installation of RT with the REST 1.0 interface
119
172
  rubyforge_project:
120
- rubygems_version: 1.2.0
173
+ rubygems_version: 1.3.7
121
174
  signing_key:
122
- specification_version: 2
175
+ specification_version: 3
123
176
  summary: Ruby object for RT access via REST
124
177
  test_files: []
125
178