zendesk2 1.4.2 → 1.5.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +7 -1
- data/lib/zendesk2/attributes.rb +1 -1
- data/lib/zendesk2/{collection.rb → client/collection.rb} +22 -17
- data/lib/zendesk2/client/collections/categories.rb +2 -1
- data/lib/zendesk2/client/collections/forums.rb +2 -1
- data/lib/zendesk2/client/collections/groups.rb +4 -3
- data/lib/zendesk2/client/collections/help_center/articles.rb +2 -1
- data/lib/zendesk2/client/collections/help_center/categories.rb +2 -1
- data/lib/zendesk2/client/collections/help_center/sections.rb +2 -1
- data/lib/zendesk2/client/collections/memberships.rb +9 -7
- data/lib/zendesk2/client/collections/organizations.rb +3 -2
- data/lib/zendesk2/client/collections/ticket_audits.rb +5 -4
- data/lib/zendesk2/client/collections/ticket_comments.rb +4 -3
- data/lib/zendesk2/client/collections/ticket_fields.rb +3 -1
- data/lib/zendesk2/client/collections/tickets.rb +2 -1
- data/lib/zendesk2/client/collections/topic_comments.rb +2 -1
- data/lib/zendesk2/client/collections/topics.rb +2 -1
- data/lib/zendesk2/client/collections/user_fields.rb +3 -1
- data/lib/zendesk2/client/collections/user_identities.rb +3 -1
- data/lib/zendesk2/client/collections/users.rb +3 -2
- data/lib/zendesk2/client/help_center.rb +3 -0
- data/lib/zendesk2/client/mock.rb +7 -130
- data/lib/zendesk2/{model.rb → client/model.rb} +7 -3
- data/lib/zendesk2/client/models/audit_event.rb +2 -2
- data/lib/zendesk2/client/models/category.rb +8 -8
- data/lib/zendesk2/client/models/forum.rb +11 -16
- data/lib/zendesk2/client/models/group.rb +8 -13
- data/lib/zendesk2/client/models/help_center/article.rb +12 -16
- data/lib/zendesk2/client/models/help_center/category.rb +12 -16
- data/lib/zendesk2/client/models/help_center/section.rb +12 -16
- data/lib/zendesk2/client/models/membership.rb +10 -12
- data/lib/zendesk2/client/models/organization.rb +13 -20
- data/lib/zendesk2/client/models/ticket.rb +21 -19
- data/lib/zendesk2/client/models/ticket_audit.rb +3 -3
- data/lib/zendesk2/client/models/ticket_comment.rb +1 -1
- data/lib/zendesk2/client/models/ticket_comment_privacy_change.rb +1 -1
- data/lib/zendesk2/client/models/ticket_field.rb +5 -13
- data/lib/zendesk2/client/models/ticket_metric.rb +1 -1
- data/lib/zendesk2/client/models/ticket_voice_comment.rb +1 -1
- data/lib/zendesk2/client/models/topic.rb +9 -14
- data/lib/zendesk2/client/models/topic_comment.rb +14 -19
- data/lib/zendesk2/client/models/user.rb +25 -32
- data/lib/zendesk2/client/models/user_field.rb +10 -18
- data/lib/zendesk2/client/models/user_identity.rb +9 -18
- data/lib/zendesk2/client/real.rb +7 -8
- data/lib/zendesk2/client/request.rb +271 -0
- data/lib/zendesk2/client/requests/create_category.rb +19 -27
- data/lib/zendesk2/client/requests/create_forum.rb +23 -28
- data/lib/zendesk2/client/requests/create_group.rb +25 -29
- data/lib/zendesk2/client/requests/create_help_center_article.rb +54 -60
- data/lib/zendesk2/client/requests/create_help_center_category.rb +35 -47
- data/lib/zendesk2/client/requests/create_help_center_section.rb +49 -55
- data/lib/zendesk2/client/requests/create_membership.rb +42 -42
- data/lib/zendesk2/client/requests/create_organization.rb +30 -40
- data/lib/zendesk2/client/requests/create_ticket.rb +76 -85
- data/lib/zendesk2/client/requests/create_ticket_field.rb +36 -40
- data/lib/zendesk2/client/requests/create_topic.rb +23 -28
- data/lib/zendesk2/client/requests/create_topic_comment.rb +27 -31
- data/lib/zendesk2/client/requests/create_user.rb +51 -56
- data/lib/zendesk2/client/requests/create_user_field.rb +36 -40
- data/lib/zendesk2/client/requests/create_user_identity.rb +39 -44
- data/lib/zendesk2/client/requests/destroy_category.rb +8 -21
- data/lib/zendesk2/client/requests/destroy_forum.rb +8 -23
- data/lib/zendesk2/client/requests/destroy_group.rb +8 -21
- data/lib/zendesk2/client/requests/destroy_help_center_article.rb +8 -18
- data/lib/zendesk2/client/requests/destroy_help_center_category.rb +8 -18
- data/lib/zendesk2/client/requests/destroy_help_center_section.rb +10 -18
- data/lib/zendesk2/client/requests/destroy_membership.rb +8 -22
- data/lib/zendesk2/client/requests/destroy_organization.rb +8 -21
- data/lib/zendesk2/client/requests/destroy_ticket.rb +8 -21
- data/lib/zendesk2/client/requests/destroy_ticket_field.rb +8 -21
- data/lib/zendesk2/client/requests/destroy_topic.rb +8 -23
- data/lib/zendesk2/client/requests/destroy_topic_comment.rb +11 -24
- data/lib/zendesk2/client/requests/destroy_user.rb +17 -43
- data/lib/zendesk2/client/requests/destroy_user_field.rb +7 -22
- data/lib/zendesk2/client/requests/destroy_user_identity.rb +10 -25
- data/lib/zendesk2/client/requests/get_assignable_groups.rb +8 -16
- data/lib/zendesk2/client/requests/get_categories.rb +7 -15
- data/lib/zendesk2/client/requests/get_category.rb +11 -22
- data/lib/zendesk2/client/requests/get_ccd_tickets.rb +11 -18
- data/lib/zendesk2/client/requests/get_current_user.rb +6 -16
- data/lib/zendesk2/client/requests/get_forum.rb +11 -23
- data/lib/zendesk2/client/requests/get_forums.rb +7 -15
- data/lib/zendesk2/client/requests/get_group.rb +9 -23
- data/lib/zendesk2/client/requests/get_groups.rb +7 -15
- data/lib/zendesk2/client/requests/get_help_center_article.rb +13 -37
- data/lib/zendesk2/client/requests/get_help_center_articles.rb +6 -15
- data/lib/zendesk2/client/requests/get_help_center_categories.rb +6 -15
- data/lib/zendesk2/client/requests/get_help_center_category.rb +13 -37
- data/lib/zendesk2/client/requests/get_help_center_section.rb +14 -37
- data/lib/zendesk2/client/requests/get_help_center_sections.rb +6 -15
- data/lib/zendesk2/client/requests/get_membership.rb +9 -24
- data/lib/zendesk2/client/requests/get_organization.rb +9 -22
- data/lib/zendesk2/client/requests/get_organization_by_external_id.rb +11 -20
- data/lib/zendesk2/client/requests/get_organization_memberships.rb +10 -16
- data/lib/zendesk2/client/requests/get_organization_tickets.rb +14 -21
- data/lib/zendesk2/client/requests/get_organization_users.rb +12 -20
- data/lib/zendesk2/client/requests/get_organizations.rb +7 -16
- data/lib/zendesk2/client/requests/get_requested_tickets.rb +12 -18
- data/lib/zendesk2/client/requests/get_ticket.rb +9 -23
- data/lib/zendesk2/client/requests/get_ticket_audits.rb +12 -18
- data/lib/zendesk2/client/requests/get_ticket_comments.rb +10 -19
- data/lib/zendesk2/client/requests/get_ticket_field.rb +9 -22
- data/lib/zendesk2/client/requests/get_ticket_fields.rb +7 -15
- data/lib/zendesk2/client/requests/get_tickets.rb +7 -15
- data/lib/zendesk2/client/requests/get_topic.rb +8 -23
- data/lib/zendesk2/client/requests/get_topic_comment.rb +12 -28
- data/lib/zendesk2/client/requests/get_topic_comments.rb +13 -18
- data/lib/zendesk2/client/requests/get_topics.rb +6 -15
- data/lib/zendesk2/client/requests/get_user.rb +15 -28
- data/lib/zendesk2/client/requests/get_user_field.rb +9 -22
- data/lib/zendesk2/client/requests/get_user_identities.rb +11 -18
- data/lib/zendesk2/client/requests/get_user_identity.rb +11 -21
- data/lib/zendesk2/client/requests/get_user_memberships.rb +12 -18
- data/lib/zendesk2/client/requests/get_users.rb +7 -15
- data/lib/zendesk2/client/requests/mark_membership_default.rb +17 -28
- data/lib/zendesk2/client/requests/mark_user_identity_primary.rb +17 -30
- data/lib/zendesk2/client/requests/search.rb +30 -19
- data/lib/zendesk2/client/requests/search_help_center_articles.rb +22 -18
- data/lib/zendesk2/client/requests/search_organization.rb +40 -28
- data/lib/zendesk2/client/requests/search_user.rb +56 -44
- data/lib/zendesk2/client/requests/update_category.rb +14 -24
- data/lib/zendesk2/client/requests/update_forum.rb +13 -25
- data/lib/zendesk2/client/requests/update_group.rb +12 -24
- data/lib/zendesk2/client/requests/update_help_center_article.rb +17 -42
- data/lib/zendesk2/client/requests/update_help_center_category.rb +17 -42
- data/lib/zendesk2/client/requests/update_help_center_section.rb +17 -42
- data/lib/zendesk2/client/requests/update_organization.rb +23 -35
- data/lib/zendesk2/client/requests/update_ticket.rb +63 -63
- data/lib/zendesk2/client/requests/update_ticket_field.rb +12 -24
- data/lib/zendesk2/client/requests/update_topic.rb +11 -25
- data/lib/zendesk2/client/requests/update_user.rb +47 -62
- data/lib/zendesk2/client/requests/update_user_field.rb +11 -23
- data/lib/zendesk2/client/requests/update_user_identity.rb +20 -28
- data/lib/zendesk2/client.rb +52 -28
- data/lib/zendesk2/paged_collection.rb +9 -9
- data/lib/zendesk2/searchable.rb +1 -1
- data/lib/zendesk2/version.rb +1 -1
- data/lib/zendesk2.rb +1 -13
- data/spec/categories_spec.rb +132 -0
- data/spec/forums_spec.rb +132 -0
- data/spec/lib/paged_collection_spec.rb +2 -2
- data/spec/memberships_spec.rb +5 -9
- data/spec/organizations_spec.rb +176 -25
- data/spec/spec_helper.rb +2 -0
- data/spec/tickets_spec.rb +2 -2
- data/spec/topic_comments_spec.rb +2 -2
- data/spec/user_identities_spec.rb +9 -6
- data/spec/users_spec.rb +22 -21
- data/zendesk2.gemspec +1 -2
- metadata +7 -21
- data/lib/zendesk2/client/requests/update_topic_comment.rb +0 -37
@@ -1,22 +1,16 @@
|
|
1
|
-
class Zendesk2::Client
|
2
|
-
|
3
|
-
|
4
|
-
user_id = params["user_id"]
|
5
|
-
page_params = Zendesk2.paging_parameters(params)
|
1
|
+
class Zendesk2::Client::GetUserMemberships < Zendesk2::Client::Request
|
2
|
+
request_method :get
|
3
|
+
request_path { |r| "/users/#{r.user_id}/organization_memberships.json" }
|
6
4
|
|
7
|
-
|
8
|
-
:params => page_params,
|
9
|
-
:method => :get,
|
10
|
-
:path => "/users/#{user_id}/organization_memberships.json",
|
11
|
-
)
|
12
|
-
end
|
13
|
-
end # Real
|
5
|
+
page_params!
|
14
6
|
|
15
|
-
|
16
|
-
|
17
|
-
|
7
|
+
def user_id
|
8
|
+
params.fetch("membership").fetch("user_id").to_i
|
9
|
+
end
|
18
10
|
|
19
|
-
|
20
|
-
|
21
|
-
|
11
|
+
def mock
|
12
|
+
collection = self.data[:memberships].values.select { |m| m["user_id"] == user_id }
|
13
|
+
|
14
|
+
resources(collection, root: "organization_memberships")
|
15
|
+
end
|
22
16
|
end
|
@@ -1,18 +1,10 @@
|
|
1
|
-
class Zendesk2::Client
|
2
|
-
|
3
|
-
|
4
|
-
page_params = Zendesk2.paging_parameters(params)
|
1
|
+
class Zendesk2::Client::GetUsers < Zendesk2::Client::Request
|
2
|
+
request_method :get
|
3
|
+
request_path { "/users.json" }
|
5
4
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
class Mock
|
14
|
-
def get_users(params={})
|
15
|
-
page(params, :users, "/users.json", "users")
|
16
|
-
end
|
5
|
+
page_params!
|
6
|
+
|
7
|
+
def mock(params={})
|
8
|
+
page(:users, params)
|
17
9
|
end
|
18
10
|
end
|
@@ -1,36 +1,25 @@
|
|
1
|
-
class Zendesk2::Client
|
2
|
-
|
3
|
-
|
4
|
-
id = params.delete("id")
|
5
|
-
user_id = params.delete("user_id")
|
1
|
+
class Zendesk2::Client::MarkMembershipDefault < Zendesk2::Client::Request
|
2
|
+
request_method :put
|
3
|
+
request_path { |r| "/users/#{r.user_id}/organization_memberships/#{r.identity}/make_default.json" }
|
6
4
|
|
7
|
-
|
8
|
-
|
9
|
-
request(
|
10
|
-
:method => :put,
|
11
|
-
:path => path,
|
12
|
-
)
|
13
|
-
end
|
5
|
+
def identity
|
6
|
+
params.fetch("membership").fetch("id")
|
14
7
|
end
|
15
|
-
class Mock
|
16
|
-
def mark_membership_default(params={})
|
17
|
-
id = params.delete("id")
|
18
|
-
user_id = params.delete("user_id")
|
19
8
|
|
20
|
-
|
9
|
+
def user_id
|
10
|
+
params.fetch("membership").fetch("user_id").to_i
|
11
|
+
end
|
21
12
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
13
|
+
def mock
|
14
|
+
if (membership = self.find!(:memberships, identity)) && (membership["user_id"] == user_id)
|
15
|
+
# only one user can be default
|
16
|
+
other_user_memberships = self.data[:memberships].values.select { |m| m["user_id"]== user_id }
|
17
|
+
other_user_memberships.each { |i| i["default"] = false }
|
18
|
+
membership["default"] = true
|
27
19
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
)
|
32
|
-
else error!(:not_found)
|
33
|
-
end
|
20
|
+
mock_response(params)
|
21
|
+
else
|
22
|
+
error!(:not_found)
|
34
23
|
end
|
35
24
|
end
|
36
25
|
end
|
@@ -1,37 +1,24 @@
|
|
1
|
-
class Zendesk2::Client
|
2
|
-
|
3
|
-
|
4
|
-
id = params.delete("id")
|
5
|
-
user_id = params.delete("user_id")
|
6
|
-
path = "/users/#{user_id}/identities/#{id}/make_primary.json"
|
1
|
+
class Zendesk2::Client::MarkUserIdentityPrimary < Zendesk2::Client::Request
|
2
|
+
request_path { |r| "/users/#{r.user_id}/identities/#{r.user_identity_id}/make_primary.json" }
|
3
|
+
request_method :put
|
7
4
|
|
8
|
-
|
9
|
-
|
10
|
-
:path => path,
|
11
|
-
)
|
12
|
-
end
|
5
|
+
def user_id
|
6
|
+
params.fetch("user_identity").fetch("user_id")
|
13
7
|
end
|
14
|
-
class Mock
|
15
|
-
def mark_user_identity_primary(params={})
|
16
|
-
id = params.delete("id").to_s
|
17
|
-
user_id = params.delete("user_id").to_s
|
18
|
-
path = "/users/#{user_id}/identities/#{id}/make_primary.json"
|
19
8
|
|
20
|
-
|
9
|
+
def user_identity_id
|
10
|
+
params.fetch("user_identity").fetch("id")
|
11
|
+
end
|
12
|
+
|
13
|
+
def mock
|
14
|
+
user_identity = self.find!(:identities, user_identity_id)
|
15
|
+
|
16
|
+
# only one user can be primary
|
17
|
+
other_user_identities = service.data[:identities].values.select { |i| i["user_id"] == user_id }
|
18
|
+
other_user_identities.map { |i| i["primary"] = false }
|
21
19
|
|
22
|
-
|
23
|
-
# only one user can be primary
|
24
|
-
other_user_identities = self.data[:identities].values.select{|i| i["user_id"] == user_id}
|
25
|
-
other_user_identities.map{|i| i["primary"] = false}
|
26
|
-
user_identity["primary"] = true
|
20
|
+
user_identity.merge!("primary" => true)
|
27
21
|
|
28
|
-
|
29
|
-
:method => :put,
|
30
|
-
:path => path
|
31
|
-
)
|
32
|
-
else
|
33
|
-
error!(:not_found)
|
34
|
-
end
|
35
|
-
end
|
22
|
+
mock_response(nil)
|
36
23
|
end
|
37
24
|
end
|
@@ -1,23 +1,34 @@
|
|
1
|
-
class Zendesk2::Client
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
:method => :get,
|
6
|
-
:params => {query: query}.merge(params),
|
7
|
-
:path => "/search.json",
|
8
|
-
)
|
9
|
-
end
|
10
|
-
end # Real
|
1
|
+
class Zendesk2::Client::Search < Zendesk2::Client::Request
|
2
|
+
request_method :get
|
3
|
+
request_body { |r| { query: r.query } }
|
4
|
+
request_path { |_| "/search.json" }
|
11
5
|
|
12
|
-
|
13
|
-
def search(query, params={})
|
14
|
-
terms = Hash[query.split(" ").map { |t| t.split(":") }]
|
15
|
-
type = terms.delete("type")
|
16
|
-
collection = type.nil? ? self.data.values : self.data[pluralize(type).to_sym]
|
6
|
+
attr_reader :query
|
17
7
|
|
18
|
-
|
8
|
+
def _mock(query, params={})
|
9
|
+
@query = query
|
10
|
+
setup(params)
|
11
|
+
mock
|
12
|
+
end
|
19
13
|
|
20
|
-
|
21
|
-
|
22
|
-
|
14
|
+
def _real(query, params={})
|
15
|
+
@query = query
|
16
|
+
setup(params)
|
17
|
+
real
|
18
|
+
end
|
19
|
+
|
20
|
+
def mock
|
21
|
+
terms = Hash[query.split(" ").map { |t| t.split(":") }]
|
22
|
+
type = terms.delete("type")
|
23
|
+
|
24
|
+
collection = if type.nil?
|
25
|
+
service.data.values
|
26
|
+
else
|
27
|
+
service.data[pluralize(type).to_sym]
|
28
|
+
end
|
29
|
+
|
30
|
+
results = collection.values.select { |v| terms.all?{ |term, condition| v[term].to_s == condition.to_s } }
|
31
|
+
|
32
|
+
page(results, params: {"query" => query}, root: "results")
|
33
|
+
end
|
23
34
|
end
|
@@ -1,23 +1,27 @@
|
|
1
|
-
class Zendesk2::Client
|
2
|
-
|
3
|
-
def search_help_center_articles(query, params={})
|
4
|
-
request(
|
5
|
-
:method => :get,
|
6
|
-
:params => {query: query}.merge(params),
|
7
|
-
:path => "/help_center/articles/search.json",
|
8
|
-
)
|
9
|
-
end
|
10
|
-
end # Real
|
1
|
+
class Zendesk2::Client::SearchHelpCenterArticles < Zendesk2::Client::Request
|
2
|
+
request_path { |_| "/help_center/articles/search.json" }
|
11
3
|
|
12
|
-
|
13
|
-
def search_help_center_articles(query, params={})
|
14
|
-
terms = Hash[query.split(" ").map { |t| t.split(":") }]
|
4
|
+
attr_reader :query
|
15
5
|
|
16
|
-
|
6
|
+
def _mock(query, params={})
|
7
|
+
@query = query
|
8
|
+
setup(params)
|
9
|
+
mock
|
10
|
+
end
|
17
11
|
|
18
|
-
|
12
|
+
def _real(query, params={})
|
13
|
+
@query = query
|
14
|
+
setup(params)
|
15
|
+
real
|
16
|
+
end
|
19
17
|
|
20
|
-
|
21
|
-
|
22
|
-
|
18
|
+
def mock
|
19
|
+
terms = Hash[query.split(" ").map { |t| t.split(":") }]
|
20
|
+
|
21
|
+
collection = self.data[:help_center_articles].values
|
22
|
+
|
23
|
+
results = collection.select { |v| terms.all?{ |term, condition| v[term.to_s].to_s == condition.to_s } }
|
24
|
+
|
25
|
+
page(results, params: {"query" => query}, root: "results")
|
26
|
+
end
|
23
27
|
end
|
@@ -1,36 +1,48 @@
|
|
1
|
-
class Zendesk2::Client
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
class Zendesk2::Client::SearchOrganization < Zendesk2::Client::Request
|
2
|
+
request_method :get
|
3
|
+
request_path { "/search.json" }
|
4
|
+
request_body { |r| { "query" => r.query } }
|
5
5
|
|
6
|
-
|
7
|
-
def search_organization(query, params={})
|
8
|
-
terms = Hash[query.split(" ").map { |t| t.split(":") }]
|
9
|
-
terms.delete("type") # context already provided
|
6
|
+
attr_reader :query
|
10
7
|
|
11
|
-
|
8
|
+
def _mock(query, params={})
|
9
|
+
@query = query
|
10
|
+
setup(params)
|
11
|
+
mock
|
12
|
+
end
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
def _real(query, params={})
|
15
|
+
@query = query
|
16
|
+
setup(params)
|
17
|
+
real
|
18
|
+
end
|
17
19
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
else
|
22
|
-
raw_condition
|
23
|
-
end
|
24
|
-
r.merge(term => condition)
|
25
|
-
end
|
20
|
+
def mock
|
21
|
+
terms = Hash[query.split(" ").map { |t| t.split(":") }]
|
22
|
+
terms.delete("type") # context already provided
|
26
23
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
24
|
+
collection = self.data[:organizations].values
|
25
|
+
|
26
|
+
# organization name is fuzzy matched
|
27
|
+
if organization_name = terms.delete("name")
|
28
|
+
terms.merge!("name" => "*#{organization_name}*")
|
29
|
+
end
|
32
30
|
|
33
|
-
|
31
|
+
compiled_terms = terms.inject({}) do |r,(term, raw_condition)|
|
32
|
+
condition = if raw_condition.include?("*")
|
33
|
+
Regexp.compile(raw_condition.gsub("*", ".*"), Regexp::IGNORECASE)
|
34
|
+
else
|
35
|
+
raw_condition
|
36
|
+
end
|
37
|
+
r.merge(term => condition)
|
34
38
|
end
|
35
|
-
|
39
|
+
|
40
|
+
results = collection.select do |v|
|
41
|
+
compiled_terms.all? do |term, condition|
|
42
|
+
condition.is_a?(Regexp) ? condition.match(v[term.to_s]) : v[term.to_s].to_s == condition.to_s
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
page(results, params: {"query" => query}, root: "results")
|
47
|
+
end
|
36
48
|
end
|
@@ -1,52 +1,64 @@
|
|
1
|
-
class Zendesk2::Client
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
class Mock
|
7
|
-
def search_user(query, params={})
|
8
|
-
terms = Hash[query.split(" ").map { |t| t.split(":") }]
|
9
|
-
terms.delete("type") # context already provided
|
10
|
-
|
11
|
-
collection = self.data[:users].values
|
12
|
-
|
13
|
-
# create a copy of each user mapped to a specific user identity
|
14
|
-
collection = collection.map do |user|
|
15
|
-
self.data[:identities].values.select{|i| i["type"] == "email" && i["user_id"] == user["id"]}.map do |identity|
|
16
|
-
user.merge("email" => identity["value"])
|
17
|
-
end
|
18
|
-
end.flatten
|
19
|
-
|
20
|
-
# allow searching by organization name
|
21
|
-
collection = collection.map do |user|
|
22
|
-
if organization = self.data[:organizations][user["organization_id"].to_s]
|
23
|
-
user.merge("organization" => organization["name"])
|
24
|
-
else
|
25
|
-
user
|
26
|
-
end
|
27
|
-
end
|
1
|
+
class Zendesk2::Client::SearchUser < Zendesk2::Client::Request
|
2
|
+
request_method :get
|
3
|
+
request_path { "/search.json" }
|
4
|
+
request_body { |r| { "query" => r.query } }
|
28
5
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
6
|
+
attr_reader :query
|
7
|
+
|
8
|
+
def _mock(query, params={})
|
9
|
+
@query = query
|
10
|
+
setup(params)
|
11
|
+
mock
|
12
|
+
end
|
13
|
+
|
14
|
+
def _real(query, params={})
|
15
|
+
@query = query
|
16
|
+
setup(params)
|
17
|
+
real
|
18
|
+
end
|
33
19
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
20
|
+
def mock
|
21
|
+
terms = Hash[query.split(" ").map { |t| t.split(":") }]
|
22
|
+
terms.delete("type") # context already provided
|
23
|
+
|
24
|
+
collection = self.data[:users].values
|
25
|
+
|
26
|
+
# create a copy of each user mapped to a specific user identity
|
27
|
+
collection = collection.map do |user|
|
28
|
+
self.data[:identities].values.select{|i| i["type"] == "email" && i["user_id"] == user["id"]}.map do |identity|
|
29
|
+
user.merge("email" => identity["value"])
|
41
30
|
end
|
31
|
+
end.flatten
|
42
32
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
33
|
+
# allow searching by organization name
|
34
|
+
collection = collection.map do |user|
|
35
|
+
if organization = self.data[:organizations][user["organization_id"].to_i]
|
36
|
+
user.merge("organization" => organization["name"])
|
37
|
+
else
|
38
|
+
user
|
47
39
|
end
|
40
|
+
end
|
48
41
|
|
49
|
-
|
42
|
+
# organization name is fuzzy matched
|
43
|
+
if organization_name = terms.delete("organization")
|
44
|
+
terms.merge!("organization" => "*#{organization_name}*")
|
50
45
|
end
|
51
|
-
|
46
|
+
|
47
|
+
compiled_terms = terms.inject({}) do |r,(term, raw_condition)|
|
48
|
+
condition = if raw_condition.include?("*")
|
49
|
+
Regexp.compile(raw_condition.gsub("*", ".*"), Regexp::IGNORECASE)
|
50
|
+
else
|
51
|
+
raw_condition
|
52
|
+
end
|
53
|
+
r.merge(term => condition)
|
54
|
+
end
|
55
|
+
|
56
|
+
results = collection.select do |v|
|
57
|
+
compiled_terms.all? do |term, condition|
|
58
|
+
condition.is_a?(Regexp) ? condition.match(v[term.to_s]) : v[term.to_s].to_s == condition.to_s
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
page(results, params: {"query" => query}, root: "results")
|
63
|
+
end
|
52
64
|
end
|