rt-client 0.2.2 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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