zendesk2 1.6.1 → 1.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -0
- data/lib/zendesk2/client/collections/tickets.rb +5 -1
- data/lib/zendesk2/client/collections/views.rb +11 -0
- data/lib/zendesk2/client/mock.rb +1 -0
- data/lib/zendesk2/client/models/view.rb +53 -0
- data/lib/zendesk2/client/real.rb +3 -1
- data/lib/zendesk2/client/requests/create_membership.rb +7 -1
- data/lib/zendesk2/client/requests/create_user.rb +4 -0
- data/lib/zendesk2/client/requests/create_view.rb +96 -0
- data/lib/zendesk2/client/requests/destroy_membership.rb +10 -2
- data/lib/zendesk2/client/requests/destroy_view.rb +14 -0
- data/lib/zendesk2/client/requests/get_organization_users.rb +3 -4
- data/lib/zendesk2/client/requests/get_view.rb +12 -0
- data/lib/zendesk2/client/requests/get_view_tickets.rb +37 -0
- data/lib/zendesk2/client/requests/get_views.rb +10 -0
- data/lib/zendesk2/client/requests/update_view.rb +62 -0
- data/lib/zendesk2/client.rb +1 -0
- data/lib/zendesk2/version.rb +1 -1
- data/spec/categories_spec.rb +1 -1
- data/spec/forums_spec.rb +1 -1
- data/spec/groups_spec.rb +1 -1
- data/spec/help_center/articles_spec.rb +1 -1
- data/spec/help_center/categories_spec.rb +1 -1
- data/spec/help_center/sections_spec.rb +1 -1
- data/spec/memberships_spec.rb +3 -3
- data/spec/organizations_spec.rb +1 -1
- data/spec/shared/zendesk_resource.rb +1 -1
- data/spec/ticket_fields_spec.rb +1 -1
- data/spec/tickets_spec.rb +1 -1
- data/spec/topic_comments_spec.rb +1 -1
- data/spec/topics_spec.rb +1 -1
- data/spec/user_fields_spec.rb +1 -1
- data/spec/user_identities_spec.rb +1 -1
- data/spec/users_spec.rb +1 -1
- data/spec/views_spec.rb +61 -0
- metadata +12 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a18fd1746e59027bea3912be64321d5bfbedf1d8
|
4
|
+
data.tar.gz: 321bc39eff6fd71787f5faf97eaa53bac27230dd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c739e8b40eee14997eaea9bb255bd7cd798175c565bbf8d534dd04ed09a1c8860ca97ec67653ba59b4922cae8f3776e08834235794a239ca3484cdab6b6a3e80
|
7
|
+
data.tar.gz: 176636a93ff3de53c8186c51858ef5e17491cfe281e54923019114faa6df272a542ab4edb75c82fcf5ebddd5331a10c511ad425b882ef5059fa8511f698032d0
|
data/README.md
CHANGED
@@ -5,8 +5,9 @@ class Zendesk2::Client::Tickets < Zendesk2::Client::Collection
|
|
5
5
|
|
6
6
|
model Zendesk2::Client::Ticket
|
7
7
|
|
8
|
-
attribute :requester_id,
|
8
|
+
attribute :requester_id, type: :integer
|
9
9
|
attribute :collaborator_id, type: :integer
|
10
|
+
attribute :view_id, type: :integer
|
10
11
|
|
11
12
|
assoc_accessor :requester
|
12
13
|
assoc_accessor :collaborator
|
@@ -21,6 +22,8 @@ class Zendesk2::Client::Tickets < Zendesk2::Client::Collection
|
|
21
22
|
:get_requested_tickets
|
22
23
|
elsif collaborator_id
|
23
24
|
:get_ccd_tickets
|
25
|
+
elsif view_id
|
26
|
+
:get_view_tickets
|
24
27
|
else
|
25
28
|
:get_tickets
|
26
29
|
end
|
@@ -34,4 +37,5 @@ class Zendesk2::Client::Tickets < Zendesk2::Client::Collection
|
|
34
37
|
|
35
38
|
scopes << :requester_id
|
36
39
|
scopes << :collaborator_id
|
40
|
+
scopes << :view_id
|
37
41
|
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class Zendesk2::Client::Views < Zendesk2::Client::Collection
|
2
|
+
include Zendesk2::PagedCollection
|
3
|
+
extend Zendesk2::Attributes
|
4
|
+
|
5
|
+
model Zendesk2::Client::View
|
6
|
+
|
7
|
+
self.collection_method = :get_views
|
8
|
+
self.collection_root = "views"
|
9
|
+
self.model_method = :get_view
|
10
|
+
self.model_root = "view"
|
11
|
+
end
|
data/lib/zendesk2/client/mock.rb
CHANGED
@@ -0,0 +1,53 @@
|
|
1
|
+
class Zendesk2::Client::View < Zendesk2::Client::Model
|
2
|
+
extend Zendesk2::Attributes
|
3
|
+
|
4
|
+
# @return [Integer] Automatically assigned when created
|
5
|
+
identity :id, type: :integer
|
6
|
+
|
7
|
+
# @return [Boolean] Useful for determining if the view should be displayed
|
8
|
+
attribute :active, type: :boolean
|
9
|
+
# @return [Hash] An object describing how the view is constructed
|
10
|
+
attribute :conditions, type: :hash, default: {}
|
11
|
+
# @return [Time] The time the view was created
|
12
|
+
attribute :created_at, type: :time
|
13
|
+
# @return [Hash] An object describing how the view should be executed
|
14
|
+
attribute :execution, type: :hash, default: {}
|
15
|
+
# @return [Hash] Who may access this account. Will be null when everyone in the account can access it.
|
16
|
+
attribute :restriction, type: :hash, default: {}
|
17
|
+
# @return [Integer] If the view is for an SLA this is the id
|
18
|
+
attribute :sla_id, type: :integer
|
19
|
+
# @return [String] The title of the view
|
20
|
+
attribute :title, type: :string
|
21
|
+
# @return [Time] The time of the last update of the view
|
22
|
+
attribute :updated_at, type: :time
|
23
|
+
|
24
|
+
def save!
|
25
|
+
requires :execution, :title
|
26
|
+
|
27
|
+
params = {
|
28
|
+
"title" => self.title,
|
29
|
+
"active" => self.active,
|
30
|
+
"output" => Cistern::Hash.slice(self.execution, "sort_by", "sort_order", "group_by", "group_order", "columns")
|
31
|
+
}.merge(Cistern::Hash.slice(self.conditions, "any", "all"))
|
32
|
+
|
33
|
+
data = if new_record?
|
34
|
+
service.create_view("view" => params)
|
35
|
+
else
|
36
|
+
service.create_view("view" => params)
|
37
|
+
end.body
|
38
|
+
|
39
|
+
merge_attributes(data["view"])
|
40
|
+
end
|
41
|
+
|
42
|
+
def tickets
|
43
|
+
requires :identity
|
44
|
+
|
45
|
+
service.tickets(view_id: self.identity)
|
46
|
+
end
|
47
|
+
|
48
|
+
def destroy!
|
49
|
+
requires :identity
|
50
|
+
|
51
|
+
service.destroy_view("view" => {"id" => self.identity})
|
52
|
+
end
|
53
|
+
end
|
data/lib/zendesk2/client/real.rb
CHANGED
@@ -11,7 +11,7 @@ class Zendesk2::Client < Cistern::Service
|
|
11
11
|
@logger = options[:logger] || Logger.new(nil)
|
12
12
|
adapter = options[:adapter] || Faraday.default_adapter
|
13
13
|
@username = options[:username] || Zendesk2.defaults[:username]
|
14
|
-
@token = options
|
14
|
+
@token = options.fetch(:token, Zendesk2.defaults[:token])
|
15
15
|
password = options[:password] || Zendesk2.defaults[:password]
|
16
16
|
|
17
17
|
service_options = options[:service_options] || {}
|
@@ -62,6 +62,8 @@ class Zendesk2::Client < Cistern::Service
|
|
62
62
|
req.params.merge!(params)
|
63
63
|
req.body = @last_request = body
|
64
64
|
end
|
65
|
+
rescue Faraday::ConnectionFailed
|
66
|
+
raise
|
65
67
|
rescue Faraday::Error::ClientError => e
|
66
68
|
raise Zendesk2::Error.new(e)
|
67
69
|
end
|
@@ -20,7 +20,7 @@ class Zendesk2::Client::CreateMembership < Zendesk2::Client::Request
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def mock
|
23
|
-
find!(:users, user_id)
|
23
|
+
user = find!(:users, user_id)
|
24
24
|
find!(:organizations, organization_id,
|
25
25
|
:error => :invalid,
|
26
26
|
:details => {
|
@@ -44,6 +44,12 @@ class Zendesk2::Client::CreateMembership < Zendesk2::Client::Request
|
|
44
44
|
|
45
45
|
self.data[:memberships][resource_id] = resource
|
46
46
|
|
47
|
+
primary_organization = self.data[:memberships].values.find { |m| m["user_id"] == user_id && m["default"] }
|
48
|
+
|
49
|
+
if primary_organization
|
50
|
+
user.merge!("organization_id" => primary_organization["organization_id"])
|
51
|
+
end
|
52
|
+
|
47
53
|
mock_response("organization_membership" => resource)
|
48
54
|
end
|
49
55
|
end
|
@@ -55,6 +55,10 @@ class Zendesk2::Client::CreateUser < Zendesk2::Client::Request
|
|
55
55
|
self.data[:identities][user_identity_id] = user_identity
|
56
56
|
self.data[:users][user_id] = record.reject { |k,v| k == "email" }
|
57
57
|
|
58
|
+
if organization_id
|
59
|
+
service.create_membership("membership" => { "user_id" => user_id, "organization_id" => organization_id, "default" => true } )
|
60
|
+
end
|
61
|
+
|
58
62
|
mock_response({"user" => record}, {status: 201})
|
59
63
|
end
|
60
64
|
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
class Zendesk2::Client::CreateView < Zendesk2::Client::Request
|
2
|
+
request_method :post
|
3
|
+
request_path { |_| "/views.json" }
|
4
|
+
request_body { |r| { "view" => r.view_params } }
|
5
|
+
|
6
|
+
def self.accepted_attributes
|
7
|
+
%w[title all any active output restriction]
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.view_columns
|
11
|
+
@_view_columns ||= {
|
12
|
+
"assigned" => "Assigned date",
|
13
|
+
"assignee" => "Assignee",
|
14
|
+
"brand" => "Brand",
|
15
|
+
"created" => "Request date",
|
16
|
+
"description" => "Subject",
|
17
|
+
"due_date" => "Due Date",
|
18
|
+
"group" => "Group",
|
19
|
+
"locale_id" => "Requester language",
|
20
|
+
"nice_id" => "ID",
|
21
|
+
"organization" => "Organization",
|
22
|
+
"priority" => "Priority",
|
23
|
+
"requester" => "Requester",
|
24
|
+
"satisfaction_score" => "Satisfaction",
|
25
|
+
"score" => "Score",
|
26
|
+
"solved" => "Solved date",
|
27
|
+
"status" => "Status",
|
28
|
+
"submitter" => "Submitter",
|
29
|
+
"ticket_form" => "Ticket form",
|
30
|
+
"type" => "Ticket type",
|
31
|
+
"updated" => "Latest update",
|
32
|
+
"updated_assignee" => "Latest update by assignee",
|
33
|
+
"updated_by_type" => "Latest updater type (agent/end-user)",
|
34
|
+
"updated_requester" => "Latest update by requester",
|
35
|
+
}.freeze
|
36
|
+
end
|
37
|
+
|
38
|
+
def view_params
|
39
|
+
@_view_params ||= Cistern::Hash.slice(params.fetch("view"), *self.class.accepted_attributes)
|
40
|
+
end
|
41
|
+
|
42
|
+
# {:status=>422, :headers=>{"server"=>"nginx", "date"=>"Fri, 10 Jul 2015 18:58:50 GMT", "content-type"=>"application/json; charset=UTF-8", "content-length"=>"262", "connection"=>"close", "status"=>"422 Unprocessable Entity", "x-zendesk-api-version"=>"v2", "x-frame-options"=>"SAMEORIGIN", "strict-transport-security"=>"max-age=31536000;", "x-ua-compatible"=>"IE=Edge,chrome=1", "cache-control"=>"no-cache", "x-zendesk-origin-server"=>"app5.pod5.iad1.zdsys.com", "x-request-id"=>"8dec47a7-f80d-4823-c8e2-b8ca3a6b1aa9", "x-runtime"=>"0.106400", "x-rack-cache"=>"invalidate, pass", "x-zendesk-request-id"=>"6efea4cc3c46093df8b1"}, :body=>{"error"=>"RecordInvalid", "description"=>"Record validation errors", "details"=>{"base"=>[{"description"=>"View must test for at least <strong>one</strong> of the following ticket properties in the ALL conditions section: Status, Type, Group, Assignee, Requester."}]}}}
|
43
|
+
# {:status=>400, :headers=>{"server"=>"nginx", "date"=>"Fri, 10 Jul 2015 18:58:39 GMT", "content-type"=>"application/json; charset=UTF-8", "content-length"=>"142", "connection"=>"close", "status"=>"400 Bad Request", "x-zendesk-api-version"=>"v2", "strict-transport-security"=>"max-age=31536000;", "x-ua-compatible"=>"IE=Edge,chrome=1", "cache-control"=>"no-cache", "x-zendesk-origin-server"=>"app5.pod5.iad1.zdsys.com", "x-request-id"=>"55216728-1c4b-49ce-c988-b8ca3a6b1a09", "x-runtime"=>"0.077761", "x-rack-cache"=>"invalidate, pass", "x-zendesk-request-id"=>"a49e204bdb7ceb6d22b2"}, :body=>{"error"=>{"title"=>"Invalid attribute", "message"=>"You passed an invalid value for the value attribute. must be a string"}}}
|
44
|
+
# {:status=>422, :headers=>{"server"=>"nginx", "date"=>"Fri, 10 Jul 2015 18:57:38 GMT", "content-type"=>"application/json; charset=UTF-8", "content-length"=>"326", "connection"=>"close", "status"=>"422 Unprocessable Entity", "x-zendesk-api-version"=>"v2", "x-frame-options"=>"SAMEORIGIN", "strict-transport-security"=>"max-age=31536000;", "x-ua-compatible"=>"IE=Edge,chrome=1", "cache-control"=>"no-cache", "x-zendesk-origin-server"=>"app19.pod5.iad1.zdsys.com", "x-request-id"=>"577927e1-1a98-4642-c636-b8ca3a6bdb18", "x-runtime"=>"0.114688", "x-rack-cache"=>"invalidate, pass", "x-zendesk-request-id"=>"6f646a8ab4e30717d593"}, :body=>{"error"=>"RecordInvalid", "description"=>"Record validation errors", "details"=>{"base"=>[{"description"=>"Organization 1 was deleted and cannot be used"}, {"description"=>"View must test for at least <strong>one</strong> of the following ticket properties in the ALL conditions section: Status, Type, Group, Assignee, Requester."}]}}}
|
45
|
+
def mock
|
46
|
+
create_params = view_params.dup
|
47
|
+
|
48
|
+
if create_params["title"].nil? || create_params["title"] == ""
|
49
|
+
error!(:invalid, :details => {"base" => [{"title" => "Title: cannot be blank"}]})
|
50
|
+
end
|
51
|
+
|
52
|
+
if Array(create_params["any"]).empty? && Array(create_params["all"]).empty?
|
53
|
+
error!(:invalid, :details => {"base" => ["Invalid conditions: You must select at least one condition"]})
|
54
|
+
end
|
55
|
+
|
56
|
+
identity = service.serial_id
|
57
|
+
|
58
|
+
output = view_params.delete("output") || {}
|
59
|
+
columns = (output["columns"] || []).inject([]) { |r,c| r << {"id" => c, "name" => self.class.view_columns.fetch(c)} }
|
60
|
+
|
61
|
+
record = {
|
62
|
+
"id" => identity,
|
63
|
+
"url" => url_for("/views/#{identity}.json"),
|
64
|
+
"created_at" => Time.now.iso8601,
|
65
|
+
"updated_at" => Time.now.iso8601,
|
66
|
+
"active" => true,
|
67
|
+
"execution" => {
|
68
|
+
"columns" => columns,
|
69
|
+
"fields" => columns,
|
70
|
+
"custom_fields" => [],
|
71
|
+
"group_by" => create_params["group_by"],
|
72
|
+
"group_order" => create_params["group_order"],
|
73
|
+
"sort_by" => create_params["sort_by"],
|
74
|
+
"sort_order" => create_params["sort_order"],
|
75
|
+
"sort" => {
|
76
|
+
"id" => create_params["sort_by"],
|
77
|
+
"order" => create_params["sort_order"],
|
78
|
+
"title" => (create_params["sort_by"] && create_params["sort_by"].to_s.upcase),
|
79
|
+
},
|
80
|
+
"group" => {
|
81
|
+
"id" => create_params["group_by"],
|
82
|
+
"order" => create_params["group_order"],
|
83
|
+
"title" => (create_params["group_by"] && create_params["group_by"].to_s.upcase),
|
84
|
+
},
|
85
|
+
},
|
86
|
+
"conditions" => {
|
87
|
+
"any" => Array(create_params["any"]),
|
88
|
+
"all" => Array(create_params["all"]),
|
89
|
+
},
|
90
|
+
}.merge(create_params)
|
91
|
+
|
92
|
+
service.data[:views][identity] = record
|
93
|
+
|
94
|
+
mock_response("view" => record)
|
95
|
+
end
|
96
|
+
end
|
@@ -3,11 +3,19 @@ class Zendesk2::Client::DestroyMembership < Zendesk2::Client::Request
|
|
3
3
|
request_path { |r| "/organization_memberships/#{r.membership_id}.json" }
|
4
4
|
|
5
5
|
def membership_id
|
6
|
-
params.fetch("membership").fetch("id")
|
6
|
+
params.fetch("membership").fetch("id").to_i
|
7
7
|
end
|
8
8
|
|
9
9
|
def mock
|
10
|
-
delete!(:memberships, membership_id)
|
10
|
+
membership = delete!(:memberships, membership_id)
|
11
|
+
|
12
|
+
primary_organization = self.data[:memberships].values.find { |m| m["user_id"] == membership["user_id"] && m["default"] } ||
|
13
|
+
self.data[:memberships].values.find { |m| m["user_id"] == membership["user_id"] }
|
14
|
+
|
15
|
+
if primary_organization
|
16
|
+
primary_organization.merge!("default" => true)
|
17
|
+
self.find!(:users, membership["user_id"].to_i).merge!("organization_id" => primary_organization["organization_id"])
|
18
|
+
end
|
11
19
|
|
12
20
|
mock_response(nil)
|
13
21
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class Zendesk2::Client::DestroyView < Zendesk2::Client::Request
|
2
|
+
request_method :delete
|
3
|
+
request_path { |r| "/views/#{r.view_id}.json" }
|
4
|
+
|
5
|
+
def view_id
|
6
|
+
@_view_id ||= params.fetch("view").fetch("id")
|
7
|
+
end
|
8
|
+
|
9
|
+
def mock
|
10
|
+
self.delete!(:views, view_id)
|
11
|
+
|
12
|
+
mock_response(nil)
|
13
|
+
end
|
14
|
+
end
|
@@ -9,10 +9,9 @@ class Zendesk2::Client::GetOrganizationUsers < Zendesk2::Client::Request
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def mock
|
12
|
-
users = self.data[:
|
13
|
-
|
14
|
-
m["
|
15
|
-
}.map { |m| self.data[:users].fetch(m["user_id"]) }
|
12
|
+
users = self.data[:memberships].values.
|
13
|
+
select { |m| m["organization_id"] == organization_id }.
|
14
|
+
map { |m| self.data[:users].fetch(m["user_id"]) }
|
16
15
|
|
17
16
|
page(users, root: "users")
|
18
17
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class Zendesk2::Client::GetView < Zendesk2::Client::Request
|
2
|
+
request_method :get
|
3
|
+
request_path { |r| "/views/#{r.view_id}.json" }
|
4
|
+
|
5
|
+
def view_id
|
6
|
+
params.fetch("view").fetch("id")
|
7
|
+
end
|
8
|
+
|
9
|
+
def mock
|
10
|
+
mock_response("view" => self.find!(:views, view_id))
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
class Zendesk2::Client::GetViewTickets < Zendesk2::Client::Request
|
2
|
+
request_method :get
|
3
|
+
request_path { |r| "/views/#{r.view_id}/tickets.json" }
|
4
|
+
|
5
|
+
page_params!
|
6
|
+
|
7
|
+
def view_id
|
8
|
+
params.fetch("view_id").to_i
|
9
|
+
end
|
10
|
+
|
11
|
+
def mock(params={})
|
12
|
+
view = self.find!(:views, view_id)
|
13
|
+
|
14
|
+
tickets = Array(view["conditions"]["all"]).map { |c|
|
15
|
+
operator = ("is" == c.fetch("operator")) ? :eql? : :!=
|
16
|
+
key = c.fetch("field")
|
17
|
+
value = c.fetch("value").to_s
|
18
|
+
|
19
|
+
[operator, key, value]
|
20
|
+
}.inject(self.data[:tickets].values) { |r, (o,k,v)|
|
21
|
+
r.select { |t| t[k].to_s.public_send(o, v) }
|
22
|
+
}
|
23
|
+
|
24
|
+
any_operators = Array(view["conditions"]["any"]).map { |c|
|
25
|
+
operator = ("is" == c.fetch("operator")) ? :eql? : :!=
|
26
|
+
key = c.fetch("field")
|
27
|
+
value = c.fetch("value").to_s
|
28
|
+
|
29
|
+
[operator, key, value]
|
30
|
+
}
|
31
|
+
|
32
|
+
any_operators.any? &&
|
33
|
+
tickets.select! { |t| any_operators.find { |(o,k,v)| t[k].to_s.public_send(o, v) } }
|
34
|
+
|
35
|
+
page(tickets, root: "tickets")
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
class Zendesk2::Client::UpdateView < Zendesk2::Client::Request
|
2
|
+
request_method :put
|
3
|
+
request_path { |r| "/views/#{r.view_id}.json" }
|
4
|
+
request_body { |r| { "view" => r.view_params } }
|
5
|
+
|
6
|
+
def self.accepted_attributes
|
7
|
+
Zendesk2::Client::Createview.accepted_attributes
|
8
|
+
end
|
9
|
+
|
10
|
+
def view_params
|
11
|
+
@_view_params ||= Cistern::Hash.slice(params.fetch("view"), *self.class.accepted_attributes)
|
12
|
+
end
|
13
|
+
|
14
|
+
def view_id
|
15
|
+
params.fetch("view").fetch("id")
|
16
|
+
end
|
17
|
+
|
18
|
+
def mock
|
19
|
+
body = self.find!(:views, view_id)
|
20
|
+
|
21
|
+
update_params = view_params.dup
|
22
|
+
|
23
|
+
output = params.delete("output") || {}
|
24
|
+
columns = (output["columns"] || []).inject([]) { |r,c| r << {"id" => c, "name" => Zendesk2::Client::CreateView.view_columns.fetch(c)} }
|
25
|
+
|
26
|
+
body.merge!("updated_at" => Time.now.iso8601)
|
27
|
+
|
28
|
+
if columns.any?
|
29
|
+
body.merge!(
|
30
|
+
"execution" => {
|
31
|
+
"columns" => columns,
|
32
|
+
"fields" => columns,
|
33
|
+
"custom_fields" => [],
|
34
|
+
}
|
35
|
+
)
|
36
|
+
end
|
37
|
+
|
38
|
+
body["execution"]["conditions"].merge!(Cistern::Hash.slice(body, "any", "all"))
|
39
|
+
|
40
|
+
group_params = Cistern::Hash.slice(body, "group_by", "group_order").merge(Cistern::Hash.slice(update_params, "group_by", "group_order"))
|
41
|
+
|
42
|
+
body.merge!(group_params).merge!(
|
43
|
+
"group" => {
|
44
|
+
"id" => group_params["group_by"],
|
45
|
+
"order" => group_params["group_order"],
|
46
|
+
"title" => (group_params["group_by"] && group_params["group_by"].to_s.upcase),
|
47
|
+
},
|
48
|
+
)
|
49
|
+
|
50
|
+
sort_params = Cistern::Hash.slice(body, "sort_by", "sort_order").merge(Cistern::Hash.slice(update_params, "sort_by", "sort_order"))
|
51
|
+
|
52
|
+
body.merge!(sort_params).merge!(
|
53
|
+
"sort" => {
|
54
|
+
"id" => sort_params["sort_by"],
|
55
|
+
"order" => sort_params["sort_order"],
|
56
|
+
"title" => (sort_params["sort_by"] && sort_params["sort_by"].to_s.upcase),
|
57
|
+
},
|
58
|
+
)
|
59
|
+
|
60
|
+
mock_response("view" => body)
|
61
|
+
end
|
62
|
+
end
|
data/lib/zendesk2/client.rb
CHANGED
@@ -58,3 +58,4 @@ require_resource("organization", and: [
|
|
58
58
|
require_resource("user_field")
|
59
59
|
require_resource("user_identity", plural: "user_identities")
|
60
60
|
require_resource("membership", except: [:update], and: "mark_membership_default")
|
61
|
+
require_resource("view", and: ["get_view_tickets"])
|
data/lib/zendesk2/version.rb
CHANGED
data/spec/categories_spec.rb
CHANGED
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe "categories" do
|
4
4
|
let(:client) { create_client }
|
5
5
|
|
6
|
-
include_examples "zendesk
|
6
|
+
include_examples "zendesk#resource", {
|
7
7
|
:collection => lambda { client.categories },
|
8
8
|
:create_params => lambda { { name: mock_uuid } },
|
9
9
|
:update_params => lambda { { name: mock_uuid } },
|
data/spec/forums_spec.rb
CHANGED
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe "forums" do
|
4
4
|
let(:client) { create_client }
|
5
5
|
|
6
|
-
include_examples "zendesk
|
6
|
+
include_examples "zendesk#resource", {
|
7
7
|
:collection => lambda { client.forums },
|
8
8
|
:create_params => lambda { { name: mock_uuid } },
|
9
9
|
:update_params => lambda { { name: mock_uuid } },
|
data/spec/groups_spec.rb
CHANGED
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe "groups" do
|
4
4
|
let(:client) { create_client }
|
5
5
|
|
6
|
-
include_examples "zendesk
|
6
|
+
include_examples "zendesk#resource", {
|
7
7
|
:collection => lambda { client.groups },
|
8
8
|
:create_params => lambda { { name: mock_uuid } },
|
9
9
|
:update_params => lambda { { name: mock_uuid } },
|
@@ -12,7 +12,7 @@ describe "help_center/articles" do
|
|
12
12
|
)
|
13
13
|
end
|
14
14
|
|
15
|
-
include_examples "zendesk
|
15
|
+
include_examples "zendesk#resource", {
|
16
16
|
:collection => lambda { client.help_center_articles },
|
17
17
|
:create_params => lambda { { title: mock_uuid, locale: "en-us", section: section } },
|
18
18
|
:update_params => lambda { { title: mock_uuid } },
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe "help_center/categories" do
|
4
4
|
let(:client) { create_client }
|
5
5
|
|
6
|
-
include_examples "zendesk
|
6
|
+
include_examples "zendesk#resource", {
|
7
7
|
:collection => lambda { client.help_center_categories },
|
8
8
|
:create_params => lambda { { name: mock_uuid, locale: "en-us" } },
|
9
9
|
:update_params => lambda { { name: mock_uuid } },
|
@@ -9,7 +9,7 @@ describe "help_center/sections" do
|
|
9
9
|
)
|
10
10
|
end
|
11
11
|
|
12
|
-
include_examples "zendesk
|
12
|
+
include_examples "zendesk#resource", {
|
13
13
|
:collection => lambda { client.help_center_sections },
|
14
14
|
:create_params => lambda { { name: mock_uuid, locale: "en-us", category: category } },
|
15
15
|
:update_params => lambda { { name: mock_uuid } },
|
data/spec/memberships_spec.rb
CHANGED
@@ -5,7 +5,7 @@ describe "memberships" do
|
|
5
5
|
let!(:user) { client.users.create!(email: mock_email, name: mock_uuid, verified: true) }
|
6
6
|
let(:organization) { client.organizations.create!(name: mock_uuid) }
|
7
7
|
|
8
|
-
include_examples "zendesk
|
8
|
+
include_examples "zendesk#resource", {
|
9
9
|
:create_params => lambda { { organization_id: client.organizations.create!(name: mock_uuid).identity, user_id: user.id } },
|
10
10
|
:collection => lambda { client.memberships(user: user) },
|
11
11
|
:paged => true,
|
@@ -63,9 +63,9 @@ describe "memberships" do
|
|
63
63
|
another_organization.memberships.create!(user: user)
|
64
64
|
organization.memberships.create!(user: another_user)
|
65
65
|
|
66
|
-
expect(user.organizations.to_a).to
|
66
|
+
expect(user.organizations.to_a).to contain_exactly(another_organization)
|
67
67
|
expect(another_organization.users.to_a).to contain_exactly(user, another_user)
|
68
|
-
expect(organization.users.to_a).to
|
68
|
+
expect(organization.users.to_a).to contain_exactly(another_user)
|
69
69
|
end
|
70
70
|
|
71
71
|
describe "create_membership" do
|
data/spec/organizations_spec.rb
CHANGED
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe "organizations" do
|
4
4
|
let(:client) { create_client }
|
5
5
|
|
6
|
-
include_examples "zendesk
|
6
|
+
include_examples "zendesk#resource", {
|
7
7
|
:collection => lambda { client.organizations },
|
8
8
|
:create_params => lambda { { name: mock_uuid } },
|
9
9
|
:update_params => lambda { { name: mock_uuid } },
|
data/spec/ticket_fields_spec.rb
CHANGED
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe "ticket_fields" do
|
4
4
|
let(:client) { create_client }
|
5
5
|
|
6
|
-
include_examples "zendesk
|
6
|
+
include_examples "zendesk#resource", {
|
7
7
|
:collection => lambda { client.ticket_fields },
|
8
8
|
:create_params => lambda { { title: mock_uuid, type: "text" } },
|
9
9
|
:update_params => lambda { { title: mock_uuid } },
|
data/spec/tickets_spec.rb
CHANGED
@@ -4,7 +4,7 @@ describe "Zendesk2::Client" do
|
|
4
4
|
let(:client) { create_client }
|
5
5
|
|
6
6
|
describe "tickets" do
|
7
|
-
include_examples "zendesk
|
7
|
+
include_examples "zendesk#resource", {
|
8
8
|
:collection => lambda { client.tickets },
|
9
9
|
:create_params => lambda { {subject: mock_uuid, description: mock_uuid} },
|
10
10
|
:update_params => lambda { {subject: mock_uuid} },
|
data/spec/topic_comments_spec.rb
CHANGED
@@ -6,7 +6,7 @@ describe "topic_comments" do
|
|
6
6
|
let!(:forum) { client.forums.create!(name: mock_uuid) }
|
7
7
|
let!(:topic) { client.topics.create!(title: mock_uuid, body: mock_uuid, forum: forum) }
|
8
8
|
|
9
|
-
include_examples "zendesk
|
9
|
+
include_examples "zendesk#resource",
|
10
10
|
{
|
11
11
|
:create_params => lambda { { body: mock_uuid, topic_id: topic.identity, user_id: user.identity } },
|
12
12
|
:update => false,
|
data/spec/topics_spec.rb
CHANGED
@@ -4,7 +4,7 @@ describe "topics" do
|
|
4
4
|
let(:client) { create_client }
|
5
5
|
let(:forum) { client.forums.create(name: mock_uuid) }
|
6
6
|
|
7
|
-
include_examples "zendesk
|
7
|
+
include_examples "zendesk#resource", {
|
8
8
|
:collection => lambda { client.topics },
|
9
9
|
:create_params => lambda { { title: mock_uuid, body: mock_uuid, forum_id: forum.id } },
|
10
10
|
:update_params => lambda { { title: mock_uuid, body: mock_uuid } },
|
data/spec/user_fields_spec.rb
CHANGED
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe "user_fields" do
|
4
4
|
let(:client) { create_client }
|
5
5
|
|
6
|
-
include_examples "zendesk
|
6
|
+
include_examples "zendesk#resource", {
|
7
7
|
:collection => lambda { client.user_fields },
|
8
8
|
:create_params => lambda { { title: mock_uuid, type: "text", key: "custom_#{SecureRandom.hex(3)}"} },
|
9
9
|
:update_params => lambda { { title: mock_uuid } },
|
@@ -4,7 +4,7 @@ describe "user_identities" do
|
|
4
4
|
let(:client) { create_client }
|
5
5
|
let(:user) { client.users.create(email: mock_email, name: mock_uuid, verified: true) }
|
6
6
|
|
7
|
-
include_examples "zendesk
|
7
|
+
include_examples "zendesk#resource", {
|
8
8
|
:create_params => lambda { { value: "ey+#{mock_uuid}@example.org", type: "email", user_id: user.id } },
|
9
9
|
:update_params => lambda { { verified: true } },
|
10
10
|
:fetch_params => lambda { |uc| { "user_id" => uc.user_id, "id" => uc.id } },
|
data/spec/users_spec.rb
CHANGED
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe "users" do
|
4
4
|
let(:client) { create_client }
|
5
5
|
|
6
|
-
include_examples "zendesk
|
6
|
+
include_examples "zendesk#resource", {
|
7
7
|
:collection => lambda { client.users },
|
8
8
|
:create_params => lambda { { email: mock_email, name: mock_uuid, verified: true } },
|
9
9
|
:update_params => lambda { { name: mock_uuid } },
|
data/spec/views_spec.rb
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Zendesk2::Client do
|
4
|
+
let(:client) { create_client }
|
5
|
+
|
6
|
+
context "with an organization" do
|
7
|
+
let!(:organization) { client.organizations.create!(name: mock_uuid) }
|
8
|
+
|
9
|
+
include_examples "zendesk#resource", {
|
10
|
+
:collection => lambda { client.views },
|
11
|
+
:create_params => lambda {
|
12
|
+
{
|
13
|
+
:title => mock_uuid,
|
14
|
+
:conditions => {
|
15
|
+
"any" => [ {"field" => "organization_id", "operator" => "is", "value" => organization.identity.to_s } ],
|
16
|
+
"all" => [ {"field" => "status", "operator" => "is", "value" => "pending" } ],
|
17
|
+
}
|
18
|
+
}
|
19
|
+
},
|
20
|
+
:update_params => lambda { { title: mock_uuid } },
|
21
|
+
:search => false,
|
22
|
+
}
|
23
|
+
|
24
|
+
context "and a view that filters by that organization" do
|
25
|
+
let!(:user) { client.users.create!(email: mock_email, name: mock_uuid, verified: true) }
|
26
|
+
let!(:view) {
|
27
|
+
client.views.create!(
|
28
|
+
:title => mock_uuid,
|
29
|
+
:conditions => {
|
30
|
+
"all" => [ {"field" => "organization_id", "operator" => "is", "value" => organization.identity.to_s } ],
|
31
|
+
}
|
32
|
+
)
|
33
|
+
}
|
34
|
+
|
35
|
+
before {
|
36
|
+
client.memberships.create(user: user, organization: organization)
|
37
|
+
}
|
38
|
+
|
39
|
+
let!(:tickets) {
|
40
|
+
2.times.map {
|
41
|
+
client.tickets.create!(subject: mock_uuid, description: mock_uuid, requester: user, organization: organization)
|
42
|
+
}
|
43
|
+
}
|
44
|
+
|
45
|
+
before {
|
46
|
+
another_organization = client.organizations.create!(name: mock_uuid)
|
47
|
+
another_user = client.users.create!(email: mock_email, name: mock_uuid, verified: true)
|
48
|
+
|
49
|
+
client.memberships.create(user: another_user, organization: another_organization)
|
50
|
+
|
51
|
+
2.times.each {
|
52
|
+
client.tickets.create!(subject: mock_uuid, description: mock_uuid, requester: another_user)
|
53
|
+
}
|
54
|
+
}
|
55
|
+
|
56
|
+
it "should find only that organizations tickets" do
|
57
|
+
expect(view.tickets).to match_array(tickets)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zendesk2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josh Lane
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-07-
|
11
|
+
date: 2015-07-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cistern
|
@@ -103,6 +103,7 @@ files:
|
|
103
103
|
- lib/zendesk2/client/collections/user_fields.rb
|
104
104
|
- lib/zendesk2/client/collections/user_identities.rb
|
105
105
|
- lib/zendesk2/client/collections/users.rb
|
106
|
+
- lib/zendesk2/client/collections/views.rb
|
106
107
|
- lib/zendesk2/client/help_center.rb
|
107
108
|
- lib/zendesk2/client/mock.rb
|
108
109
|
- lib/zendesk2/client/model.rb
|
@@ -130,6 +131,7 @@ files:
|
|
130
131
|
- lib/zendesk2/client/models/user.rb
|
131
132
|
- lib/zendesk2/client/models/user_field.rb
|
132
133
|
- lib/zendesk2/client/models/user_identity.rb
|
134
|
+
- lib/zendesk2/client/models/view.rb
|
133
135
|
- lib/zendesk2/client/real.rb
|
134
136
|
- lib/zendesk2/client/request.rb
|
135
137
|
- lib/zendesk2/client/requests/create_category.rb
|
@@ -147,6 +149,7 @@ files:
|
|
147
149
|
- lib/zendesk2/client/requests/create_user.rb
|
148
150
|
- lib/zendesk2/client/requests/create_user_field.rb
|
149
151
|
- lib/zendesk2/client/requests/create_user_identity.rb
|
152
|
+
- lib/zendesk2/client/requests/create_view.rb
|
150
153
|
- lib/zendesk2/client/requests/destroy_category.rb
|
151
154
|
- lib/zendesk2/client/requests/destroy_forum.rb
|
152
155
|
- lib/zendesk2/client/requests/destroy_group.rb
|
@@ -162,6 +165,7 @@ files:
|
|
162
165
|
- lib/zendesk2/client/requests/destroy_user.rb
|
163
166
|
- lib/zendesk2/client/requests/destroy_user_field.rb
|
164
167
|
- lib/zendesk2/client/requests/destroy_user_identity.rb
|
168
|
+
- lib/zendesk2/client/requests/destroy_view.rb
|
165
169
|
- lib/zendesk2/client/requests/get_assignable_groups.rb
|
166
170
|
- lib/zendesk2/client/requests/get_audits.rb
|
167
171
|
- lib/zendesk2/client/requests/get_categories.rb
|
@@ -211,6 +215,9 @@ files:
|
|
211
215
|
- lib/zendesk2/client/requests/get_user_memberships.rb
|
212
216
|
- lib/zendesk2/client/requests/get_user_organizations.rb
|
213
217
|
- lib/zendesk2/client/requests/get_users.rb
|
218
|
+
- lib/zendesk2/client/requests/get_view.rb
|
219
|
+
- lib/zendesk2/client/requests/get_view_tickets.rb
|
220
|
+
- lib/zendesk2/client/requests/get_views.rb
|
214
221
|
- lib/zendesk2/client/requests/mark_membership_default.rb
|
215
222
|
- lib/zendesk2/client/requests/mark_user_identity_primary.rb
|
216
223
|
- lib/zendesk2/client/requests/search.rb
|
@@ -231,6 +238,7 @@ files:
|
|
231
238
|
- lib/zendesk2/client/requests/update_user.rb
|
232
239
|
- lib/zendesk2/client/requests/update_user_field.rb
|
233
240
|
- lib/zendesk2/client/requests/update_user_identity.rb
|
241
|
+
- lib/zendesk2/client/requests/update_view.rb
|
234
242
|
- lib/zendesk2/error.rb
|
235
243
|
- lib/zendesk2/logger.rb
|
236
244
|
- lib/zendesk2/paged_collection.rb
|
@@ -258,6 +266,7 @@ files:
|
|
258
266
|
- spec/user_fields_spec.rb
|
259
267
|
- spec/user_identities_spec.rb
|
260
268
|
- spec/users_spec.rb
|
269
|
+
- spec/views_spec.rb
|
261
270
|
- zendesk2.gemspec
|
262
271
|
homepage: http://joshualane.com/zendesk2
|
263
272
|
licenses:
|
@@ -305,3 +314,4 @@ test_files:
|
|
305
314
|
- spec/user_fields_spec.rb
|
306
315
|
- spec/user_identities_spec.rb
|
307
316
|
- spec/users_spec.rb
|
317
|
+
- spec/views_spec.rb
|