zendesk2 1.4.2 → 1.5.3

Sign up to get free protection for your applications and to get access to all the features.
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