roust 1.1.0 → 1.2.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 968edcfd5087edc2cbd40b101c4bdf216b4bd2c5
4
- data.tar.gz: c02c15afb304d95da146cb8c31814f013405922b
3
+ metadata.gz: 7a329790a5839a6b93c0d313c917c4c000f9e2a7
4
+ data.tar.gz: 8bcafe4ef3bb915df0eebec3b839932726862a1b
5
5
  SHA512:
6
- metadata.gz: 8a01186666603fd75969fd3a21245547b8834b5e8269342a9f9ef797a712c5924a94041ff842199e2eb1a9f8611dd65e366a15d1646dabc62bef928a4a587ee1
7
- data.tar.gz: 83c4391e331f0f58cd3ccf69b2dc1f96a9ea7013bf3e8b9f135efcdb693058c1cb37e983d483aa2110bbd0aa9019ff03ace536940e721bd45de053565ebebdd3
6
+ metadata.gz: 6782ef99b98042e6a70a1d4e3e25b7ea221fbbbf4132343ef877eb8af8cf3a188b710283388132f76b3d16048a9e81055e0f9af7dbd9f6eb4f158e224809a54f
7
+ data.tar.gz: d6d9576b2fefd81e07782030a3fa9cccfb4e2db8a999915d720b136f898ec50f937f5d7a1b5891d045f6b02db4bca2a185a75541435e187b2c5cecdd990653ca
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- roust (1.1.0)
4
+ roust (1.2.0)
5
5
  activesupport (>= 4.1.0)
6
6
  httparty (>= 0.13.1)
7
7
  mail (>= 2.5.4)
data/lib/roust/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class Roust
2
- VERSION = '1.1.0'
2
+ VERSION = '1.2.0'
3
3
  end
data/lib/roust.rb CHANGED
@@ -246,13 +246,33 @@ class Roust
246
246
  end
247
247
  end
248
248
 
249
- def user(email)
250
- response = self.class.get("/user/#{email}")
249
+ # id can be numeric (e.g. 28) or textual (e.g. john)
250
+ def user(id)
251
+ response = self.class.get("/user/#{id}")
251
252
 
252
253
  body, status = handle_response(response)
253
254
  case body
254
255
  when /No user named/
255
- {}
256
+ nil
257
+ else
258
+ body.gsub!(/\n\s*\n/,"\n") # remove blank lines for Mail
259
+ message = Mail.new(body)
260
+ Hash[message.header.fields.map {|header|
261
+ key = header.name.to_s.downcase
262
+ value = header.value.to_s
263
+ [ key, value ]
264
+ }]
265
+ end
266
+ end
267
+
268
+ # id can be numeric (e.g. 28) or textual (e.g. sales)
269
+ def queue(id)
270
+ response = self.class.get("/queue/#{id}")
271
+
272
+ body, status = handle_response(response)
273
+ case body
274
+ when /No queue named/
275
+ nil
256
276
  else
257
277
  body.gsub!(/\n\s*\n/,"\n") # remove blank lines for Mail
258
278
  message = Mail.new(body)
@@ -0,0 +1,11 @@
1
+ RT/3.4.6 200 Ok
2
+
3
+ id: queue/28
4
+ Name: support
5
+ Description: Bulletproof Networks Support
6
+ CorrespondAddress: support@bulletproof.net.au
7
+ CommentAddress: rt-comment@bulletproof.net
8
+ InitialPriority: 101
9
+ FinalPriority: 100
10
+ DefaultDueIn: 1
11
+
@@ -0,0 +1,5 @@
1
+ RT/3.4.6 200 Ok
2
+
3
+ # No queue named nil exists.
4
+
5
+ id: queue/nil
@@ -0,0 +1,5 @@
1
+ RT/3.4.6 200 Ok
2
+
3
+ # No user named nil exists.
4
+
5
+ id: user/nil
@@ -0,0 +1,177 @@
1
+ require 'spec_helper'
2
+ require 'roust'
3
+
4
+ describe "Roust" do
5
+ before do
6
+ @credentials = {
7
+ :server => 'http://rt.example.org',
8
+ :username => 'admin',
9
+ :password => 'password'
10
+ }
11
+ mocks_path = Pathname.new(__FILE__).parent.join('mocks')
12
+
13
+ stub_request(:post, "http://rt.example.org/index.html").
14
+ with(:body => {
15
+ "user"=>"admin",
16
+ "pass"=>"password",
17
+ }).
18
+ to_return(:status => 200, :body => "", :headers => {})
19
+
20
+ stub_request(:get, "http://rt.example.org/REST/1.0/ticket/1/show").
21
+ to_return(:status => 200,
22
+ :body => mocks_path.join('ticket-1-show.txt').read,
23
+ :headers => {})
24
+
25
+ stub_request(:get, "http://rt.example.org/REST/1.0/search/ticket?format=s&orderby=%2Bid&query%5Bquery%5D=id%20=%201%20or%20id%20=%202").
26
+ to_return(:status => 200,
27
+ :body => mocks_path.join('ticket-search-1-or-2.txt').read,
28
+ :headers => {})
29
+
30
+ stub_request(:get, "http://rt.example.org/REST/1.0/ticket/1/history?format=s").
31
+ to_return(:status => 200,
32
+ :body => mocks_path.join('ticket-1-history-short.txt').read,
33
+ :headers => {})
34
+
35
+ stub_request(:get, "http://rt.example.org/REST/1.0/ticket/1/history?format=l").
36
+ to_return(:status => 200,
37
+ :body => mocks_path.join('ticket-1-history-long.txt').read,
38
+ :headers => {})
39
+
40
+ stub_request(:get, "http://rt.example.org/REST/1.0/user/dan@us.example").
41
+ to_return(:status => 200,
42
+ :body => mocks_path.join('user-dan@us.example.txt').read,
43
+ :headers => {})
44
+
45
+ stub_request(:get, "http://rt.example.org/REST/1.0/user/nil").
46
+ to_return(:status => 200,
47
+ :body => mocks_path.join('user-nil.txt').read,
48
+ :headers => {})
49
+
50
+ stub_request(:get, "http://rt.example.org/REST/1.0/queue/13").
51
+ to_return(:status => 200,
52
+ :body => mocks_path.join('queue-13.txt').read,
53
+ :headers => {})
54
+
55
+ stub_request(:get, "http://rt.example.org/REST/1.0/queue/nil").
56
+ to_return(:status => 200,
57
+ :body => mocks_path.join('queue-nil.txt').read,
58
+ :headers => {})
59
+ end
60
+
61
+ describe 'authentication' do
62
+ it "authenticates on instantiation" do
63
+ rt = Roust.new(@credentials)
64
+ rt.authenticated?.should be_true
65
+ end
66
+ end
67
+
68
+ describe 'tickets' do
69
+ it "can list tickets matching a query" do
70
+ rt = Roust.new(@credentials)
71
+ rt.authenticated?.should be_true
72
+
73
+ results = rt.search(:query => "id = 1 or id = 2")
74
+ results.size.should == 2
75
+ results.each do |result|
76
+ result.size.should == 2
77
+ end
78
+ end
79
+
80
+ it "can fetch metadata on individual tickets" do
81
+ rt = Roust.new(@credentials)
82
+ rt.authenticated?.should be_true
83
+
84
+ ticket = rt.show("1")
85
+ ticket.should_not be_nil
86
+
87
+ attrs = %w(id Subject Queue) +
88
+ %w(Requestors Cc AdminCc Owner Creator) +
89
+ %w(Resolved Status) +
90
+ %w(Starts Started TimeLeft Due TimeWorked TimeEstimated) +
91
+ %w(LastUpdated Created Told) +
92
+ %w(Priority FinalPriority InitialPriority)
93
+
94
+ attrs.each do |attr|
95
+ ticket[attr].should_not be_nil, "#{attr} key doesn't exist"
96
+ end
97
+
98
+ %w(Requestors Cc AdminCc).each do |field|
99
+ ticket[field].size.should > 1
100
+ end
101
+ end
102
+
103
+ it "can fetch transactions on individual tickets" do
104
+ rt = Roust.new(@credentials)
105
+ rt.authenticated?.should be_true
106
+
107
+ short = rt.history("1", :format => "short")
108
+
109
+ short.size.should > 1
110
+ short.each do |txn|
111
+ txn.size.should == 2
112
+ txn.first.should match(/^\d+$/)
113
+ txn.last.should match(/^\w.*\w$/)
114
+ end
115
+
116
+ #attrs = %w(ticket data oldvalue creator timetaken) +
117
+ # %w(id type field newvalue content description) +
118
+ # %w(attachments created)
119
+ attrs = %w(ticket data oldvalue timetaken) +
120
+ %w(id type field newvalue content description)
121
+
122
+ long = rt.history("1", :format => "long")
123
+ long.size.should > 0
124
+ long.each do |txn|
125
+ attrs.each do |attr|
126
+ txn[attr].should_not be_nil, "#{attr} key doesn't exist"
127
+ end
128
+ end
129
+ end
130
+ end
131
+
132
+ describe 'user' do
133
+ it "can lookup user details" do
134
+ rt = Roust.new(@credentials)
135
+ rt.authenticated?.should be_true
136
+
137
+ attrs = %w(name realname gecos nickname emailaddress id lang password)
138
+
139
+ user = rt.user("dan@us.example")
140
+ attrs.each do |attr|
141
+ user[attr].should_not be_nil, "#{attr} key doesn't exist"
142
+ end
143
+ end
144
+
145
+ it 'returns nil for unknown users' do
146
+ rt = Roust.new(@credentials)
147
+ rt.authenticated?.should be_true
148
+
149
+ queue = rt.user('nil')
150
+ queue.should be_nil
151
+ end
152
+ end
153
+
154
+ describe 'queue' do
155
+ it "can lookup queue details" do
156
+ rt = Roust.new(@credentials)
157
+ rt.authenticated?.should be_true
158
+
159
+ attrs = %w(id name description correspondaddress commentaddress) +
160
+ %w(initialpriority finalpriority defaultduein)
161
+
162
+ queue = rt.queue('13')
163
+ attrs.each do |attr|
164
+ queue[attr].should_not be_nil, "#{attr} key doesn't exist"
165
+ end
166
+
167
+ end
168
+
169
+ it 'returns nil for unknown queues' do
170
+ rt = Roust.new(@credentials)
171
+ rt.authenticated?.should be_true
172
+
173
+ queue = rt.queue('nil')
174
+ queue.should be_nil
175
+ end
176
+ end
177
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roust
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lindsay Holmwood
@@ -71,13 +71,16 @@ files:
71
71
  - lib/roust.rb
72
72
  - lib/roust/version.rb
73
73
  - roust.gemspec
74
+ - spec/mocks/queue-13.txt
75
+ - spec/mocks/queue-nil.txt
74
76
  - spec/mocks/ticket-1-history-long.txt
75
77
  - spec/mocks/ticket-1-history-short.txt
76
78
  - spec/mocks/ticket-1-show.txt
77
79
  - spec/mocks/ticket-search-1-or-2.txt
78
80
  - spec/mocks/user-dan@us.example.txt
81
+ - spec/mocks/user-nil.txt
82
+ - spec/roust_spec.rb
79
83
  - spec/spec_helper.rb
80
- - spec/ticket_spec.rb
81
84
  homepage: http://github.com/bulletproofnetworks/roust
82
85
  licenses:
83
86
  - Apache 2.0
@@ -103,10 +106,13 @@ signing_key:
103
106
  specification_version: 4
104
107
  summary: Ruby client for RT's REST API
105
108
  test_files:
109
+ - spec/mocks/queue-13.txt
110
+ - spec/mocks/queue-nil.txt
106
111
  - spec/mocks/ticket-1-history-long.txt
107
112
  - spec/mocks/ticket-1-history-short.txt
108
113
  - spec/mocks/ticket-1-show.txt
109
114
  - spec/mocks/ticket-search-1-or-2.txt
110
115
  - spec/mocks/user-dan@us.example.txt
116
+ - spec/mocks/user-nil.txt
117
+ - spec/roust_spec.rb
111
118
  - spec/spec_helper.rb
112
- - spec/ticket_spec.rb
data/spec/ticket_spec.rb DELETED
@@ -1,124 +0,0 @@
1
- require 'spec_helper'
2
- require 'roust'
3
-
4
- describe "Roust" do
5
- before do
6
- @credentials = {
7
- :server => 'http://rt.example.org',
8
- :username => 'admin',
9
- :password => 'password'
10
- }
11
- mocks_path = Pathname.new(__FILE__).parent.join('mocks')
12
-
13
- stub_request(:post, "http://rt.example.org/index.html").
14
- with(:body => {
15
- "user"=>"admin",
16
- "pass"=>"password",
17
- }).
18
- to_return(:status => 200, :body => "", :headers => {})
19
-
20
- stub_request(:get, "http://rt.example.org/REST/1.0/ticket/1/show").
21
- to_return(:status => 200,
22
- :body => mocks_path.join('ticket-1-show.txt').read,
23
- :headers => {})
24
-
25
- stub_request(:get, "http://rt.example.org/REST/1.0/search/ticket?format=s&orderby=%2Bid&query%5Bquery%5D=id%20=%201%20or%20id%20=%202").
26
- to_return(:status => 200,
27
- :body => mocks_path.join('ticket-search-1-or-2.txt').read,
28
- :headers => {})
29
-
30
- stub_request(:get, "http://rt.example.org/REST/1.0/ticket/1/history?format=s").
31
- to_return(:status => 200,
32
- :body => mocks_path.join('ticket-1-history-short.txt').read,
33
- :headers => {})
34
-
35
- stub_request(:get, "http://rt.example.org/REST/1.0/ticket/1/history?format=l").
36
- to_return(:status => 200,
37
- :body => mocks_path.join('ticket-1-history-long.txt').read,
38
- :headers => {})
39
-
40
- stub_request(:get, "http://rt.example.org/REST/1.0/user/dan@us.example").
41
- to_return(:status => 200,
42
- :body => mocks_path.join('user-dan@us.example.txt').read,
43
- :headers => {})
44
- end
45
-
46
- it "authenticates on instantiation" do
47
- rt = Roust.new(@credentials)
48
- rt.authenticated?.should be_true
49
- end
50
-
51
- it "can list tickets matching a query" do
52
- rt = Roust.new(@credentials)
53
- rt.authenticated?.should be_true
54
-
55
- results = rt.search(:query => "id = 1 or id = 2")
56
- results.size.should == 2
57
- results.each do |result|
58
- result.size.should == 2
59
- end
60
- end
61
-
62
- it "can fetch metadata on individual tickets" do
63
- rt = Roust.new(@credentials)
64
- rt.authenticated?.should be_true
65
-
66
- ticket = rt.show("1")
67
- ticket.should_not be_nil
68
-
69
- attrs = %w(id Subject Queue) +
70
- %w(Requestors Cc AdminCc Owner Creator) +
71
- %w(Resolved Status) +
72
- %w(Starts Started TimeLeft Due TimeWorked TimeEstimated) +
73
- %w(LastUpdated Created Told) +
74
- %w(Priority FinalPriority InitialPriority)
75
-
76
- attrs.each do |attr|
77
- ticket[attr].should_not be_nil, "#{attr} key doesn't exist"
78
- end
79
-
80
- %w(Requestors Cc AdminCc).each do |field|
81
- ticket[field].size.should > 1
82
- end
83
- end
84
-
85
- it "can fetch transactions on individual tickets" do
86
- rt = Roust.new(@credentials)
87
- rt.authenticated?.should be_true
88
-
89
- short = rt.history("1", :format => "short")
90
-
91
- short.size.should > 1
92
- short.each do |txn|
93
- txn.size.should == 2
94
- txn.first.should match(/^\d+$/)
95
- txn.last.should match(/^\w.*\w$/)
96
- end
97
-
98
- #attrs = %w(ticket data oldvalue creator timetaken) +
99
- # %w(id type field newvalue content description) +
100
- # %w(attachments created)
101
- attrs = %w(ticket data oldvalue timetaken) +
102
- %w(id type field newvalue content description)
103
-
104
- long = rt.history("1", :format => "long")
105
- long.size.should > 0
106
- long.each do |txn|
107
- attrs.each do |attr|
108
- txn[attr].should_not be_nil, "#{attr} key doesn't exist"
109
- end
110
- end
111
- end
112
-
113
- it "can find user details" do
114
- rt = Roust.new(@credentials)
115
- rt.authenticated?.should be_true
116
-
117
- attrs = %w(name realname gecos nickname emailaddress id lang password)
118
-
119
- user = rt.user("dan@us.example")
120
- attrs.each do |attr|
121
- user[attr].should_not be_nil, "#{attr} key doesn't exist"
122
- end
123
- end
124
- end