zendesk2 0.0.3 → 0.0.4
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/lib/zendesk2/client.rb +8 -3
- data/lib/zendesk2/models/organization.rb +21 -8
- data/lib/zendesk2/models/ticket.rb +20 -9
- data/lib/zendesk2/models/user.rb +8 -7
- data/lib/zendesk2/requests/create_ticket.rb +5 -0
- data/lib/zendesk2/requests/create_user.rb +4 -4
- data/lib/zendesk2/requests/get_organization_tickets.rb +23 -0
- data/lib/zendesk2/requests/get_organization_users.rb +21 -0
- data/lib/zendesk2/version.rb +1 -1
- data/lib/zendesk2.rb +4 -0
- data/spec/organizations_spec.rb +14 -0
- metadata +4 -2
data/lib/zendesk2/client.rb
CHANGED
@@ -18,6 +18,8 @@ class Zendesk2::Client < Cistern::Service
|
|
18
18
|
request :destroy_user
|
19
19
|
request :get_current_user
|
20
20
|
request :get_organization
|
21
|
+
request :get_organization_tickets
|
22
|
+
request :get_organization_users
|
21
23
|
request :get_ticket
|
22
24
|
request :get_user
|
23
25
|
request :get_organizations
|
@@ -148,12 +150,15 @@ class Zendesk2::Client < Cistern::Service
|
|
148
150
|
File.join(@url, path)
|
149
151
|
end
|
150
152
|
|
151
|
-
def page(params, collection, path, collection_root)
|
153
|
+
def page(params, collection, path, collection_root, options={})
|
152
154
|
page_params = Zendesk2.paging_parameters(params)
|
153
155
|
page_size = (page_params["per_page"] || 50).to_i
|
154
156
|
page_index = (page_params["page"] || 1).to_i
|
155
|
-
count = self.data[collection].size
|
156
157
|
offset = (page_index - 1) * page_size
|
158
|
+
filter = options[:filter]
|
159
|
+
resources = self.data[collection].values
|
160
|
+
resources = filter.call(resources) if filter
|
161
|
+
count = resources.size
|
157
162
|
total_pages = (count / page_size) + 1
|
158
163
|
|
159
164
|
next_page = if page_index < total_pages
|
@@ -167,7 +172,7 @@ class Zendesk2::Client < Cistern::Service
|
|
167
172
|
nil
|
168
173
|
end
|
169
174
|
|
170
|
-
resource_page =
|
175
|
+
resource_page = resources.slice(offset, page_size)
|
171
176
|
|
172
177
|
body = {
|
173
178
|
collection_root => resource_page,
|
@@ -13,6 +13,18 @@ class Zendesk2::Client::Organization < Cistern::Model
|
|
13
13
|
attribute :shared_tickets
|
14
14
|
attribute :updated_at, type: :time
|
15
15
|
|
16
|
+
def destroy
|
17
|
+
requires :identity
|
18
|
+
|
19
|
+
response = connection.destroy_organization("id" => self.identity)
|
20
|
+
end
|
21
|
+
|
22
|
+
def destroyed?
|
23
|
+
self.reload
|
24
|
+
rescue not_found
|
25
|
+
true
|
26
|
+
end
|
27
|
+
|
16
28
|
def save
|
17
29
|
if new_record?
|
18
30
|
requires :name
|
@@ -21,7 +33,7 @@ class Zendesk2::Client::Organization < Cistern::Model
|
|
21
33
|
else
|
22
34
|
requires :identity
|
23
35
|
params = {
|
24
|
-
"id"
|
36
|
+
"id" => self.identity,
|
25
37
|
"name" => self.name,
|
26
38
|
}
|
27
39
|
data = connection.update_organization(params).body["organization"]
|
@@ -29,15 +41,16 @@ class Zendesk2::Client::Organization < Cistern::Model
|
|
29
41
|
end
|
30
42
|
end
|
31
43
|
|
32
|
-
def
|
44
|
+
def users
|
33
45
|
requires :identity
|
34
|
-
|
35
|
-
|
46
|
+
data = connection.get_organization_users("id" => self.identity).body["users"]
|
47
|
+
connection.users.load(data)
|
36
48
|
end
|
37
49
|
|
38
|
-
def
|
39
|
-
|
40
|
-
|
41
|
-
|
50
|
+
def tickets
|
51
|
+
requires :identity
|
52
|
+
data = connection.get_organization_tickets("id" => self.identity).body["tickets"]
|
53
|
+
|
54
|
+
connection.tickets.load(data)
|
42
55
|
end
|
43
56
|
end
|
@@ -20,23 +20,18 @@ class Zendesk2::Client::Ticket < Cistern::Model
|
|
20
20
|
attribute :forum_topic_id
|
21
21
|
attribute :problem_id
|
22
22
|
attribute :has_incidents
|
23
|
-
attribute :due_at
|
24
|
-
attribute :tags
|
23
|
+
attribute :due_at, type: :time
|
24
|
+
attribute :tags, type: :array
|
25
25
|
attribute :fields
|
26
26
|
|
27
27
|
def save
|
28
28
|
if new_record?
|
29
29
|
requires :subject, :description
|
30
|
-
data = connection.create_ticket(
|
30
|
+
data = connection.create_ticket(params).body["ticket"]
|
31
31
|
merge_attributes(data)
|
32
32
|
else
|
33
33
|
requires :identity
|
34
|
-
|
35
|
-
"id" => self.identity,
|
36
|
-
"subject" => self.subject,
|
37
|
-
"description" => self.description,
|
38
|
-
}
|
39
|
-
data = connection.update_ticket(params).body["ticket"]
|
34
|
+
data = connection.update_ticket(params.merge("id" => self.identity)).body["ticket"]
|
40
35
|
merge_attributes(data)
|
41
36
|
end
|
42
37
|
end
|
@@ -52,4 +47,20 @@ class Zendesk2::Client::Ticket < Cistern::Model
|
|
52
47
|
rescue not_found
|
53
48
|
true
|
54
49
|
end
|
50
|
+
|
51
|
+
def params
|
52
|
+
Cistern::Hash.slice(Zendesk2.stringify_keys(attributes), "external_id", "via", "requester_id", "submitter_id", "assignee_id", "organization_id", "subject", "description", "fields", "recipient", "status")
|
53
|
+
end
|
54
|
+
|
55
|
+
def submitter
|
56
|
+
self.connection.users.get(submitter_id)
|
57
|
+
end
|
58
|
+
|
59
|
+
def requester=(requester)
|
60
|
+
self.requester_id= requester.id
|
61
|
+
end
|
62
|
+
|
63
|
+
def requester
|
64
|
+
self.connection.users.get(self.requester_id)
|
65
|
+
end
|
55
66
|
end
|
data/lib/zendesk2/models/user.rb
CHANGED
@@ -32,16 +32,11 @@ class Zendesk2::Client::User < Cistern::Model
|
|
32
32
|
def save
|
33
33
|
if new_record?
|
34
34
|
requires :name, :email
|
35
|
-
data = connection.create_user(
|
35
|
+
data = connection.create_user(params).body["user"]
|
36
36
|
merge_attributes(data)
|
37
37
|
else
|
38
38
|
requires :identity
|
39
|
-
|
40
|
-
"id" => self.identity,
|
41
|
-
"name" => self.name,
|
42
|
-
"email" => self.email,
|
43
|
-
}
|
44
|
-
data = connection.update_user(params).body["user"]
|
39
|
+
data = connection.update_user(params.merge("id" => self.identity)).body["user"]
|
45
40
|
merge_attributes(data)
|
46
41
|
end
|
47
42
|
end
|
@@ -57,4 +52,10 @@ class Zendesk2::Client::User < Cistern::Model
|
|
57
52
|
def destroyed?
|
58
53
|
!self.active
|
59
54
|
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
def params
|
59
|
+
Cistern::Hash.slice(Zendesk2.stringify_keys(attributes), "name", "email", "organization_id", "external_id", "alias", "active", "verified", "locate_id", "time_zone", "phone", "signature", "details", "notes", "role", "custom_role_id", "moderator", "ticket_restriction", "only_private_comments")
|
60
|
+
end
|
60
61
|
end
|
@@ -20,6 +20,11 @@ class Zendesk2::Client
|
|
20
20
|
"updated_at" => Time.now.iso8601,
|
21
21
|
}.merge(params)
|
22
22
|
|
23
|
+
record["requester_id"] ||= @current_user_id
|
24
|
+
record["submitter_id"]= @current_user_id
|
25
|
+
requester = self.data[:users][record["requester_id"]]
|
26
|
+
# TODO: throw error if user doesn't exist?
|
27
|
+
record["organization_id"]= requester["organization_id"]
|
23
28
|
self.data[:tickets][identity]= record
|
24
29
|
|
25
30
|
response(
|
@@ -14,10 +14,10 @@ class Zendesk2::Client
|
|
14
14
|
identity = self.class.new_id
|
15
15
|
|
16
16
|
record = {
|
17
|
-
"id"
|
18
|
-
"url"
|
19
|
-
"created_at"
|
20
|
-
"updated_at"
|
17
|
+
"id" => identity,
|
18
|
+
"url" => url_for("/users/#{identity}.json"),
|
19
|
+
"created_at" => Time.now.iso8601,
|
20
|
+
"updated_at" => Time.now.iso8601
|
21
21
|
}.merge(params)
|
22
22
|
|
23
23
|
self.data[:users][identity]= record
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class Zendesk2::Client
|
2
|
+
class Real
|
3
|
+
def get_organization_tickets(params={})
|
4
|
+
id = params["id"]
|
5
|
+
page_params = Zendesk2.paging_parameters(params)
|
6
|
+
|
7
|
+
request(
|
8
|
+
:params => page_params,
|
9
|
+
:method => :get,
|
10
|
+
:path => "/organizations/#{id}/tickets.json",
|
11
|
+
)
|
12
|
+
end
|
13
|
+
end # Real
|
14
|
+
|
15
|
+
class Mock
|
16
|
+
def get_organization_tickets(params={})
|
17
|
+
id = params["id"]
|
18
|
+
|
19
|
+
requesters = self.data[:users].values.select{|u| u["organization_id"].to_s == id.to_s}.map{|s| s["organization_id"].to_s}
|
20
|
+
page(params, :tickets, "/organizations/#{id}/tickets.json", "tickets", filter: lambda{|c| c.select{|u| requesters.include?(u["organization_id"].to_s)}})
|
21
|
+
end
|
22
|
+
end # Mock
|
23
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class Zendesk2::Client
|
2
|
+
class Real
|
3
|
+
def get_organization_users(params={})
|
4
|
+
id = params["id"]
|
5
|
+
page_params = Zendesk2.paging_parameters(params)
|
6
|
+
|
7
|
+
request(
|
8
|
+
:params => page_params,
|
9
|
+
:method => :get,
|
10
|
+
:path => "/organizations/#{id}/users.json",
|
11
|
+
)
|
12
|
+
end
|
13
|
+
end # Real
|
14
|
+
|
15
|
+
class Mock
|
16
|
+
def get_organization_users(params={})
|
17
|
+
id = params["id"]
|
18
|
+
page(params, :users, "/organizations/#{id}/users.json", "users", filter: lambda{|c| c.select{|u| u["organization_id"].to_s == id.to_s}})
|
19
|
+
end
|
20
|
+
end # Mock
|
21
|
+
end
|
data/lib/zendesk2/version.rb
CHANGED
data/lib/zendesk2.rb
CHANGED
data/spec/organizations_spec.rb
CHANGED
@@ -6,4 +6,18 @@ describe "organizations" do
|
|
6
6
|
:organizations,
|
7
7
|
lambda { {name: Zendesk2.uuid} },
|
8
8
|
lambda { {name: Zendesk2.uuid} }
|
9
|
+
|
10
|
+
describe do
|
11
|
+
let(:organization) { client.organizations.create(name: Zendesk2.uuid) }
|
12
|
+
it "should get #users" do
|
13
|
+
user = client.users.create(email: "#{Zendesk2.uuid}@example.org", name: Zendesk2.uuid, organization_id: organization.id)
|
14
|
+
organization.users.should include user
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should get #tickets" do
|
18
|
+
user = client.users.create(email: "#{Zendesk2.uuid}@example.org", name: Zendesk2.uuid, organization_id: organization.id)
|
19
|
+
ticket = client.tickets.create(subject: "#{Zendesk2.uuid}@example.org", description: Zendesk2.uuid, requester: user)
|
20
|
+
organization.tickets.should include ticket
|
21
|
+
end
|
22
|
+
end
|
9
23
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zendesk2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-06-
|
12
|
+
date: 2012-06-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: cistern
|
@@ -123,6 +123,8 @@ files:
|
|
123
123
|
- lib/zendesk2/requests/destroy_user.rb
|
124
124
|
- lib/zendesk2/requests/get_current_user.rb
|
125
125
|
- lib/zendesk2/requests/get_organization.rb
|
126
|
+
- lib/zendesk2/requests/get_organization_tickets.rb
|
127
|
+
- lib/zendesk2/requests/get_organization_users.rb
|
126
128
|
- lib/zendesk2/requests/get_organizations.rb
|
127
129
|
- lib/zendesk2/requests/get_ticket.rb
|
128
130
|
- lib/zendesk2/requests/get_tickets.rb
|