zendesk2 1.4.2 → 1.5.3

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.
Files changed (153) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +7 -1
  3. data/lib/zendesk2/attributes.rb +1 -1
  4. data/lib/zendesk2/{collection.rb → client/collection.rb} +22 -17
  5. data/lib/zendesk2/client/collections/categories.rb +2 -1
  6. data/lib/zendesk2/client/collections/forums.rb +2 -1
  7. data/lib/zendesk2/client/collections/groups.rb +4 -3
  8. data/lib/zendesk2/client/collections/help_center/articles.rb +2 -1
  9. data/lib/zendesk2/client/collections/help_center/categories.rb +2 -1
  10. data/lib/zendesk2/client/collections/help_center/sections.rb +2 -1
  11. data/lib/zendesk2/client/collections/memberships.rb +9 -7
  12. data/lib/zendesk2/client/collections/organizations.rb +3 -2
  13. data/lib/zendesk2/client/collections/ticket_audits.rb +5 -4
  14. data/lib/zendesk2/client/collections/ticket_comments.rb +4 -3
  15. data/lib/zendesk2/client/collections/ticket_fields.rb +3 -1
  16. data/lib/zendesk2/client/collections/tickets.rb +2 -1
  17. data/lib/zendesk2/client/collections/topic_comments.rb +2 -1
  18. data/lib/zendesk2/client/collections/topics.rb +2 -1
  19. data/lib/zendesk2/client/collections/user_fields.rb +3 -1
  20. data/lib/zendesk2/client/collections/user_identities.rb +3 -1
  21. data/lib/zendesk2/client/collections/users.rb +3 -2
  22. data/lib/zendesk2/client/help_center.rb +3 -0
  23. data/lib/zendesk2/client/mock.rb +7 -130
  24. data/lib/zendesk2/{model.rb → client/model.rb} +7 -3
  25. data/lib/zendesk2/client/models/audit_event.rb +2 -2
  26. data/lib/zendesk2/client/models/category.rb +8 -8
  27. data/lib/zendesk2/client/models/forum.rb +11 -16
  28. data/lib/zendesk2/client/models/group.rb +8 -13
  29. data/lib/zendesk2/client/models/help_center/article.rb +12 -16
  30. data/lib/zendesk2/client/models/help_center/category.rb +12 -16
  31. data/lib/zendesk2/client/models/help_center/section.rb +12 -16
  32. data/lib/zendesk2/client/models/membership.rb +10 -12
  33. data/lib/zendesk2/client/models/organization.rb +13 -20
  34. data/lib/zendesk2/client/models/ticket.rb +21 -19
  35. data/lib/zendesk2/client/models/ticket_audit.rb +3 -3
  36. data/lib/zendesk2/client/models/ticket_comment.rb +1 -1
  37. data/lib/zendesk2/client/models/ticket_comment_privacy_change.rb +1 -1
  38. data/lib/zendesk2/client/models/ticket_field.rb +5 -13
  39. data/lib/zendesk2/client/models/ticket_metric.rb +1 -1
  40. data/lib/zendesk2/client/models/ticket_voice_comment.rb +1 -1
  41. data/lib/zendesk2/client/models/topic.rb +9 -14
  42. data/lib/zendesk2/client/models/topic_comment.rb +14 -19
  43. data/lib/zendesk2/client/models/user.rb +25 -32
  44. data/lib/zendesk2/client/models/user_field.rb +10 -18
  45. data/lib/zendesk2/client/models/user_identity.rb +9 -18
  46. data/lib/zendesk2/client/real.rb +7 -8
  47. data/lib/zendesk2/client/request.rb +271 -0
  48. data/lib/zendesk2/client/requests/create_category.rb +19 -27
  49. data/lib/zendesk2/client/requests/create_forum.rb +23 -28
  50. data/lib/zendesk2/client/requests/create_group.rb +25 -29
  51. data/lib/zendesk2/client/requests/create_help_center_article.rb +54 -60
  52. data/lib/zendesk2/client/requests/create_help_center_category.rb +35 -47
  53. data/lib/zendesk2/client/requests/create_help_center_section.rb +49 -55
  54. data/lib/zendesk2/client/requests/create_membership.rb +42 -42
  55. data/lib/zendesk2/client/requests/create_organization.rb +30 -40
  56. data/lib/zendesk2/client/requests/create_ticket.rb +76 -85
  57. data/lib/zendesk2/client/requests/create_ticket_field.rb +36 -40
  58. data/lib/zendesk2/client/requests/create_topic.rb +23 -28
  59. data/lib/zendesk2/client/requests/create_topic_comment.rb +27 -31
  60. data/lib/zendesk2/client/requests/create_user.rb +51 -56
  61. data/lib/zendesk2/client/requests/create_user_field.rb +36 -40
  62. data/lib/zendesk2/client/requests/create_user_identity.rb +39 -44
  63. data/lib/zendesk2/client/requests/destroy_category.rb +8 -21
  64. data/lib/zendesk2/client/requests/destroy_forum.rb +8 -23
  65. data/lib/zendesk2/client/requests/destroy_group.rb +8 -21
  66. data/lib/zendesk2/client/requests/destroy_help_center_article.rb +8 -18
  67. data/lib/zendesk2/client/requests/destroy_help_center_category.rb +8 -18
  68. data/lib/zendesk2/client/requests/destroy_help_center_section.rb +10 -18
  69. data/lib/zendesk2/client/requests/destroy_membership.rb +8 -22
  70. data/lib/zendesk2/client/requests/destroy_organization.rb +8 -21
  71. data/lib/zendesk2/client/requests/destroy_ticket.rb +8 -21
  72. data/lib/zendesk2/client/requests/destroy_ticket_field.rb +8 -21
  73. data/lib/zendesk2/client/requests/destroy_topic.rb +8 -23
  74. data/lib/zendesk2/client/requests/destroy_topic_comment.rb +11 -24
  75. data/lib/zendesk2/client/requests/destroy_user.rb +17 -43
  76. data/lib/zendesk2/client/requests/destroy_user_field.rb +7 -22
  77. data/lib/zendesk2/client/requests/destroy_user_identity.rb +10 -25
  78. data/lib/zendesk2/client/requests/get_assignable_groups.rb +8 -16
  79. data/lib/zendesk2/client/requests/get_categories.rb +7 -15
  80. data/lib/zendesk2/client/requests/get_category.rb +11 -22
  81. data/lib/zendesk2/client/requests/get_ccd_tickets.rb +11 -18
  82. data/lib/zendesk2/client/requests/get_current_user.rb +6 -16
  83. data/lib/zendesk2/client/requests/get_forum.rb +11 -23
  84. data/lib/zendesk2/client/requests/get_forums.rb +7 -15
  85. data/lib/zendesk2/client/requests/get_group.rb +9 -23
  86. data/lib/zendesk2/client/requests/get_groups.rb +7 -15
  87. data/lib/zendesk2/client/requests/get_help_center_article.rb +13 -37
  88. data/lib/zendesk2/client/requests/get_help_center_articles.rb +6 -15
  89. data/lib/zendesk2/client/requests/get_help_center_categories.rb +6 -15
  90. data/lib/zendesk2/client/requests/get_help_center_category.rb +13 -37
  91. data/lib/zendesk2/client/requests/get_help_center_section.rb +14 -37
  92. data/lib/zendesk2/client/requests/get_help_center_sections.rb +6 -15
  93. data/lib/zendesk2/client/requests/get_membership.rb +9 -24
  94. data/lib/zendesk2/client/requests/get_organization.rb +9 -22
  95. data/lib/zendesk2/client/requests/get_organization_by_external_id.rb +11 -20
  96. data/lib/zendesk2/client/requests/get_organization_memberships.rb +10 -16
  97. data/lib/zendesk2/client/requests/get_organization_tickets.rb +14 -21
  98. data/lib/zendesk2/client/requests/get_organization_users.rb +12 -20
  99. data/lib/zendesk2/client/requests/get_organizations.rb +7 -16
  100. data/lib/zendesk2/client/requests/get_requested_tickets.rb +12 -18
  101. data/lib/zendesk2/client/requests/get_ticket.rb +9 -23
  102. data/lib/zendesk2/client/requests/get_ticket_audits.rb +12 -18
  103. data/lib/zendesk2/client/requests/get_ticket_comments.rb +10 -19
  104. data/lib/zendesk2/client/requests/get_ticket_field.rb +9 -22
  105. data/lib/zendesk2/client/requests/get_ticket_fields.rb +7 -15
  106. data/lib/zendesk2/client/requests/get_tickets.rb +7 -15
  107. data/lib/zendesk2/client/requests/get_topic.rb +8 -23
  108. data/lib/zendesk2/client/requests/get_topic_comment.rb +12 -28
  109. data/lib/zendesk2/client/requests/get_topic_comments.rb +13 -18
  110. data/lib/zendesk2/client/requests/get_topics.rb +6 -15
  111. data/lib/zendesk2/client/requests/get_user.rb +15 -28
  112. data/lib/zendesk2/client/requests/get_user_field.rb +9 -22
  113. data/lib/zendesk2/client/requests/get_user_identities.rb +11 -18
  114. data/lib/zendesk2/client/requests/get_user_identity.rb +11 -21
  115. data/lib/zendesk2/client/requests/get_user_memberships.rb +12 -18
  116. data/lib/zendesk2/client/requests/get_users.rb +7 -15
  117. data/lib/zendesk2/client/requests/mark_membership_default.rb +17 -28
  118. data/lib/zendesk2/client/requests/mark_user_identity_primary.rb +17 -30
  119. data/lib/zendesk2/client/requests/search.rb +30 -19
  120. data/lib/zendesk2/client/requests/search_help_center_articles.rb +22 -18
  121. data/lib/zendesk2/client/requests/search_organization.rb +40 -28
  122. data/lib/zendesk2/client/requests/search_user.rb +56 -44
  123. data/lib/zendesk2/client/requests/update_category.rb +14 -24
  124. data/lib/zendesk2/client/requests/update_forum.rb +13 -25
  125. data/lib/zendesk2/client/requests/update_group.rb +12 -24
  126. data/lib/zendesk2/client/requests/update_help_center_article.rb +17 -42
  127. data/lib/zendesk2/client/requests/update_help_center_category.rb +17 -42
  128. data/lib/zendesk2/client/requests/update_help_center_section.rb +17 -42
  129. data/lib/zendesk2/client/requests/update_organization.rb +23 -35
  130. data/lib/zendesk2/client/requests/update_ticket.rb +63 -63
  131. data/lib/zendesk2/client/requests/update_ticket_field.rb +12 -24
  132. data/lib/zendesk2/client/requests/update_topic.rb +11 -25
  133. data/lib/zendesk2/client/requests/update_user.rb +47 -62
  134. data/lib/zendesk2/client/requests/update_user_field.rb +11 -23
  135. data/lib/zendesk2/client/requests/update_user_identity.rb +20 -28
  136. data/lib/zendesk2/client.rb +52 -28
  137. data/lib/zendesk2/paged_collection.rb +9 -9
  138. data/lib/zendesk2/searchable.rb +1 -1
  139. data/lib/zendesk2/version.rb +1 -1
  140. data/lib/zendesk2.rb +1 -13
  141. data/spec/categories_spec.rb +132 -0
  142. data/spec/forums_spec.rb +132 -0
  143. data/spec/lib/paged_collection_spec.rb +2 -2
  144. data/spec/memberships_spec.rb +5 -9
  145. data/spec/organizations_spec.rb +176 -25
  146. data/spec/spec_helper.rb +2 -0
  147. data/spec/tickets_spec.rb +2 -2
  148. data/spec/topic_comments_spec.rb +2 -2
  149. data/spec/user_identities_spec.rb +9 -6
  150. data/spec/users_spec.rb +22 -21
  151. data/zendesk2.gemspec +1 -2
  152. metadata +7 -21
  153. data/lib/zendesk2/client/requests/update_topic_comment.rb +0 -37
@@ -1,22 +1,16 @@
1
- class Zendesk2::Client
2
- class Real
3
- def get_user_memberships(params={})
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
- request(
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
- class Mock
16
- def get_user_memberships(params={})
17
- user_id = params["user_id"]
7
+ def user_id
8
+ params.fetch("membership").fetch("user_id").to_i
9
+ end
18
10
 
19
- resources(:memberships, "/users/#{user_id}/organization_memberships.json", "organization_memberships", filter: lambda{|c| c.select { |a| a["user_id"] == user_id }})
20
- end
21
- end # Mock
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
- class Real
3
- def get_users(params={})
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
- request(
7
- :params => page_params,
8
- :method => :get,
9
- :path => "/users.json",
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
- class Real
3
- def mark_membership_default(params={})
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
- path = "/users/#{user_id}/organization_memberships/#{id}/make_default.json"
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
- path = "/users/#{user_id}/organization_memberships/#{id}/make_default.json"
9
+ def user_id
10
+ params.fetch("membership").fetch("user_id").to_i
11
+ end
21
12
 
22
- if (membership = self.find!(:memberships, id)) && membership["user_id"] == user_id
23
- # only one user can be default
24
- other_user_memberships = self.data[:memberships].values.select { |m| m["user_id"] == user_id }
25
- other_user_memberships.each { |i| i["default"] = false }
26
- membership["default"] = true
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
- response(
29
- :method => :put,
30
- :path => path
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
- class Real
3
- def mark_user_identity_primary(params={})
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
- request(
9
- :method => :put,
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
- user_identity = self.find!(:identities, id)
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
- if user_identity && user_identity["user_id"] == user_id
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
- response(
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
- class Real
3
- def search(query, params={})
4
- request(
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
- class Mock
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
- results = collection.values.select { |v| terms.all?{ |term, condition| v[term.to_s].to_s == condition.to_s } }
8
+ def _mock(query, params={})
9
+ @query = query
10
+ setup(params)
11
+ mock
12
+ end
19
13
 
20
- page(params, nil, "/search.json", "results", resources: results, query: {query: query})
21
- end
22
- end # Mock
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
- class Real
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
- class Mock
13
- def search_help_center_articles(query, params={})
14
- terms = Hash[query.split(" ").map { |t| t.split(":") }]
4
+ attr_reader :query
15
5
 
16
- collection = self.data[:help_center_articles].values
6
+ def _mock(query, params={})
7
+ @query = query
8
+ setup(params)
9
+ mock
10
+ end
17
11
 
18
- results = collection.select { |v| terms.all?{ |term, condition| v[term.to_s].to_s == condition.to_s } }
12
+ def _real(query, params={})
13
+ @query = query
14
+ setup(params)
15
+ real
16
+ end
19
17
 
20
- page(params, :help_center_articles, "/search.json", "results", resources: results, query: {query: query})
21
- end
22
- end # Mock
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
- class Real
3
- alias search_organization search
4
- end # Real
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
- class Mock
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
- collection = self.data[:organizations].values
8
+ def _mock(query, params={})
9
+ @query = query
10
+ setup(params)
11
+ mock
12
+ end
12
13
 
13
- # organization name is fuzzy matched
14
- if organization_name = terms.delete("name")
15
- terms.merge!("name" => "*#{organization_name}*")
16
- end
14
+ def _real(query, params={})
15
+ @query = query
16
+ setup(params)
17
+ real
18
+ end
17
19
 
18
- compiled_terms = terms.inject({}) do |r,(term, raw_condition)|
19
- condition = if raw_condition.include?("*")
20
- Regexp.compile(raw_condition.gsub("*", ".*"), Regexp::IGNORECASE)
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
- results = collection.select do |v|
28
- compiled_terms.all? do |term, condition|
29
- condition.is_a?(Regexp) ? condition.match(v[term.to_s]) : v[term.to_s].to_s == condition.to_s
30
- end
31
- end
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
- page(params, :organizations, "/search.json", "results", resources: results, query: {query: query})
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
- end # Mock
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
- class Real
3
- alias search_user search
4
- end # Real
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
- # organization name is fuzzy matched
30
- if organization_name = terms.delete("organization")
31
- terms.merge!("organization" => "*#{organization_name}*")
32
- end
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
- compiled_terms = terms.inject({}) do |r,(term, raw_condition)|
35
- condition = if raw_condition.include?("*")
36
- Regexp.compile(raw_condition.gsub("*", ".*"), Regexp::IGNORECASE)
37
- else
38
- raw_condition
39
- end
40
- r.merge(term => condition)
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
- results = collection.select do |v|
44
- compiled_terms.all? do |term, condition|
45
- condition.is_a?(Regexp) ? condition.match(v[term.to_s]) : v[term.to_s].to_s == condition.to_s
46
- end
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
- page(params, :users, "/search.json", "results", resources: results, query: {query: query})
42
+ # organization name is fuzzy matched
43
+ if organization_name = terms.delete("organization")
44
+ terms.merge!("organization" => "*#{organization_name}*")
50
45
  end
51
- end # Mock
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