zendesk2 0.4.3 → 0.4.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/.travis.yml +2 -2
- data/Gemfile +1 -1
- data/lib/zendesk2/client/models/membership.rb +56 -0
- data/lib/zendesk2/client/models/memberships.rb +35 -0
- data/lib/zendesk2/client/models/organization.rb +8 -1
- data/lib/zendesk2/client/models/ticket_voice_comment.rb +1 -3
- data/lib/zendesk2/client/models/user.rb +5 -0
- data/lib/zendesk2/client/requests/create_membership.rb +39 -0
- data/lib/zendesk2/client/requests/destroy_membership.rb +27 -0
- data/lib/zendesk2/client/requests/get_membership.rb +35 -0
- data/lib/zendesk2/client/requests/get_organization_memberships.rb +20 -0
- data/lib/zendesk2/client/requests/get_user_memberships.rb +22 -0
- data/lib/zendesk2/client/requests/mark_membership_default.rb +40 -0
- data/lib/zendesk2/client.rb +10 -1
- data/lib/zendesk2/version.rb +1 -1
- data/spec/memberships_spec.rb +53 -0
- data/spec/shared/resource.rb +28 -23
- data/spec/shared/zendesk_resource.rb +64 -0
- data/spec/tickets_spec.rb +3 -1
- data/zendesk2.gemspec +3 -3
- metadata +35 -24
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
YzBjZmVmOGNiNzU1NDgyNTQ0MDBkMGJkYzNiNTVlOTI1OGFiNjhmNA==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 36f8f737437bc490b562bba51cd72fec6ffad957
|
4
|
+
data.tar.gz: 2497c5274d2462c7d601ced33979ee752d344d51
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
OWU1ZDg0OTE3N2I5MGVmMDIwYzBiZjNlOWE1NjlmYzY5MDE2OTc5MGZjODNj
|
11
|
-
MTE5OWZlOWI5YTIyZDA0NDNiNDZkNDY2MGEwMDIwMGYxYzNlNmU=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
MmE4NWQyNWIyMjEzMTU1MTYyODYxYTA5OWFmZTg4NTIyMWRjMGU4ZTNkYjM2
|
14
|
-
NjUzNTRjMGRjYjFhOTMzYzMzZGFmYThhZDYzMGUyMDI1YjdjYzlhZTkwYzkw
|
15
|
-
OWRkNzkzMTk4Y2NhYjY5MDYwNzViODU2ZGFhODE3YmFiNDQzOTQ=
|
6
|
+
metadata.gz: 963a99eddbf1d5533c549360051df1589b619e581b027887dc0abe8551bc71e518a8c70323135160c9ad57cfcdb01f61adeb26fd4ac09a6c9c20993e524f551f
|
7
|
+
data.tar.gz: b316d150a0ce25ba55e744f5e66dd3ebc5a1d957418d76bc2e817a214e26ecc78dc4de2352530ea1310e354f5458a0c74afad051d1ead7be59d9f672803dfece
|
data/.travis.yml
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
+
- "2.1.1"
|
3
4
|
- "1.9.3"
|
4
|
-
- "rbx-19mode"
|
5
5
|
- "jruby-19mode"
|
6
6
|
bundler_args: "--without development"
|
7
7
|
before_install:
|
8
|
-
- "gem install bundler -v 1.2
|
8
|
+
- "gem install bundler -v 1.5.2"
|
9
9
|
script: "bundle exec rake --trace"
|
10
10
|
notifications:
|
11
11
|
email:
|
data/Gemfile
CHANGED
@@ -0,0 +1,56 @@
|
|
1
|
+
class Zendesk2::Client::Membership < Zendesk2::Model
|
2
|
+
extend Zendesk2::Attributes
|
3
|
+
|
4
|
+
PARAMS = %w[user_id organization_id default]
|
5
|
+
|
6
|
+
# @return [Integer] Automatically assigned upon creation
|
7
|
+
identity :id, type: :integer
|
8
|
+
|
9
|
+
# @return [Time] The time the identity got created
|
10
|
+
attribute :created_at, type: :time
|
11
|
+
# @return [Boolean] Is membership the default
|
12
|
+
attribute :default, type: :boolean
|
13
|
+
# @return [Integer] The id of the organization
|
14
|
+
attribute :organization_id, type: :integer
|
15
|
+
# @return [Time] The time the identity got updated
|
16
|
+
attribute :updated_at, type: :time
|
17
|
+
# @return [Integer] The id of the user
|
18
|
+
attribute :user_id, type: :integer
|
19
|
+
# @return [String] The API url of this identity
|
20
|
+
attribute :url, type: :string
|
21
|
+
|
22
|
+
assoc_accessor :organization
|
23
|
+
assoc_accessor :user
|
24
|
+
|
25
|
+
def save!
|
26
|
+
data = if new_record?
|
27
|
+
requires :organization_id, :user_id
|
28
|
+
|
29
|
+
connection.create_membership(params).body["organization_membership"]
|
30
|
+
else
|
31
|
+
requires :identity
|
32
|
+
|
33
|
+
raise ArgumentError, "update not implemented"
|
34
|
+
end
|
35
|
+
merge_attributes(data)
|
36
|
+
end
|
37
|
+
|
38
|
+
def destroy
|
39
|
+
requires :identity
|
40
|
+
|
41
|
+
connection.destroy_membership("id" => self.identity)
|
42
|
+
end
|
43
|
+
|
44
|
+
def default!
|
45
|
+
requires :identity, :user_id
|
46
|
+
|
47
|
+
self.connection.mark_membership_default("user_id" => self.user_id, "id" => self.identity)
|
48
|
+
self.default = true
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def params
|
54
|
+
Cistern::Hash.slice(Zendesk2.stringify_keys(attributes), *PARAMS)
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
class Zendesk2::Client::Memberships < Zendesk2::Collection
|
2
|
+
extend Zendesk2::Attributes
|
3
|
+
|
4
|
+
model Zendesk2::Client::Membership
|
5
|
+
|
6
|
+
attribute :user_id, type: :integer
|
7
|
+
attribute :organization_id, type: :integer
|
8
|
+
|
9
|
+
assoc_accessor :organization
|
10
|
+
assoc_accessor :user
|
11
|
+
|
12
|
+
self.collection_root = "organization_memberships"
|
13
|
+
self.model_method = :get_membership
|
14
|
+
self.model_root = "organization_membership"
|
15
|
+
|
16
|
+
def all(params={})
|
17
|
+
requires_one :user_id, :organization_id
|
18
|
+
|
19
|
+
body = if self.user_id && self.organization_id
|
20
|
+
{ "organization_memberships" => [ connection.get_membership("user_id" => self.user_id, "organization_id" => self.organization_id).body["organization_membership"] ]
|
21
|
+
}
|
22
|
+
elsif self.user_id
|
23
|
+
connection.get_user_memberships("user_id" => self.user_id).body
|
24
|
+
else
|
25
|
+
connection.get_organization_memberships("organization_id" => self.organization_id).body
|
26
|
+
end
|
27
|
+
|
28
|
+
self.load(body[collection_root])
|
29
|
+
self.merge_attributes(Cistern::Hash.slice(body, "count", "next_page", "previous_page"))
|
30
|
+
self
|
31
|
+
end
|
32
|
+
|
33
|
+
scopes << :user_id
|
34
|
+
scopes << :organization_id
|
35
|
+
end
|
@@ -56,6 +56,13 @@ class Zendesk2::Client::Organization < Zendesk2::Model
|
|
56
56
|
connection.users.load(data)
|
57
57
|
end
|
58
58
|
|
59
|
+
# @return [Zendesk2::Client::Memberships] memberships associated with this organization
|
60
|
+
def memberships
|
61
|
+
requires :identity
|
62
|
+
|
63
|
+
connection.memberships(organization: self)
|
64
|
+
end
|
65
|
+
|
59
66
|
# @return [Zendesk2::Client::Tickets] tickets associated with this organization
|
60
67
|
def tickets
|
61
68
|
requires :identity
|
@@ -72,4 +79,4 @@ class Zendesk2::Client::Organization < Zendesk2::Model
|
|
72
79
|
writable_attributes.delete("group_id") if writable_attributes["group_id"].to_s == "0"
|
73
80
|
writable_attributes
|
74
81
|
end
|
75
|
-
|
82
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
class Zendesk2::Client
|
2
2
|
class TicketVoiceComment < AuditEvent
|
3
|
-
# @return [
|
3
|
+
# @return [Integer] Automatically assigned when creating events
|
4
4
|
identity :id, type: :integer
|
5
5
|
|
6
6
|
# @return [Array] The attachments on this comment as Attachment objects
|
@@ -19,8 +19,6 @@ class Zendesk2::Client
|
|
19
19
|
attribute :html_body, type: :string
|
20
20
|
# @return [Boolean] If this is a public comment or an internal agents only note
|
21
21
|
attribute :public, type: :boolean
|
22
|
-
# @return [Boolean] If true, the ticket requester can see this comment
|
23
|
-
attribute :public, type: :boolean
|
24
22
|
# @return [Boolean] If this comment is trusted or marked as being potentially fraudulent
|
25
23
|
attribute :trusted, type: :boolean
|
26
24
|
# @return [String] Has the value VoiceComment
|
@@ -178,6 +178,11 @@ class Zendesk2::Client::User < Zendesk2::Model
|
|
178
178
|
self.connection.user_identities("user_id" => self.identity)
|
179
179
|
end
|
180
180
|
|
181
|
+
# @return [Zendesk2::Client::Memberships] the organization memberships of this user
|
182
|
+
def memberships
|
183
|
+
self.connection.memberships(user: self)
|
184
|
+
end
|
185
|
+
|
181
186
|
private
|
182
187
|
|
183
188
|
def params
|
@@ -0,0 +1,39 @@
|
|
1
|
+
class Zendesk2::Client
|
2
|
+
class Real
|
3
|
+
def create_membership(params={})
|
4
|
+
user_id = params["user_id"]
|
5
|
+
|
6
|
+
request(
|
7
|
+
:body => {"organization_membership" => params },
|
8
|
+
:method => :post,
|
9
|
+
:path => "/users/#{user_id}/organization_memberships.json",
|
10
|
+
)
|
11
|
+
end
|
12
|
+
end # Real
|
13
|
+
|
14
|
+
class Mock
|
15
|
+
def create_membership(params={})
|
16
|
+
user_id = params["user_id"]
|
17
|
+
organization_id = params["organization_id"]
|
18
|
+
|
19
|
+
resource_id = self.class.new_id
|
20
|
+
|
21
|
+
default_membership = false # !self.data[:memberships].values.find { |m| m["user_id"] == user_id && m["default"] }
|
22
|
+
|
23
|
+
resource = {
|
24
|
+
"id" => resource_id,
|
25
|
+
"user_id" => user_id,
|
26
|
+
"organization_id" => organization_id,
|
27
|
+
"default" => default_membership,
|
28
|
+
}
|
29
|
+
|
30
|
+
self.data[:memberships][resource_id] = resource
|
31
|
+
|
32
|
+
response(
|
33
|
+
:method => :post,
|
34
|
+
:body => { "organization_membership" => resource },
|
35
|
+
:path => "/users/#{user_id}/organization_memberships.json",
|
36
|
+
)
|
37
|
+
end
|
38
|
+
end # Mock
|
39
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
class Zendesk2::Client
|
2
|
+
class Real
|
3
|
+
def destroy_membership(params={})
|
4
|
+
id = params["id"]
|
5
|
+
|
6
|
+
request(
|
7
|
+
:method => :delete,
|
8
|
+
:path => "/organization_memberships/#{id}.json"
|
9
|
+
)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class Mock
|
14
|
+
def destroy_membership(params={})
|
15
|
+
id = params["id"]
|
16
|
+
|
17
|
+
body = self.data[:memberships].delete(id)
|
18
|
+
response(
|
19
|
+
:method => :delete,
|
20
|
+
:path => "/organization_memberships/#{id}.json",
|
21
|
+
:body => {
|
22
|
+
"membership" => body,
|
23
|
+
},
|
24
|
+
)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
class Zendesk2::Client
|
2
|
+
class Real
|
3
|
+
def get_membership(params={})
|
4
|
+
id = params["id"]
|
5
|
+
|
6
|
+
request(
|
7
|
+
:method => :get,
|
8
|
+
:path => "/organization_memberships/#{id}.json",
|
9
|
+
)
|
10
|
+
end
|
11
|
+
end # Real
|
12
|
+
|
13
|
+
class Mock
|
14
|
+
def get_membership(params={})
|
15
|
+
membership_id = params["id"]
|
16
|
+
|
17
|
+
path = "/organization_memberships/#{membership_id}.json"
|
18
|
+
|
19
|
+
if body = self.data[:memberships][membership_id]
|
20
|
+
response(
|
21
|
+
:path => path,
|
22
|
+
:body => {
|
23
|
+
"organization_membership" => body
|
24
|
+
},
|
25
|
+
)
|
26
|
+
else
|
27
|
+
response(
|
28
|
+
:path => path,
|
29
|
+
:status => 404,
|
30
|
+
:body => {"error" => "RecordNotFound", "description" => "Not found"},
|
31
|
+
)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end # Mock
|
35
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class Zendesk2::Client
|
2
|
+
class Real
|
3
|
+
def get_organization_memberships(params={})
|
4
|
+
organization_id = params["organization_id"]
|
5
|
+
|
6
|
+
request(
|
7
|
+
:method => :get,
|
8
|
+
:path => "/organizations/#{organization_id}/memberships.json",
|
9
|
+
)
|
10
|
+
end
|
11
|
+
end # Real
|
12
|
+
|
13
|
+
class Mock
|
14
|
+
def get_organization_memberships(params={})
|
15
|
+
organization_id = params["organization_id"]
|
16
|
+
|
17
|
+
page(params, :memberships, "/organizations/#{organization_id}/memberships.json", "organization_memberships", filter: lambda { |c| c.select { |m| m["organization_id"] == organization_id } })
|
18
|
+
end
|
19
|
+
end # Mock
|
20
|
+
end
|
@@ -0,0 +1,22 @@
|
|
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)
|
6
|
+
|
7
|
+
request(
|
8
|
+
:params => page_params,
|
9
|
+
:method => :get,
|
10
|
+
:path => "/users/#{user_id}/organization_memberships.json",
|
11
|
+
)
|
12
|
+
end
|
13
|
+
end # Real
|
14
|
+
|
15
|
+
class Mock
|
16
|
+
def get_user_memberships(params={})
|
17
|
+
user_id = params["user_id"]
|
18
|
+
|
19
|
+
page(params, :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
|
22
|
+
end
|
@@ -0,0 +1,40 @@
|
|
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")
|
6
|
+
|
7
|
+
path = "/users/#{user_id}/organization_memberships/#{id}/make_default.json"
|
8
|
+
|
9
|
+
request(
|
10
|
+
:method => :put,
|
11
|
+
:path => path,
|
12
|
+
)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
class Mock
|
16
|
+
def mark_membership_default(params={})
|
17
|
+
id = params.delete("id")
|
18
|
+
user_id = params.delete("user_id")
|
19
|
+
|
20
|
+
path = "/users/#{user_id}/organization_memberships/#{id}/make_default.json"
|
21
|
+
|
22
|
+
if (membership = self.data[: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
|
27
|
+
|
28
|
+
response(
|
29
|
+
:method => :put,
|
30
|
+
:path => path
|
31
|
+
)
|
32
|
+
else
|
33
|
+
response(
|
34
|
+
:path => path,
|
35
|
+
:status => 404
|
36
|
+
)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/lib/zendesk2/client.rb
CHANGED
@@ -9,6 +9,7 @@ class Zendesk2::Client < Cistern::Service
|
|
9
9
|
collection :categories
|
10
10
|
collection :forums
|
11
11
|
collection :groups
|
12
|
+
collection :memberships
|
12
13
|
collection :organizations
|
13
14
|
collection :ticket_audits
|
14
15
|
collection :ticket_fields
|
@@ -22,6 +23,7 @@ class Zendesk2::Client < Cistern::Service
|
|
22
23
|
model :category
|
23
24
|
model :forum
|
24
25
|
model :group
|
26
|
+
model :membership
|
25
27
|
model :organization
|
26
28
|
model :ticket
|
27
29
|
model :ticket_audit
|
@@ -42,6 +44,7 @@ class Zendesk2::Client < Cistern::Service
|
|
42
44
|
request :create_category
|
43
45
|
request :create_forum
|
44
46
|
request :create_group
|
47
|
+
request :create_membership
|
45
48
|
request :create_organization
|
46
49
|
request :create_ticket
|
47
50
|
request :create_ticket_field
|
@@ -52,6 +55,7 @@ class Zendesk2::Client < Cistern::Service
|
|
52
55
|
request :destroy_category
|
53
56
|
request :destroy_forum
|
54
57
|
request :destroy_group
|
58
|
+
request :destroy_membership
|
55
59
|
request :destroy_organization
|
56
60
|
request :destroy_ticket
|
57
61
|
request :destroy_ticket_field
|
@@ -68,6 +72,9 @@ class Zendesk2::Client < Cistern::Service
|
|
68
72
|
request :get_forums
|
69
73
|
request :get_group
|
70
74
|
request :get_groups
|
75
|
+
request :get_membership
|
76
|
+
request :get_user_memberships
|
77
|
+
request :get_organization_memberships
|
71
78
|
request :get_organization
|
72
79
|
request :get_organization_by_external_id
|
73
80
|
request :get_organization_tickets
|
@@ -91,9 +98,10 @@ class Zendesk2::Client < Cistern::Service
|
|
91
98
|
request :get_user_identities
|
92
99
|
request :get_user_identity
|
93
100
|
request :get_users
|
101
|
+
request :mark_membership_default
|
102
|
+
request :mark_user_identity_primary
|
94
103
|
request :search
|
95
104
|
request :search_user
|
96
|
-
request :mark_user_identity_primary
|
97
105
|
request :update_category
|
98
106
|
request :update_forum
|
99
107
|
request :update_group
|
@@ -182,6 +190,7 @@ class Zendesk2::Client < Cistern::Service
|
|
182
190
|
:forums => {},
|
183
191
|
:groups => {},
|
184
192
|
:identities => {},
|
193
|
+
:memberships => {},
|
185
194
|
:organizations => {},
|
186
195
|
:ticket_audits => {},
|
187
196
|
:ticket_comments => {},
|
data/lib/zendesk2/version.rb
CHANGED
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "memberships" do
|
4
|
+
let(:client) { create_client }
|
5
|
+
let(:user) { client.users.create!(email: "zendesk2+#{Zendesk2.uuid}@example.org", name: Zendesk2.uuid, verified: true) }
|
6
|
+
let(:organization) { client.organizations.create!(name: Zendesk2.uuid) }
|
7
|
+
|
8
|
+
include_examples "zendesk resource", {
|
9
|
+
:params => lambda { {organization_id: organization.id, user_id: user.id} },
|
10
|
+
:collection => lambda { client.memberships(user: user) },
|
11
|
+
:paged => false,
|
12
|
+
:update => false,
|
13
|
+
:search => false,
|
14
|
+
}
|
15
|
+
|
16
|
+
it "should be marked as default" do
|
17
|
+
membership = client.memberships.create!(organization: organization, user: user)
|
18
|
+
another_organization = client.organizations.create!(name: Zendesk2.uuid)
|
19
|
+
|
20
|
+
another_membership = client.memberships.create!(organization: another_organization, user: user)
|
21
|
+
|
22
|
+
membership.default.should be_false # for some reason
|
23
|
+
another_membership.default.should be_false
|
24
|
+
|
25
|
+
expect { another_membership.default! }.to change { another_membership.reload.default }.from(false).to(true)
|
26
|
+
|
27
|
+
membership.reload.default.should be_false
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should get an organization's memberships" do
|
31
|
+
another_user = client.users.create!(email: "zendesk2+#{Zendesk2.uuid}@example.org", name: Zendesk2.uuid, verified: true)
|
32
|
+
another_organization = client.organizations.create!(name: Zendesk2.uuid)
|
33
|
+
|
34
|
+
another_organization.memberships.create!(user: another_user)
|
35
|
+
another_organization.memberships.create!(user: user)
|
36
|
+
organization.memberships.create!(user: another_user)
|
37
|
+
|
38
|
+
organization.memberships.size.should == 1
|
39
|
+
another_organization.memberships.size.should == 2
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should get an user's memberships" do
|
43
|
+
another_user = client.users.create!(email: "zendesk2+#{Zendesk2.uuid}@example.org", name: Zendesk2.uuid, verified: true)
|
44
|
+
another_organization = client.organizations.create!(name: Zendesk2.uuid)
|
45
|
+
|
46
|
+
another_organization.memberships.create!(user: another_user)
|
47
|
+
user_membership = another_organization.memberships.create!(user: user)
|
48
|
+
organization.memberships.create!(user: another_user)
|
49
|
+
|
50
|
+
user.memberships.to_a.should == [user_membership]
|
51
|
+
another_user.memberships.size.should == 2
|
52
|
+
end
|
53
|
+
end
|
data/spec/shared/resource.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
shared_examples "a resource" do |_collection, _params, _update_params, _options|
|
1
|
+
shared_examples "a resource" do |_collection, _params, _update_params, _options={}|
|
2
2
|
let(:options) { _options || {} }
|
3
3
|
let(:collection) { options[:collection] ? instance_exec(&options[:collection]) : client.send(_collection) }
|
4
4
|
let(:params) { instance_exec(&_params) || {} }
|
@@ -12,36 +12,40 @@ shared_examples "a resource" do |_collection, _params, _update_params, _options|
|
|
12
12
|
|
13
13
|
it "by fetching a specific record" do
|
14
14
|
record = collection.create!(params)
|
15
|
-
collection.get(fetch_params.call(record)).should == record
|
15
|
+
collection.get!(fetch_params.call(record)).should == record
|
16
16
|
end
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
18
|
+
if _options.fetch(:paged, true)
|
19
|
+
context "that is paged" do
|
20
|
+
before(:each) do
|
21
|
+
3.times.each { collection.create!(instance_exec(&_params)) }
|
22
|
+
end
|
22
23
|
|
23
|
-
|
24
|
-
|
25
|
-
|
24
|
+
it "by retrieving the first page" do
|
25
|
+
collection.all("per_page" => "1").size.should == 1
|
26
|
+
end
|
26
27
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
28
|
+
it "by retrieving the next page" do
|
29
|
+
first_page = collection.all("per_page" => 1)
|
30
|
+
second_page = collection.all("per_page" => 1).next_page
|
31
|
+
second_page.should_not == first_page
|
32
|
+
end
|
32
33
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
34
|
+
it "by retrieving the previous page" do
|
35
|
+
first_page = collection.all("per_page" => "1")
|
36
|
+
previous_to_second_page = collection.all("per_page" => 1).next_page.previous_page
|
37
|
+
previous_to_second_page.should == first_page
|
38
|
+
end
|
37
39
|
end
|
38
40
|
end
|
39
41
|
|
40
|
-
|
41
|
-
record
|
42
|
-
|
43
|
-
|
44
|
-
|
42
|
+
if _options.fetch(:update, true)
|
43
|
+
it "by updating a record" do
|
44
|
+
record = collection.create!(params)
|
45
|
+
record.merge_attributes(update_params)
|
46
|
+
record.save
|
47
|
+
update_params.each {|k,v| record.send(k).should == v}
|
48
|
+
end
|
45
49
|
end
|
46
50
|
|
47
51
|
it "by destroying a record" do
|
@@ -55,6 +59,7 @@ shared_examples "a resource" do |_collection, _params, _update_params, _options|
|
|
55
59
|
# Search index takes 2-3 minutes according to the docs
|
56
60
|
it "should search" do
|
57
61
|
pending unless Zendesk2::Client.mocking?
|
62
|
+
pending unless collection.is_a?(Zendesk2::Searchable)
|
58
63
|
record = collection.create!(params)
|
59
64
|
collection.search(params).should include(record)
|
60
65
|
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
shared_examples "zendesk resource" do |options={}|
|
2
|
+
let(:collection) { instance_exec(&options[:collection]) }
|
3
|
+
let(:params) { instance_exec(&options[:params]) || {} }
|
4
|
+
let(:update_params) { instance_exec(&options[:update_params]) }
|
5
|
+
let(:fetch_params) { options[:fetch_params] || lambda { |r| r.identity } }
|
6
|
+
|
7
|
+
it "should be created" do
|
8
|
+
record = collection.create!(params)
|
9
|
+
record.identity.should_not be_nil
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should be fetched" do
|
13
|
+
record = collection.create!(params)
|
14
|
+
collection.get!(fetch_params.call(record)).should == record
|
15
|
+
end
|
16
|
+
|
17
|
+
if options.fetch(:paged, true)
|
18
|
+
context "paging" do
|
19
|
+
before(:each) do
|
20
|
+
3.times.each { collection.create!(instance_exec(&_params)) }
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should retrieve first page" do
|
24
|
+
collection.all("per_page" => "1").size.should == 1
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should retrieve next page" do
|
28
|
+
first_page = collection.all("per_page" => 1)
|
29
|
+
second_page = collection.all("per_page" => 1).next_page
|
30
|
+
second_page.should_not == first_page
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should retreive previous page" do
|
34
|
+
first_page = collection.all("per_page" => "1")
|
35
|
+
previous_to_second_page = collection.all("per_page" => 1).next_page.previous_page
|
36
|
+
previous_to_second_page.should == first_page
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
if options.fetch(:update, true)
|
42
|
+
it "should be updated" do
|
43
|
+
record = collection.create!(params)
|
44
|
+
record.merge_attributes(update_params)
|
45
|
+
record.save
|
46
|
+
update_params.each {|k,v| record.send(k).should == v}
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should be destroyed" do
|
51
|
+
record = collection.create!(params)
|
52
|
+
record.identity.should_not be_nil
|
53
|
+
record.destroy
|
54
|
+
record.should be_destroyed
|
55
|
+
end
|
56
|
+
|
57
|
+
if options.fetch(:search, true) && Zendesk2::Client.mocking?
|
58
|
+
# Search index takes 2-3 minutes according to the docs
|
59
|
+
it "should search" do
|
60
|
+
record = collection.create!(params)
|
61
|
+
collection.search(params).should include(record)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
data/spec/tickets_spec.rb
CHANGED
@@ -39,6 +39,8 @@ describe "tickets" do
|
|
39
39
|
end
|
40
40
|
|
41
41
|
it "should have empty custom fields by default" do
|
42
|
+
pending if !Zendesk2::Client.mocking?
|
43
|
+
|
42
44
|
ticket.custom_fields.should == []
|
43
45
|
end
|
44
46
|
end
|
@@ -66,7 +68,7 @@ describe "tickets" do
|
|
66
68
|
body = Zendesk2.uuid
|
67
69
|
ticket.comment(body)
|
68
70
|
|
69
|
-
|
71
|
+
ticket.comments.find{|c| c.body == body}.should_not be_nil
|
70
72
|
end
|
71
73
|
end
|
72
74
|
|
data/zendesk2.gemspec
CHANGED
@@ -16,9 +16,9 @@ Gem::Specification.new do |gem|
|
|
16
16
|
gem.require_paths = ["lib"]
|
17
17
|
gem.version = Zendesk2::VERSION
|
18
18
|
|
19
|
-
gem.add_dependency "addressable"
|
19
|
+
gem.add_dependency "addressable", "~> 2.2"
|
20
20
|
gem.add_dependency "cistern", "~> 0.5.1"
|
21
21
|
gem.add_dependency "faraday", "~> 0.8.8"
|
22
|
-
gem.add_dependency "faraday_middleware"
|
23
|
-
gem.add_dependency "jwt"
|
22
|
+
gem.add_dependency "faraday_middleware", "~> 0.8"
|
23
|
+
gem.add_dependency "jwt", "~> 0.1.11"
|
24
24
|
end
|
metadata
CHANGED
@@ -1,85 +1,85 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zendesk2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josh Lane
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-03-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '2.2'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '2.2'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: cistern
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 0.5.1
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 0.5.1
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: faraday
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - ~>
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: 0.8.8
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - ~>
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 0.8.8
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: faraday_middleware
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
61
|
+
version: '0.8'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
68
|
+
version: '0.8'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: jwt
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: 0.1.11
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: 0.1.11
|
83
83
|
description: Zendesk V2 API client
|
84
84
|
email:
|
85
85
|
- me@joshualane.com
|
@@ -87,8 +87,8 @@ executables: []
|
|
87
87
|
extensions: []
|
88
88
|
extra_rdoc_files: []
|
89
89
|
files:
|
90
|
-
- .gitignore
|
91
|
-
- .travis.yml
|
90
|
+
- ".gitignore"
|
91
|
+
- ".travis.yml"
|
92
92
|
- Gemfile
|
93
93
|
- Guardfile
|
94
94
|
- LICENSE
|
@@ -106,6 +106,8 @@ files:
|
|
106
106
|
- lib/zendesk2/client/models/forums.rb
|
107
107
|
- lib/zendesk2/client/models/group.rb
|
108
108
|
- lib/zendesk2/client/models/groups.rb
|
109
|
+
- lib/zendesk2/client/models/membership.rb
|
110
|
+
- lib/zendesk2/client/models/memberships.rb
|
109
111
|
- lib/zendesk2/client/models/organization.rb
|
110
112
|
- lib/zendesk2/client/models/organizations.rb
|
111
113
|
- lib/zendesk2/client/models/ticket.rb
|
@@ -134,6 +136,7 @@ files:
|
|
134
136
|
- lib/zendesk2/client/requests/create_category.rb
|
135
137
|
- lib/zendesk2/client/requests/create_forum.rb
|
136
138
|
- lib/zendesk2/client/requests/create_group.rb
|
139
|
+
- lib/zendesk2/client/requests/create_membership.rb
|
137
140
|
- lib/zendesk2/client/requests/create_organization.rb
|
138
141
|
- lib/zendesk2/client/requests/create_ticket.rb
|
139
142
|
- lib/zendesk2/client/requests/create_ticket_field.rb
|
@@ -144,6 +147,7 @@ files:
|
|
144
147
|
- lib/zendesk2/client/requests/destroy_category.rb
|
145
148
|
- lib/zendesk2/client/requests/destroy_forum.rb
|
146
149
|
- lib/zendesk2/client/requests/destroy_group.rb
|
150
|
+
- lib/zendesk2/client/requests/destroy_membership.rb
|
147
151
|
- lib/zendesk2/client/requests/destroy_organization.rb
|
148
152
|
- lib/zendesk2/client/requests/destroy_ticket.rb
|
149
153
|
- lib/zendesk2/client/requests/destroy_ticket_field.rb
|
@@ -161,8 +165,10 @@ files:
|
|
161
165
|
- lib/zendesk2/client/requests/get_forums.rb
|
162
166
|
- lib/zendesk2/client/requests/get_group.rb
|
163
167
|
- lib/zendesk2/client/requests/get_groups.rb
|
168
|
+
- lib/zendesk2/client/requests/get_membership.rb
|
164
169
|
- lib/zendesk2/client/requests/get_organization.rb
|
165
170
|
- lib/zendesk2/client/requests/get_organization_by_external_id.rb
|
171
|
+
- lib/zendesk2/client/requests/get_organization_memberships.rb
|
166
172
|
- lib/zendesk2/client/requests/get_organization_tickets.rb
|
167
173
|
- lib/zendesk2/client/requests/get_organization_users.rb
|
168
174
|
- lib/zendesk2/client/requests/get_organizations.rb
|
@@ -183,7 +189,9 @@ files:
|
|
183
189
|
- lib/zendesk2/client/requests/get_user.rb
|
184
190
|
- lib/zendesk2/client/requests/get_user_identities.rb
|
185
191
|
- lib/zendesk2/client/requests/get_user_identity.rb
|
192
|
+
- lib/zendesk2/client/requests/get_user_memberships.rb
|
186
193
|
- lib/zendesk2/client/requests/get_users.rb
|
194
|
+
- lib/zendesk2/client/requests/mark_membership_default.rb
|
187
195
|
- lib/zendesk2/client/requests/mark_user_identity_primary.rb
|
188
196
|
- lib/zendesk2/client/requests/search.rb
|
189
197
|
- lib/zendesk2/client/requests/search_user.rb
|
@@ -208,8 +216,10 @@ files:
|
|
208
216
|
- spec/config_spec.rb
|
209
217
|
- spec/forums_spec.rb
|
210
218
|
- spec/groups_spec.rb
|
219
|
+
- spec/memberships_spec.rb
|
211
220
|
- spec/organizations_spec.rb
|
212
221
|
- spec/shared/resource.rb
|
222
|
+
- spec/shared/zendesk_resource.rb
|
213
223
|
- spec/spec_helper.rb
|
214
224
|
- spec/support/client_helper.rb
|
215
225
|
- spec/ticket_fields_spec.rb
|
@@ -229,17 +239,17 @@ require_paths:
|
|
229
239
|
- lib
|
230
240
|
required_ruby_version: !ruby/object:Gem::Requirement
|
231
241
|
requirements:
|
232
|
-
- -
|
242
|
+
- - ">="
|
233
243
|
- !ruby/object:Gem::Version
|
234
244
|
version: '0'
|
235
245
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
236
246
|
requirements:
|
237
|
-
- -
|
247
|
+
- - ">="
|
238
248
|
- !ruby/object:Gem::Version
|
239
249
|
version: '0'
|
240
250
|
requirements: []
|
241
251
|
rubyforge_project:
|
242
|
-
rubygems_version: 2.2.
|
252
|
+
rubygems_version: 2.2.2
|
243
253
|
signing_key:
|
244
254
|
specification_version: 4
|
245
255
|
summary: Zendesk V2 API client
|
@@ -248,8 +258,10 @@ test_files:
|
|
248
258
|
- spec/config_spec.rb
|
249
259
|
- spec/forums_spec.rb
|
250
260
|
- spec/groups_spec.rb
|
261
|
+
- spec/memberships_spec.rb
|
251
262
|
- spec/organizations_spec.rb
|
252
263
|
- spec/shared/resource.rb
|
264
|
+
- spec/shared/zendesk_resource.rb
|
253
265
|
- spec/spec_helper.rb
|
254
266
|
- spec/support/client_helper.rb
|
255
267
|
- spec/ticket_fields_spec.rb
|
@@ -258,4 +270,3 @@ test_files:
|
|
258
270
|
- spec/topics_spec.rb
|
259
271
|
- spec/user_identities_spec.rb
|
260
272
|
- spec/users_spec.rb
|
261
|
-
has_rdoc:
|