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,29 +1,17 @@
1
- class Zendesk2::Client
2
- class Real
3
- def update_ticket_field(params={})
4
- id = params.delete("id")
1
+ class Zendesk2::Client::UpdateTicketField < Zendesk2::Client::Request
2
+ request_method :put
3
+ request_path { |r| "/ticket_fields/#{r.ticket_field_id}.json" }
4
+ request_body { |r| { "ticket_field" => r.ticket_field_params } }
5
5
 
6
- request(
7
- :method => :put,
8
- :path => "/ticket_fields/#{id}.json",
9
- :body => {
10
- "ticket_field" => params
11
- },
12
- )
13
- end
6
+ def ticket_field_id
7
+ params.fetch("ticket_field").fetch("id")
14
8
  end
15
- class Mock
16
- def update_ticket_field(params={})
17
- id = params.delete("id")
18
- body = self.find!(:ticket_fields, id).merge!(params)
19
9
 
20
- response(
21
- :method => :put,
22
- :path => "/ticket_fields/#{id}.json",
23
- :body => {
24
- "ticket_field" => body
25
- },
26
- )
27
- end
10
+ def ticket_field_params
11
+ Cistern::Hash.slice(params.fetch("ticket_field"), *Zendesk2::Client::CreateTicketField.accepted_attributes)
12
+ end
13
+
14
+ def mock
15
+ mock_response("ticket_field" => self.find!(:ticket_fields, ticket_field_id).merge!(ticket_field_params))
28
16
  end
29
17
  end
@@ -1,31 +1,17 @@
1
- class Zendesk2::Client
2
- class Real
3
- def update_topic(params={})
4
- id = params.delete("id")
1
+ class Zendesk2::Client::UpdateTopic < Zendesk2::Client::Request
2
+ request_method :put
3
+ request_path { |r| "/topics/#{r.topic_id}.json" }
4
+ request_body { |r| { "topic" => r.topic_params } }
5
5
 
6
- request(
7
- :method => :put,
8
- :path => "/topics/#{id}.json",
9
- :body => {
10
- "topic" => params
11
- },
12
- )
13
- end
6
+ def topic_id
7
+ params.fetch("topic").fetch("id").to_i
14
8
  end
15
- class Mock
16
- def update_topic(params={})
17
- id = params.delete("id")
18
- path = "/topics/#{id}.json"
19
9
 
20
- body = self.find!(:topics, id).merge!(params)
10
+ def topic_params
11
+ Cistern::Hash.slice(params.fetch("topic"), *Zendesk2::Client::CreateTopic.accepted_attributes)
12
+ end
21
13
 
22
- response(
23
- :method => :put,
24
- :path => path,
25
- :body => {
26
- "topic" => body
27
- },
28
- )
29
- end
14
+ def mock
15
+ mock_response("topic" => self.find!(:topics, topic_id).merge!(topic_params))
30
16
  end
31
17
  end
@@ -1,73 +1,58 @@
1
- class Zendesk2::Client
2
- class Real
3
- def update_user(_params={})
4
- params = Cistern::Hash.stringify_keys(_params)
5
- id = params.delete("id")
1
+ class Zendesk2::Client::UpdateUser < Zendesk2::Client::Request
2
+ request_method :put
3
+ request_path { |r| "/users/#{r.user_id}.json" }
4
+ request_body { |r| {"user" => r.user_params } }
6
5
 
7
- request(
8
- :method => :put,
9
- :path => "/users/#{id}.json",
10
- :body => {
11
- "user" => params
12
- },
13
- )
14
- end
6
+ def user_params
7
+ @_user_params ||= Cistern::Hash.slice(params.fetch("user"), *Zendesk2::Client::CreateUser.accepted_attributes)
15
8
  end
16
- class Mock
17
- def update_user(_params={})
18
- params = Cistern::Hash.stringify_keys(_params)
19
- user_id = params.delete("id").to_s
20
- path = "/users/#{user_id}.json"
21
-
22
- email = params["email"]
23
-
24
- other_users = self.data[:users].dup
25
- other_users.delete(user_id)
26
-
27
- if params["external_id"] && other_users.values.find { |o| o["external_id"] == params["external_id"] }
28
- error!(:invalid, details: {"name" => [ { "description" => "External has already been taken" } ]})
29
- end
30
9
 
31
- existing_identity = self.data[:identities].values.find { |i| i["type"] == "email" && i["value"] == email }
32
-
33
- if !email
34
- # nvm
35
- elsif existing_identity && existing_identity["user_id"] != user_id
36
- # email not allowed to conflict across users
37
- error!(:invalid, details: { "email" => [ {
38
- "description" => "Email #{params["email"]} is already being used by another user",
39
- } ] })
40
- elsif existing_identity && existing_identity["user_id"] == user_id
41
- # no-op email already used
42
- else
43
- # add a new identity
44
- user_identity_id = self.class.new_id
10
+ def user_id
11
+ @_user_id ||= params.fetch("user").fetch("id").to_i
12
+ end
45
13
 
46
- user_identity = {
47
- "id" => user_identity_id,
48
- "url" => url_for("/users/#{user_id}/identities/#{user_identity_id}.json"),
49
- "created_at" => Time.now.iso8601,
50
- "updated_at" => Time.now.iso8601,
51
- "type" => "email",
52
- "value" => email,
53
- "verified" => false,
54
- "primary" => false,
55
- "user_id" => user_id,
56
- }
14
+ def mock
15
+ email = user_params["email"]
57
16
 
58
- self.data[:identities][user_identity_id] = user_identity
59
- end
17
+ other_users = service.data[:users].dup
18
+ other_users.delete(user_id)
60
19
 
61
- body = self.find!(:users, user_id).merge!(params)
20
+ external_id = user_params["external_id"]
62
21
 
63
- response(
64
- :method => :put,
65
- :path => path,
66
- :body => {
67
- "user" => body
68
- },
69
- )
22
+ if external_id && other_users.values.find { |o| o["external_id"].to_s == external_id.to_s }
23
+ error!(:invalid, details: {"name" => [ { "description" => "External has already been taken" } ]})
24
+ end
70
25
 
26
+ existing_identity = service.data[:identities].values.find { |i| i["type"] == "email" && i["value"] == email }
27
+
28
+ if !email
29
+ # nvm
30
+ elsif existing_identity && existing_identity["user_id"] != user_id
31
+ # email not allowed to conflict across users
32
+ error!(:invalid, details: { "email" => [ {
33
+ "description" => "Email #{params["email"]} is already being used by another user",
34
+ } ] })
35
+ elsif existing_identity && existing_identity["user_id"] == user_id
36
+ # no-op email already used
37
+ else
38
+ # add a new identity
39
+ user_identity_id = service.serial_id
40
+
41
+ user_identity = {
42
+ "id" => user_identity_id,
43
+ "url" => url_for("/users/#{user_id}/identities/#{user_identity_id}.json"),
44
+ "created_at" => Time.now.iso8601,
45
+ "updated_at" => Time.now.iso8601,
46
+ "type" => "email",
47
+ "value" => email,
48
+ "verified" => false,
49
+ "primary" => false,
50
+ "user_id" => user_id,
51
+ }
52
+
53
+ service.data[:identities][user_identity_id] = user_identity
71
54
  end
55
+
56
+ mock_response("user" => self.find!(:users, user_id).merge!(user_params))
72
57
  end
73
58
  end
@@ -1,28 +1,16 @@
1
- class Zendesk2::Client
2
- class Real
3
- def update_user_field(params={})
4
- id = params.delete("id")
1
+ class Zendesk2::Client::UpdateUserField < Zendesk2::Client::Request
2
+ request_method :put
3
+ request_path { |r| "/user_fields/#{r.user_field_id}.json" }
5
4
 
6
- request(
7
- :method => :put,
8
- :path => "/user_fields/#{id}.json",
9
- :body => {
10
- "user_field" => params
11
- },
12
- )
13
- end
5
+ def user_field_id
6
+ params.fetch("user_field").fetch("id")
14
7
  end
15
- class Mock
16
- def update_user_field(params={})
17
- user_field_id = params.delete("id")
18
8
 
19
- response(
20
- :method => :put,
21
- :path => "/user_fields/#{user_field_id}.json",
22
- :body => {
23
- "user_field" => find!(:user_fields, user_field_id).merge!(params),
24
- },
25
- )
26
- end
9
+ def user_field_params
10
+ Cistern::Hash.slice(params.fetch("user_field"), *Zendesk2::Client::CreateUserField.accepted_attributes)
11
+ end
12
+
13
+ def mock
14
+ mock_response("user_field" => find!(:user_fields, user_field_id).merge!(user_field_params))
27
15
  end
28
16
  end
@@ -1,33 +1,25 @@
1
- class Zendesk2::Client
2
- class Real
3
- def update_user_identity(params={})
4
- id = params.delete("id")
5
- user_id = params.delete("user_id")
6
- path = "/users/#{user_id}/identities/#{id}.json"
1
+ class Zendesk2::Client::UpdateUserIdentity < Zendesk2::Client::Request
2
+ request_path { |r| "/users/#{r.user_id}/identities/#{r.user_identity_id}.json" }
3
+ request_method :put
4
+ request_body { |r| { "identity" => r.user_identity_params } }
7
5
 
8
- request(
9
- :method => :put,
10
- :path => path,
11
- :body => {
12
- "identity" => params
13
- },
14
- )
15
- end
6
+ def self.accepted_attributes
7
+ %w[verified]
16
8
  end
17
- class Mock
18
- def update_user_identity(params={})
19
- id = params.delete("id").to_s
20
- user_id = params.delete("user_id").to_s
21
- path = "/users/#{user_id}/identities/#{id}.json"
22
9
 
23
- body = self.find!(:identities, id).merge!(Cistern::Hash.slice(params, "verified"))
24
- response(
25
- :method => :put,
26
- :path => path,
27
- :body => {
28
- "identity" => body
29
- },
30
- )
31
- end
10
+ def user_id
11
+ params.fetch("user_identity").fetch("user_id")
12
+ end
13
+
14
+ def user_identity_id
15
+ params.fetch("user_identity").fetch("id")
16
+ end
17
+
18
+ def user_identity_params
19
+ Cistern::Hash.slice(params.fetch("user_identity"), *self.class.accepted_attributes)
20
+ end
21
+
22
+ def mock
23
+ mock_response("identity" => self.find!(:identities, user_identity_id).merge!(user_identity_params))
32
24
  end
33
25
  end
@@ -1,38 +1,62 @@
1
1
  class Zendesk2::Client < Cistern::Service
2
2
  USER_AGENT = "Ruby/#{RUBY_VERSION} (#{RUBY_PLATFORM}; #{RUBY_ENGINE}) Zendesk2/#{Zendesk2::VERSION} Faraday/#{Faraday::VERSION}".freeze
3
3
 
4
- collection_path "zendesk2/client/collections"
5
- model_path "zendesk2/client/models"
6
- request_path "zendesk2/client/requests"
7
-
8
- # @fixme might be nice if cistern took care of this
9
- [
10
- [:collection, collection_path],
11
- [:model, model_path],
12
- [:request, request_path],
13
- ].each do |type, path|
14
- Dir[File.expand_path(File.join("../..", path, "**/*.rb"), __FILE__)].sort.each do |file|
15
- send(type, file.gsub(/.*#{path}\/(.*)\.rb/, "\\1"), require: file)
16
- end
17
- end
18
-
19
4
  recognizes :url, :logger, :adapter, :username, :password, :token, :jwt_token
5
+ end
6
+
7
+ def require_resource(resource, options={})
8
+ plural = options[:plural] || "#{resource}s"
9
+ except = Array(options[:except])
10
+ other = Array(options[:and])
11
+
12
+ require "zendesk2/client/models/#{resource}"
13
+ require "zendesk2/client/collections/#{plural}"
14
+
15
+ require "zendesk2/client/requests/create_#{resource}" unless except.include?(:create)
16
+ require "zendesk2/client/requests/destroy_#{resource}" unless except.include?(:destroy)
17
+ require "zendesk2/client/requests/get_#{plural}" unless except.include?(:index)
18
+ require "zendesk2/client/requests/get_#{resource}" unless except.include?(:show)
19
+ require "zendesk2/client/requests/update_#{resource}" unless except.include?(:update)
20
20
 
21
- module Shared
22
- def require_parameters(_params, *requirements)
23
- params = Cistern::Hash.stringify_keys(_params)
24
- params.reject! { |_,v| Zendesk2.blank?(v) }
25
-
26
- if (missing = requirements - params.keys).any?
27
- raise ArgumentError, "missing parameters: #{missing.join(", ")}"
28
- else
29
- values = params.values_at(*requirements)
30
- requirements.size == 1 ? values.first : values
31
- end
32
- end
33
- end
21
+ other.each { |file| require "zendesk2/client/requests/#{file}" }
34
22
  end
35
23
 
36
24
  require 'zendesk2/client/real'
37
25
  require 'zendesk2/client/mock'
26
+ require 'zendesk2/client/request'
27
+ require 'zendesk2/client/model'
28
+ require 'zendesk2/client/collection'
38
29
  require 'zendesk2/client/help_center'
30
+
31
+ require 'zendesk2/client/requests/search'
32
+ require 'zendesk2/client/models/audit_event'
33
+
34
+ require_resource("category", plural: "categories")
35
+ require_resource("forum")
36
+ require_resource("group", and: ["get_assignable_groups"])
37
+ require_resource("user", and: ["search_user", "get_current_user", "mark_user_identity_primary"])
38
+
39
+ require_resource("ticket", and: ["get_requested_tickets", "get_ccd_tickets"])
40
+ require_resource("ticket_audit", except: [:create, :destroy, :update])
41
+ require_resource("ticket_field")
42
+ require_resource("topic")
43
+ require_resource("topic_comment", except: [:update])
44
+ require_resource("ticket_comment", except: [:create, :destroy, :update, :show])
45
+ require_resource("organization", and: [
46
+ "get_organization_users",
47
+ "get_organization_tickets",
48
+ "get_organization_by_external_id",
49
+ "get_organization_memberships",
50
+ "search_organization",
51
+ "get_user_memberships",
52
+ ])
53
+ require_resource("user_field")
54
+ require_resource("user_identity", plural: "user_identities")
55
+
56
+ require "zendesk2/client/models/membership"
57
+ require "zendesk2/client/collections/memberships"
58
+
59
+ require "zendesk2/client/requests/create_membership"
60
+ require "zendesk2/client/requests/destroy_membership"
61
+ require "zendesk2/client/requests/get_membership"
62
+ require "zendesk2/client/requests/mark_membership_default"
@@ -1,7 +1,6 @@
1
- # @abstract Subclass and set #{collection_method}, #{collection_root}, #{model_method}, #{model_root} and #{model}
2
1
  # adds {#create!} method to {Cistern::Collection}.
3
- class Zendesk2::PagedCollection < Zendesk2::Collection
4
- def self.inherited(klass)
2
+ module Zendesk2::PagedCollection
3
+ def self.included(klass)
5
4
  klass.send(:attribute, :count)
6
5
  klass.send(:attribute, :next_page_link, {:aliases => "next_page"})
7
6
  klass.send(:attribute, :previous_page_link, {:aliases => "previous_page"})
@@ -14,7 +13,7 @@ class Zendesk2::PagedCollection < Zendesk2::Collection
14
13
  def model_root; self.class.model_root; end
15
14
 
16
15
  def new_page
17
- page = self.class.new(connection: self.connection)
16
+ page = self.class.new(service: self.service)
18
17
  page.merge_attributes(self.class.scopes.inject({}){|r,k| r.merge(k.to_s => send(k))})
19
18
  page
20
19
  end
@@ -32,7 +31,7 @@ class Zendesk2::PagedCollection < Zendesk2::Collection
32
31
  return to_enum(:each_entry) unless block_given?
33
32
  page = self
34
33
  while page
35
- page.records.each { |r| yield r }
34
+ page.to_a.each { |r| yield r }
36
35
  page = page.next_page
37
36
  end
38
37
  end
@@ -64,12 +63,11 @@ class Zendesk2::PagedCollection < Zendesk2::Collection
64
63
  # Fetch a collection of resources
65
64
  def all(params={})
66
65
  if params["filtered"] && (url = params["url"])
67
- uri = Addressable::URI.parse(url)
68
- query = uri.query_values
66
+ query = Faraday::NestedParamsEncoder.decode(URI.parse(url).query)
69
67
  search(query.delete("query"), query)
70
68
  else
71
69
  scoped_attributes = self.class.scopes.inject({}){|r,k| r.merge(k.to_s => send(k))}.merge(params)
72
- body = connection.send(collection_method, scoped_attributes).body
70
+ body = service.send(collection_method, scoped_attributes).body
73
71
 
74
72
  self.load(body[collection_root]) # 'results' is the key for paged seraches
75
73
  self.merge_attributes(Cistern::Hash.slice(body, "count", "next_page", "previous_page"))
@@ -98,7 +96,9 @@ class Zendesk2::PagedCollection < Zendesk2::Collection
98
96
  else scoped_attributes.merge!("id" => identity_or_hash)
99
97
  end
100
98
 
101
- if data = self.connection.send(model_method, scoped_attributes).body[self.model_root]
99
+ scoped_attributes = {model_root => scoped_attributes}
100
+
101
+ if data = self.service.send(model_method, scoped_attributes).body[self.model_root]
102
102
  new(data)
103
103
  end
104
104
  end
@@ -36,7 +36,7 @@ module Zendesk2::Searchable
36
36
  end
37
37
  end
38
38
 
39
- body = connection.send(self.class.search_request, query, params).body
39
+ body = service.send(self.class.search_request, query, params).body
40
40
 
41
41
  if data = body.delete("results")
42
42
  self.load(data)