zendesk2 0.0.23 → 0.1.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.
- data/.travis.yml +4 -2
- data/Gemfile +4 -1
- data/Guardfile +5 -4
- data/README.md +17 -0
- data/TODO.md +2 -0
- data/lib/zendesk2/client/models/audit_event.rb +33 -0
- data/lib/zendesk2/client/models/ticket.rb +86 -46
- data/lib/zendesk2/client/models/ticket_audit.rb +28 -0
- data/lib/zendesk2/client/models/ticket_audits.rb +36 -0
- data/lib/zendesk2/client/requests/create_ticket.rb +7 -5
- data/lib/zendesk2/client/requests/get_ccd_tickets.rb +1 -1
- data/lib/zendesk2/client/requests/get_ticket_audit.rb +37 -0
- data/lib/zendesk2/client/requests/get_ticket_audits.rb +22 -0
- data/lib/zendesk2/client/requests/update_ticket.rb +41 -3
- data/lib/zendesk2/client.rb +34 -27
- data/lib/zendesk2/version.rb +1 -1
- data/lib/zendesk2.rb +1 -1
- data/spec/spec_helper.rb +4 -1
- data/spec/tickets_spec.rb +15 -8
- data/spec/users_spec.rb +1 -1
- metadata +9 -2
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/Guardfile
CHANGED
@@ -1,9 +1,10 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
guard 'bundler' do
|
2
|
+
watch('Gemfile')
|
3
|
+
watch(/^.+\.gemspec/)
|
4
|
+
end
|
3
5
|
|
4
|
-
guard 'rspec'
|
6
|
+
guard 'rspec' do
|
5
7
|
watch(%r{^spec/.+_spec\.rb$})
|
6
8
|
watch(%r{^lib/(.+)\.rb$}) { "spec" }
|
7
9
|
watch('spec/spec_helper.rb') { "spec" }
|
8
10
|
end
|
9
|
-
|
data/README.md
CHANGED
@@ -164,6 +164,23 @@ Zendesk2::Client::Ticket.new(id: 1).save # performs an update
|
|
164
164
|
|
165
165
|
Attributes can be enumerated by the `attributes` method.
|
166
166
|
|
167
|
+
## Testing
|
168
|
+
### Running
|
169
|
+
|
170
|
+
$ bundle exec rspec
|
171
|
+
|
172
|
+
### Testing Live
|
173
|
+
|
174
|
+
Run against a real Zendesk installation by setting ```MOCK_ZENDESK=false```
|
175
|
+
|
176
|
+
$ MOCK_ZENDESK=false bundle exec rspec
|
177
|
+
|
178
|
+
Credentials are sourced from your ```~/.zendesk2``` file
|
179
|
+
|
180
|
+
Raw responses and requests can be echoed to STDOUT by adding ```VERBOSE=true```
|
181
|
+
|
182
|
+
$ VERBOSE=true bundle exec rspec
|
183
|
+
|
167
184
|
## Releasing
|
168
185
|
|
169
186
|
$ gem install gem-release
|
data/TODO.md
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
class Zendesk2::Client::AuditEvent < Cistern::Model
|
2
|
+
extend Zendesk2::Attributes
|
3
|
+
extend Forwardable
|
4
|
+
|
5
|
+
# @return [Integer] Automatically assigned when creating events
|
6
|
+
identity :id, type: :integer
|
7
|
+
# @return [String] Has the value Comment
|
8
|
+
attribute :type, type: :string
|
9
|
+
# @return [String] The actual comment made by the author
|
10
|
+
attribute :body, type: :string
|
11
|
+
# @return [String] The actual comment made by the author formatted to HTML
|
12
|
+
attribute :html_body, type: :string
|
13
|
+
# @return [Boolean] If this is a public comment or an internal agents only note
|
14
|
+
attribute :public, type: :boolean
|
15
|
+
# @return [Boolean] If this comment is trusted or marked as being potentially fraudulent
|
16
|
+
attribute :trusted, type: :boolean
|
17
|
+
# @return [Integer] The id of the author of this comment
|
18
|
+
attribute :author_id, type: :integer
|
19
|
+
# @return [Array] The attachments on this comment as Attachment objects
|
20
|
+
attribute :attachments, type: :array
|
21
|
+
|
22
|
+
# @return [Zendesk2::Client::TicketAudit] audit that includes this event
|
23
|
+
attr_accessor :ticket_audit
|
24
|
+
|
25
|
+
def_delegators :ticket_audit, :created_at
|
26
|
+
|
27
|
+
# @return [Zendesk2::Client::User] event author
|
28
|
+
def author
|
29
|
+
requires :author_id
|
30
|
+
|
31
|
+
self.connection.users.get(self.author_id)
|
32
|
+
end
|
33
|
+
end
|
@@ -3,44 +3,76 @@ class Zendesk2::Client::Ticket < Zendesk2::Model
|
|
3
3
|
|
4
4
|
PARAMS = %w[external_id via requester_id submitter_id assignee_id organization_id subject description fields recipient status collaborator_ids]
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
attribute :
|
10
|
-
|
11
|
-
attribute :type
|
12
|
-
attribute :subject
|
13
|
-
attribute :description
|
14
|
-
attribute :priority
|
15
|
-
attribute :status
|
16
|
-
attribute :recipient
|
17
|
-
attribute :requester_id, type: :integer
|
18
|
-
attribute :submitter_id, type: :integer
|
19
|
-
attribute :assignee_id, type: :integer
|
20
|
-
attribute :organization_id, type: :integer
|
21
|
-
attribute :group_id, type: :integer
|
6
|
+
# @return [Integer] Automatically assigned when creating tickets
|
7
|
+
identity :id, type: :integer
|
8
|
+
# @return [Integer] What agent is currently assigned to the ticket
|
9
|
+
attribute :assignee_id, type: :integer
|
10
|
+
# @return [Array] Who are currently CC'ed on the ticket
|
22
11
|
attribute :collaborator_ids, type: :array
|
23
|
-
|
24
|
-
attribute :
|
25
|
-
|
26
|
-
attribute :
|
27
|
-
|
28
|
-
attribute :
|
12
|
+
# @return [Time] When this record was created
|
13
|
+
attribute :created_at, type: :time
|
14
|
+
# @return [Array] The custom fields of the ticket
|
15
|
+
attribute :custom_fields, type: :array
|
16
|
+
# @return [String] The first comment on the ticket
|
17
|
+
attribute :description, type: :string
|
18
|
+
# @return [Time] If this is a ticket of type "task" it has a due date. Due date format uses ISO 8601 format.
|
19
|
+
attribute :due_at, type: :time
|
20
|
+
# @return [String] A unique external id, you can use this to link Zendesk tickets to local records
|
21
|
+
attribute :external_id, type: :string
|
22
|
+
# @return [Integer] The topic this ticket originated from, if any
|
23
|
+
attribute :forum_topic_id, type: :integer
|
24
|
+
# @return [Integer] The group this ticket is assigned to
|
25
|
+
attribute :group_id, type: :integer
|
26
|
+
# @return [Boolean] Is true of this ticket has been marked as a problem, false otherwise
|
27
|
+
attribute :has_incidents, type: :boolean
|
28
|
+
# @return [Integer] The organization of the requester
|
29
|
+
attribute :organization_id, type: :integer
|
30
|
+
# @return [String] Priority, defines the urgency with which the ticket should be addressed: "urgent", "high", "normal", "low"
|
31
|
+
attribute :priority, type: :string
|
32
|
+
# @return [Integer] The problem this incident is linked to, if any
|
33
|
+
attribute :problem_id, type: :integer
|
34
|
+
# @return [String] The original recipient e-mail address of the ticket
|
35
|
+
attribute :recipient, type: :string
|
36
|
+
# @return [Integer] The user who requested this ticket
|
37
|
+
attribute :requester_id, type: :integer
|
38
|
+
# @return [Hash] The satisfaction rating of the ticket, if it exists
|
39
|
+
attribute :satisfaction_rating
|
40
|
+
# @return [Array] The ids of the sharing agreements used for this ticket
|
41
|
+
attribute :sharing_agreement_ids, type: :array
|
42
|
+
# @return [String] The state of the ticket, "new", "open", "pending", "hold", "solved", "closed"
|
43
|
+
attribute :status, type: :string
|
44
|
+
# @return [String] The value of the subject field for this ticket
|
45
|
+
attribute :subject, type: :string
|
46
|
+
# @return [Integer] The user who submitted the ticket; this is the currently authenticated API user
|
47
|
+
attribute :submitter_id, type: :integer
|
48
|
+
# @return [Array] The array of tags applied to this ticket
|
49
|
+
attribute :tags, type: :array
|
50
|
+
# @return [String] The type of this ticket, i.e. "problem", "incident", "question" or "task"
|
51
|
+
attribute :type, type: :string
|
52
|
+
# @return [Time] When this record last got updated
|
53
|
+
attribute :updated_at, type: :time
|
54
|
+
# @return [String] The API url of this ticket
|
55
|
+
attribute :url, type: :string
|
56
|
+
# @return [Hash] This object explains how the ticket was created
|
57
|
+
attribute :via
|
29
58
|
|
59
|
+
# @return [Zendesk2::Client::Organization] organization assigned to ticket
|
30
60
|
assoc_reader :organization
|
61
|
+
# @return [Zendesk2::Client::User] user that requested the ticket
|
31
62
|
assoc_accessor :requester, collection: :users
|
63
|
+
# @return [Zendesk2::Client::User] user that submitted the ticket
|
32
64
|
assoc_reader :submitter, collection: :users
|
33
65
|
|
34
66
|
def save!
|
35
|
-
if new_record?
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
67
|
+
data = if new_record?
|
68
|
+
requires :subject, :description
|
69
|
+
connection.create_ticket(params).body["ticket"]
|
70
|
+
else
|
71
|
+
requires :identity
|
72
|
+
connection.update_ticket(params.merge("id" => self.identity)).body["ticket"]
|
73
|
+
end
|
74
|
+
|
75
|
+
merge_attributes(data)
|
44
76
|
end
|
45
77
|
|
46
78
|
def destroy
|
@@ -49,31 +81,40 @@ class Zendesk2::Client::Ticket < Zendesk2::Model
|
|
49
81
|
connection.destroy_ticket("id" => self.identity)
|
50
82
|
end
|
51
83
|
|
84
|
+
# Adds a ticket comment
|
85
|
+
#
|
86
|
+
# @param [String] text comment body
|
87
|
+
# @param [Hash] options comment options
|
88
|
+
# @option options [Array] :attachments Attachment to upload with comment
|
89
|
+
# @option options [Boolean] :public (true)
|
90
|
+
def comment(text, options={})
|
91
|
+
requires :identity
|
92
|
+
|
93
|
+
options[:public] = true if options[:public].nil?
|
94
|
+
comment = Zendesk2.stringify_keys(options).merge("body" => text)
|
95
|
+
|
96
|
+
connection.update_ticket("id" => self.identity, "comment" => comment)
|
97
|
+
end
|
98
|
+
|
99
|
+
# @return [Array<Zendesk2::Client::User>] All users CCD on this ticket
|
52
100
|
def collaborators
|
53
101
|
self.collaborator_ids.map{|cid| self.connection.users.get(cid)}
|
54
102
|
end
|
55
103
|
|
104
|
+
# Update list of users to be CCD on this ticket
|
105
|
+
# @param [Array<Zendesk2::Client::User>] collaborators list of users
|
56
106
|
def collaborators=(collaborators)
|
57
|
-
self.collaborator_ids= collaborators.map(&:identity)
|
58
|
-
end
|
59
|
-
|
60
|
-
def destroyed?
|
61
|
-
!self.reload
|
107
|
+
self.collaborator_ids = collaborators.map(&:identity)
|
62
108
|
end
|
63
109
|
|
110
|
+
# @return [Zendesk2::Client::TicketAudits] all audits for this ticket
|
64
111
|
def audits
|
65
|
-
connection.
|
112
|
+
self.connection.ticket_audits(:ticket_id => self.identity).all
|
66
113
|
end
|
67
114
|
|
115
|
+
# @return [Array<Zendesk2::Client::AuditEvent>] audit events of type 'Comment'
|
68
116
|
def comments
|
69
|
-
|
70
|
-
audits.each do |audit|
|
71
|
-
events = audit['events'].select { |e| e['type'] == 'Comment' }
|
72
|
-
events.each do |event|
|
73
|
-
comments << event.merge({'created_at' => audit['created_at'], 'author_id' => audit['author_id']})
|
74
|
-
end
|
75
|
-
end
|
76
|
-
comments
|
117
|
+
audits.map{|audit| audit.events.select{|e| e.type == "Comment"}}.flatten
|
77
118
|
end
|
78
119
|
|
79
120
|
private
|
@@ -81,5 +122,4 @@ class Zendesk2::Client::Ticket < Zendesk2::Model
|
|
81
122
|
def params
|
82
123
|
Cistern::Hash.slice(Zendesk2.stringify_keys(attributes), *PARAMS)
|
83
124
|
end
|
84
|
-
|
85
125
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class Zendesk2::Client::TicketAudit < Cistern::Model
|
2
|
+
extend Zendesk2::Attributes
|
3
|
+
|
4
|
+
# @return [Integer] Automatically assigned when creating audits
|
5
|
+
identity :id, type: :integer
|
6
|
+
# @return [Integer] The ID of the associated ticket
|
7
|
+
attribute :ticket_id, type: :integer
|
8
|
+
# @return [Hash] Metadata for the audit, custom and system data
|
9
|
+
attribute :metadata
|
10
|
+
# @return [Hash] This object explains how this audit was created
|
11
|
+
attribute :via
|
12
|
+
# @return [Time] The time the audit was created
|
13
|
+
attribute :created_at, type: :time
|
14
|
+
# @return [Integer] The user who created the audit
|
15
|
+
attribute :author_id, type: :integer
|
16
|
+
# @return [Array] An array of the events that happened in this audit
|
17
|
+
attribute :events, type: :array
|
18
|
+
|
19
|
+
def ticket
|
20
|
+
requires :ticket_id
|
21
|
+
|
22
|
+
self.connection.tickets.get(self.ticket_id)
|
23
|
+
end
|
24
|
+
|
25
|
+
def events
|
26
|
+
(self.attributes[:events] || []).map{|ae| self.connection.audit_event(ae.merge(ticket_audit: self))}
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
class Zendesk2::Client::TicketAudits < Zendesk2::Collection
|
2
|
+
include Zendesk2::PagedCollection
|
3
|
+
|
4
|
+
model Zendesk2::Client::TicketAudit
|
5
|
+
|
6
|
+
attribute :ticket_id, type: :integer
|
7
|
+
|
8
|
+
self.collection_method = :get_ticket_audits
|
9
|
+
self.collection_root = "audits"
|
10
|
+
self.model_method = :get_ticket_audit
|
11
|
+
self.model_root = "audit"
|
12
|
+
|
13
|
+
def ticket
|
14
|
+
self.connection.tickets.get(self.ticket_id)
|
15
|
+
end
|
16
|
+
|
17
|
+
def all(params={})
|
18
|
+
requires :ticket_id
|
19
|
+
|
20
|
+
body = connection.send(collection_method, {"ticket_id" => self.ticket_id}.merge(params)).body
|
21
|
+
|
22
|
+
collection = self.clone.load(body[collection_root])
|
23
|
+
collection.merge_attributes(Cistern::Hash.slice(body, "count", "next_page", "previous_page"))
|
24
|
+
collection
|
25
|
+
end
|
26
|
+
|
27
|
+
def get(id)
|
28
|
+
requires :ticket_id
|
29
|
+
|
30
|
+
if data = self.connection.send(model_method, {"ticket_id" => self.ticket_id, "id" => id}).body[self.model_root]
|
31
|
+
new(data)
|
32
|
+
end
|
33
|
+
rescue Zendesk2::Error
|
34
|
+
nil
|
35
|
+
end
|
36
|
+
end
|
@@ -21,12 +21,14 @@ class Zendesk2::Client
|
|
21
21
|
"collaborator_ids" => [],
|
22
22
|
}.merge(params)
|
23
23
|
|
24
|
-
record["requester_id"] ||=
|
25
|
-
record["submitter_id"]=
|
24
|
+
record["requester_id"] ||= current_user_id
|
25
|
+
record["submitter_id"] = current_user_id
|
26
|
+
|
27
|
+
# FIXME: throw error if user doesn't exist?
|
26
28
|
requester = self.data[:users][record["requester_id"]]
|
27
|
-
|
28
|
-
|
29
|
-
self.data[:tickets][identity]= record
|
29
|
+
record["organization_id"] = requester["organization_id"]
|
30
|
+
|
31
|
+
self.data[:tickets][identity] = record
|
30
32
|
|
31
33
|
response(
|
32
34
|
:method => :post,
|
@@ -16,7 +16,7 @@ class Zendesk2::Client
|
|
16
16
|
def get_ccd_tickets(params={})
|
17
17
|
id = params["id"]
|
18
18
|
|
19
|
-
page(params, :tickets, "/
|
19
|
+
page(params, :tickets, "/users/#{id}/tickets/ccd.json", "tickets", filter: lambda{|c| c.select{|u| u["collaborator_ids"].include?(id)}})
|
20
20
|
end
|
21
21
|
end # Mock
|
22
22
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
class Zendesk2::Client
|
2
|
+
class Real
|
3
|
+
def get_ticket_audit(params={})
|
4
|
+
id = params["id"]
|
5
|
+
ticket_id = params["ticket_id"]
|
6
|
+
|
7
|
+
request(
|
8
|
+
:method => :get,
|
9
|
+
:path => "/tickets/#{ticket_id}/audits/#{id}.json"
|
10
|
+
)
|
11
|
+
end
|
12
|
+
end # Real
|
13
|
+
|
14
|
+
class Mock
|
15
|
+
def get_ticket_audit(params={})
|
16
|
+
id = params["id"]
|
17
|
+
ticket_id = params["ticket_id"]
|
18
|
+
|
19
|
+
path = "/ticket_audits/#{id}.json"
|
20
|
+
|
21
|
+
if body = self.data[:ticket_audits][id]
|
22
|
+
response(
|
23
|
+
:path => path,
|
24
|
+
:body => {
|
25
|
+
"ticket_audit" => body
|
26
|
+
},
|
27
|
+
)
|
28
|
+
else
|
29
|
+
response(
|
30
|
+
:path => path,
|
31
|
+
:status => 404,
|
32
|
+
:body => {"error" => "RecordNotFound", "description" => "Not found"},
|
33
|
+
)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end # Mock
|
37
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class Zendesk2::Client
|
2
|
+
class Real
|
3
|
+
def get_ticket_audits(params={})
|
4
|
+
ticket_id = params["ticket_id"]
|
5
|
+
page_params = Zendesk2.paging_parameters(params)
|
6
|
+
|
7
|
+
request(
|
8
|
+
:params => page_params,
|
9
|
+
:method => :get,
|
10
|
+
:path => "/tickets/#{ticket_id}/audits.json",
|
11
|
+
)
|
12
|
+
end
|
13
|
+
end # Real
|
14
|
+
|
15
|
+
class Mock
|
16
|
+
def get_ticket_audits(params={})
|
17
|
+
ticket_id = params["ticket_id"]
|
18
|
+
|
19
|
+
page(params, :ticket_audits, "/tickets/#{ticket_id}/audits.json", "audits", filter: lambda{|c| c.select{|a| a["ticket_id"] == ticket_id}})
|
20
|
+
end
|
21
|
+
end # Mock
|
22
|
+
end
|
@@ -14,12 +14,50 @@ class Zendesk2::Client
|
|
14
14
|
end
|
15
15
|
class Mock
|
16
16
|
def update_ticket(params={})
|
17
|
-
|
18
|
-
body
|
17
|
+
ticket_id = params.delete("id")
|
18
|
+
body = self.data[:tickets][ticket_id].merge!(params)
|
19
|
+
|
20
|
+
if comment = params["comment"]
|
21
|
+
audit_id = self.class.new_id
|
22
|
+
self.data[:ticket_audits][audit_id] = {
|
23
|
+
"id" => audit_id,
|
24
|
+
"ticket_id" => ticket_id,
|
25
|
+
"created_at" => Time.now,
|
26
|
+
"author_id" => current_user_id,
|
27
|
+
"via" => {
|
28
|
+
"channel" => "api",
|
29
|
+
"source" => {
|
30
|
+
"form" => {},
|
31
|
+
"to" => {},
|
32
|
+
"rel" => nil,
|
33
|
+
}
|
34
|
+
},
|
35
|
+
"metadata" => {
|
36
|
+
"system" => {
|
37
|
+
"client" => Zendesk2::Client::USER_AGENT,
|
38
|
+
"ip_address" => "127.0.0.1",
|
39
|
+
"location" => "Oakland, CA, United States",
|
40
|
+
"latitude" => 37.83449999999999,
|
41
|
+
"longitude" => -122.2647,
|
42
|
+
},
|
43
|
+
"custom" => {},
|
44
|
+
},
|
45
|
+
"events" => [
|
46
|
+
"id" => self.class.new_id,
|
47
|
+
"type" => "Comment",
|
48
|
+
"author_id" => current_user_id,
|
49
|
+
"body" => comment["body"],
|
50
|
+
"html_body" => "<p>#{comment["body"]}</p>",
|
51
|
+
"public" => comment["public"].nil? ? true : comment["public"],
|
52
|
+
"trusted" => comment["trusted"].nil? ? true : comment["trusted"],
|
53
|
+
"attachments" => comment["attachments"] || [],
|
54
|
+
]
|
55
|
+
}
|
56
|
+
end
|
19
57
|
|
20
58
|
response(
|
21
59
|
:method => :put,
|
22
|
-
:path => "/tickets/#{
|
60
|
+
:path => "/tickets/#{ticket_id}.json",
|
23
61
|
:body => {
|
24
62
|
"ticket" => body
|
25
63
|
},
|
data/lib/zendesk2/client.rb
CHANGED
@@ -1,64 +1,70 @@
|
|
1
1
|
class Zendesk2::Client < Cistern::Service
|
2
|
+
USER_AGENT = "Ruby/#{RUBY_VERSION} (#{RUBY_PLATFORM}; #{RUBY_ENGINE}) Zendesk2/#{Zendesk2::VERSION} Faraday/#{Faraday::VERSION}".freeze
|
2
3
|
|
3
4
|
model_path "zendesk2/client/models"
|
4
5
|
request_path "zendesk2/client/requests"
|
5
6
|
|
6
|
-
model :category
|
7
7
|
collection :categories
|
8
|
-
model :forum
|
9
8
|
collection :forums
|
10
|
-
|
11
|
-
collection :
|
12
|
-
|
9
|
+
collection :organizations
|
10
|
+
collection :ticket_audits
|
11
|
+
collection :tickets
|
13
12
|
collection :topic_comments
|
13
|
+
collection :topics
|
14
|
+
collection :users
|
15
|
+
model :audit_event
|
16
|
+
model :category
|
17
|
+
model :forum
|
14
18
|
model :organization
|
15
|
-
collection :organizations
|
16
19
|
model :ticket
|
17
|
-
|
20
|
+
model :ticket_audit
|
21
|
+
model :topic
|
22
|
+
model :topic_comment
|
18
23
|
model :user
|
19
|
-
collection :users
|
20
24
|
|
21
25
|
request :create_category
|
22
26
|
request :create_forum
|
23
|
-
request :create_topic
|
24
|
-
request :create_topic_comment
|
25
27
|
request :create_organization
|
26
28
|
request :create_ticket
|
29
|
+
request :create_topic
|
30
|
+
request :create_topic_comment
|
27
31
|
request :create_user
|
28
32
|
request :destroy_category
|
29
33
|
request :destroy_forum
|
30
|
-
request :destroy_topic
|
31
|
-
request :destroy_topic_comment
|
32
34
|
request :destroy_organization
|
33
35
|
request :destroy_ticket
|
36
|
+
request :destroy_topic
|
37
|
+
request :destroy_topic_comment
|
34
38
|
request :destroy_user
|
35
39
|
request :get_audits
|
36
|
-
request :
|
40
|
+
request :get_categories
|
37
41
|
request :get_category
|
42
|
+
request :get_ccd_tickets
|
43
|
+
request :get_current_user
|
38
44
|
request :get_forum
|
39
|
-
request :
|
40
|
-
request :get_topic_comment
|
45
|
+
request :get_forums
|
41
46
|
request :get_organization
|
42
47
|
request :get_organization_tickets
|
43
48
|
request :get_organization_users
|
44
|
-
request :get_ticket
|
45
|
-
request :get_user
|
46
|
-
request :get_categories
|
47
|
-
request :get_forums
|
48
|
-
request :get_topics
|
49
|
-
request :get_topic_comments
|
50
49
|
request :get_organizations
|
51
50
|
request :get_requested_tickets
|
52
|
-
request :
|
51
|
+
request :get_ticket
|
52
|
+
request :get_ticket_audit
|
53
|
+
request :get_ticket_audits
|
53
54
|
request :get_tickets
|
55
|
+
request :get_topic
|
56
|
+
request :get_topic_comment
|
57
|
+
request :get_topic_comments
|
58
|
+
request :get_topics
|
59
|
+
request :get_user
|
54
60
|
request :get_users
|
55
61
|
request :search
|
56
62
|
request :update_category
|
57
63
|
request :update_forum
|
58
|
-
request :update_topic
|
59
|
-
request :update_topic_comment
|
60
64
|
request :update_organization
|
61
65
|
request :update_ticket
|
66
|
+
request :update_topic
|
67
|
+
request :update_topic_comment
|
62
68
|
request :update_user
|
63
69
|
|
64
70
|
recognizes :url, :subdomain, :host, :port, :path, :scheme, :logger, :adapter, :username, :password, :token
|
@@ -110,13 +116,13 @@ class Zendesk2::Client < Cistern::Service
|
|
110
116
|
url = File.join(@url, "/api/v2", options[:path])
|
111
117
|
params = options[:params] || {}
|
112
118
|
body = options[:body]
|
113
|
-
headers = options[:headers] || {}
|
119
|
+
headers = {"User-Agent" => USER_AGENT}.merge(options[:headers] || {})
|
114
120
|
|
115
121
|
@connection.send(method) do |req|
|
116
122
|
req.url url
|
117
123
|
req.headers.merge!(headers)
|
118
124
|
req.params.merge!(params)
|
119
|
-
req.body= body
|
125
|
+
req.body = body
|
120
126
|
end
|
121
127
|
rescue Faraday::Error::ClientError => e
|
122
128
|
raise Zendesk2::Error.new(e)
|
@@ -125,7 +131,7 @@ class Zendesk2::Client < Cistern::Service
|
|
125
131
|
|
126
132
|
class Mock
|
127
133
|
|
128
|
-
attr_reader :username, :url, :token
|
134
|
+
attr_reader :username, :url, :token, :current_user_id
|
129
135
|
|
130
136
|
def self.data
|
131
137
|
@data ||= {
|
@@ -136,6 +142,7 @@ class Zendesk2::Client < Cistern::Service
|
|
136
142
|
:topics => {},
|
137
143
|
:categories => {},
|
138
144
|
:topic_comments => {},
|
145
|
+
:ticket_audits => {},
|
139
146
|
}
|
140
147
|
end
|
141
148
|
|
data/lib/zendesk2/version.rb
CHANGED
data/lib/zendesk2.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -4,14 +4,17 @@ Bundler.require(:test)
|
|
4
4
|
|
5
5
|
require File.expand_path("../../lib/zendesk2", __FILE__)
|
6
6
|
|
7
|
-
Dir["
|
7
|
+
Dir[File.expand_path("../{support,shared}/**/*.rb", __FILE__)].each {|f| require f}
|
8
8
|
|
9
9
|
if ENV["MOCK_ZENDESK"] == 'true'
|
10
10
|
Zendesk2::Client.mock!
|
11
11
|
end
|
12
12
|
|
13
|
+
Cistern.formatter = Cistern::Formatter::AwesomePrint
|
14
|
+
|
13
15
|
RSpec.configure do |config|
|
14
16
|
config.before(:all) do
|
15
17
|
Zendesk2::Client.reset! if Zendesk2::Client.mocking?
|
16
18
|
end
|
19
|
+
config.filter_run_excluding(:mock_only => true) unless Zendesk2::Client.mocking?
|
17
20
|
end
|
data/spec/tickets_spec.rb
CHANGED
@@ -20,19 +20,26 @@ describe "tickets" do
|
|
20
20
|
|
21
21
|
describe "comments" do
|
22
22
|
let(:ticket) { client.tickets.create(subject: Zendesk2.uuid, description: Zendesk2.uuid) }
|
23
|
-
before(:each) { client.data[:ticket_audits] = {} }
|
24
23
|
|
25
24
|
it "lists audits" do
|
26
|
-
|
27
|
-
|
28
|
-
|
25
|
+
body = Zendesk2.uuid
|
26
|
+
ticket.comment(body)
|
27
|
+
|
28
|
+
audit = ticket.audits.last
|
29
|
+
audit.ticket.should == ticket
|
30
|
+
|
31
|
+
events = audit.events
|
32
|
+
events.size.should == 1
|
33
|
+
|
34
|
+
event = events.first
|
35
|
+
event.body.should == body
|
29
36
|
end
|
30
37
|
|
31
38
|
it "lists comments" do
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
ticket.comments.
|
39
|
+
body = Zendesk2.uuid
|
40
|
+
ticket.comment(body)
|
41
|
+
|
42
|
+
(comment = ticket.comments.find{|c| c.body == body}).should_not be_nil
|
36
43
|
end
|
37
44
|
end
|
38
45
|
end
|
data/spec/users_spec.rb
CHANGED
@@ -15,7 +15,7 @@ describe "users" do
|
|
15
15
|
|
16
16
|
describe do
|
17
17
|
before(:each) do
|
18
|
-
@user =
|
18
|
+
@user = client.users.create(email: "zendesk2+#{Zendesk2.uuid}@example.org", name: Zendesk2.uuid)
|
19
19
|
end
|
20
20
|
|
21
21
|
let(:user) { @user }
|
metadata
CHANGED
@@ -2,14 +2,14 @@
|
|
2
2
|
name: zendesk2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0
|
5
|
+
version: 0.1.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Josh Lane
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-12-
|
12
|
+
date: 2012-12-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
prerelease: false
|
@@ -89,9 +89,11 @@ files:
|
|
89
89
|
- LICENSE
|
90
90
|
- README.md
|
91
91
|
- Rakefile
|
92
|
+
- TODO.md
|
92
93
|
- lib/zendesk2.rb
|
93
94
|
- lib/zendesk2/attributes.rb
|
94
95
|
- lib/zendesk2/client.rb
|
96
|
+
- lib/zendesk2/client/models/audit_event.rb
|
95
97
|
- lib/zendesk2/client/models/categories.rb
|
96
98
|
- lib/zendesk2/client/models/category.rb
|
97
99
|
- lib/zendesk2/client/models/forum.rb
|
@@ -99,6 +101,8 @@ files:
|
|
99
101
|
- lib/zendesk2/client/models/organization.rb
|
100
102
|
- lib/zendesk2/client/models/organizations.rb
|
101
103
|
- lib/zendesk2/client/models/ticket.rb
|
104
|
+
- lib/zendesk2/client/models/ticket_audit.rb
|
105
|
+
- lib/zendesk2/client/models/ticket_audits.rb
|
102
106
|
- lib/zendesk2/client/models/tickets.rb
|
103
107
|
- lib/zendesk2/client/models/topic.rb
|
104
108
|
- lib/zendesk2/client/models/topic_comment.rb
|
@@ -133,6 +137,8 @@ files:
|
|
133
137
|
- lib/zendesk2/client/requests/get_organizations.rb
|
134
138
|
- lib/zendesk2/client/requests/get_requested_tickets.rb
|
135
139
|
- lib/zendesk2/client/requests/get_ticket.rb
|
140
|
+
- lib/zendesk2/client/requests/get_ticket_audit.rb
|
141
|
+
- lib/zendesk2/client/requests/get_ticket_audits.rb
|
136
142
|
- lib/zendesk2/client/requests/get_tickets.rb
|
137
143
|
- lib/zendesk2/client/requests/get_topic.rb
|
138
144
|
- lib/zendesk2/client/requests/get_topic_comment.rb
|
@@ -201,3 +207,4 @@ test_files:
|
|
201
207
|
- spec/topic_comments_spec.rb
|
202
208
|
- spec/topics_spec.rb
|
203
209
|
- spec/users_spec.rb
|
210
|
+
has_rdoc:
|