zendesk2 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ODU3ZjQzNTA5Y2UzYzM5NmEwZDEyM2QyNjk1NmRmYjFhZDliMTkwNg==
4
+ ZDJlNjlkMmU1MDlhNWNmMWRhYmY1MzZlNDcwZjU0NmZmNzc0OGJmNA==
5
5
  data.tar.gz: !binary |-
6
- NTJjNmY4MTVmN2UwYjM5MmY0YmIzODA3YzNiNDI5MWYzNTAxZjdhNw==
6
+ MmNiOGE1OGZlOTRmNzkyM2NjMTFmNjE1MDIxNjc1MmZlYzAyMTc5Zg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- YzA2Y2E0MmI2NzA5MDZmMmRhZjZlNmY3MDQyZDM5YzY4NGU2NWI3NDJjNWNj
10
- MTkyYjJhNzllMDgyNjMxZjAzZGYyMDA5ODVlM2QzNThlNmQ3NjdjNTM1ZWI4
11
- OTFmODQyODVlOTYwNTkzNTE3ODJmZjA2NzlmMGVjMzY1MDhhMTk=
9
+ ZDg2OTJlZDNkNDBlZTViODc5MTljMTI1YjJjNGJjZDdiNjNhZDAxNzU0NTQ5
10
+ OWJiMDNjMzM4MzE2MTgxMGU2MzgzNzY2YTYwNWE5ZWJkNzVmODA1YmNjNmE1
11
+ NGFmNGY0NmFkMDk3ZDY5NDg1MjQ4NDEzNDBmNzcwNzM3Nzk1YTQ=
12
12
  data.tar.gz: !binary |-
13
- MGNkMjE0M2M4OGFmOTQ4MjM2YTU2Y2M1NzRmMTg4NDFmMGEzZDE0YWM0NDA4
14
- N2I3MjE2YTNmMTAzM2ViOTVkYjgxMDJkOWNkZTUzNTM2ZWQ1ZWJjN2EzOGFl
15
- MGZhOTQ2MWY0NDI4OGFhMjM2MGExZDM1ZThlOWU0ZGExZDhjNjA=
13
+ MWQ2NjJhMTNjZGVlOWU1NDQxOGFiYWMxYjZjYWFmNTc2MTEyOTlkZWNhNzM0
14
+ YWMyMmNkYjFlZDI0OTU0NTE5MjNjNjRjNTQxNGU2ZTMwNTkxODIzYzE1YmRk
15
+ NTk2NWU3YzFmMjVlM2I3NGM3YjZmOTdkNTQ5YWUyYWFmNTI2ZTc=
data/Gemfile CHANGED
@@ -7,11 +7,13 @@ gem 'rake'
7
7
  #To avoid warnings from JWT
8
8
  gem 'json', '~> 1.7.7'
9
9
 
10
+ group :development, :test do
11
+ gem 'pry-nav'
12
+ end
13
+
10
14
  group :test do
11
15
  gem 'awesome_print'
12
- gem 'guard-bundler'
13
- gem 'guard-rspec'
14
- gem 'pry-nav'
15
- gem 'rb-fsevent'
16
+ gem 'guard-bundler', require: false
17
+ gem 'guard-rspec', require: false
16
18
  gem 'rspec'
17
19
  end
data/Guardfile CHANGED
@@ -3,7 +3,7 @@ guard 'bundler' do
3
3
  watch(/^.+\.gemspec/)
4
4
  end
5
5
 
6
- guard 'rspec', cmd: 'bundle exec rspec' do
6
+ guard 'rspec', cmd: 'bundle exec rspec', all_on_start: true, all_after_pass: true do
7
7
  watch(%r{^spec/.+_spec\.rb$})
8
8
  watch(%r{^lib/(.+)\.rb$}) { "spec" }
9
9
  watch('spec/spec_helper.rb') { "spec" }
@@ -1,7 +1,7 @@
1
1
  class Zendesk2::Client::Ticket < Zendesk2::Model
2
2
  extend Zendesk2::Attributes
3
3
 
4
- PARAMS = %w[external_id via requester_id submitter_id assignee_id organization_id subject description fields recipient status collaborator_ids tags]
4
+ PARAMS = %w[external_id via requester_id submitter_id assignee_id organization_id subject description custom_fields recipient status collaborator_ids tags]
5
5
 
6
6
  # @return [Integer] Automatically assigned when creating tickets
7
7
  identity :id, type: :integer
@@ -0,0 +1,75 @@
1
+ class Zendesk2::Client::TicketField < Zendesk2::Model
2
+ extend Zendesk2::Attributes
3
+
4
+ PARAMS = %w[type title description position active required collapsed_for_agents regexp_for_validation title_in_portal visible_in_portal editable_in_portal required_in_portal tag custom_field_options]
5
+
6
+ # @return [integer] Automatically assigned upon creation
7
+ identity :id, type: :integer
8
+
9
+ # @return [Boolean] Whether this field is available
10
+ attribute :active, type: :boolean
11
+ # @return [String] If this field should be shown to agents by default or be hidden alongside infrequently used fields
12
+ attribute :collapsed_for_agents, type: :string
13
+ # @return [Date] The time the ticket field was created
14
+ attribute :created_at, type: :date
15
+ # @return [Array] Required and presented for a ticket field of type "tagger"
16
+ attribute :custom_field_options, type: :array
17
+ # @return [String] The description of the purpose of this ticket field, shown to users
18
+ attribute :description, type: :string
19
+ # @return [Boolean] Whether this field is editable by end users
20
+ attribute :editable_in_portal, type: :boolean
21
+ # @return [Integer] A relative position for the ticket fields, determines the order of ticket fields on a ticket
22
+ attribute :position, type: :integer
23
+ # @return [String] Regular expression field only. The validation pattern for a field value to be deemed valid.
24
+ attribute :regexp_for_validation, type: :string
25
+ # @return [Boolean] If this field is not a system basic field that must be present for all tickets on the account
26
+ attribute :removable, type: :boolean
27
+ # @return [Boolean] If it's required for this field to have a value when updated by agents
28
+ attribute :required, type: :boolean
29
+ # @return [Boolean] If it's required for this field to have a value when updated by end users
30
+ attribute :required_in_portal, type: :boolean
31
+ # @return [Array] Presented for a ticket field of type "tickettype", "priority" or "status"
32
+ attribute :system_field_options, type: :array
33
+ # @return [String] A tag value to set for checkbox fields when checked
34
+ attribute :tag, type: :string
35
+ # @return [String] The title of the ticket field
36
+ attribute :title, type: :string
37
+ # @return [String] The title of the ticket field when shown to end users
38
+ attribute :title_in_portal, type: :string
39
+ # @return [String] The type of the ticket field
40
+ attribute :type, type: :string
41
+ # @return [Date] The time of the last update of the ticket field
42
+ attribute :updated_at, type: :date
43
+ # @return [String] The URL for this resource
44
+ attribute :url, type: :string
45
+ # @return [Boolean] Whether this field is available to end users
46
+ attribute :visible_in_portal, type: :boolean
47
+
48
+ def save!
49
+ data = if new_record?
50
+ requires :type, :title
51
+
52
+ self.custom_field_options ||= []
53
+
54
+ connection.create_ticket_field(params).body["ticket_field"]
55
+ else
56
+ requires :identity
57
+
58
+ connection.update_ticket_field(params.merge("id" => self.identity)).body["ticket_field"]
59
+ end
60
+
61
+ merge_attributes(data)
62
+ end
63
+
64
+ def destroy!
65
+ requires :identity
66
+
67
+ connection.destroy_ticket_field("id" => self.identity)
68
+ end
69
+
70
+ private
71
+
72
+ def params
73
+ Cistern::Hash.slice(Zendesk2.stringify_keys(attributes), *PARAMS)
74
+ end
75
+ end
@@ -0,0 +1,11 @@
1
+ class Zendesk2::Client::TicketFields < Zendesk2::Collection
2
+ include Zendesk2::Searchable
3
+
4
+ model Zendesk2::Client::TicketField
5
+
6
+ self.collection_method = :get_ticket_fields
7
+ self.collection_root = "ticket_fields"
8
+ self.model_method = :get_ticket_field
9
+ self.model_root = "ticket_field"
10
+ self.search_type = "ticket_field"
11
+ end
@@ -0,0 +1,42 @@
1
+ class Zendesk2::Client
2
+ class Real
3
+ def create_ticket_field(params={})
4
+ request(
5
+ :body => {"ticket_field" => params},
6
+ :method => :post,
7
+ :path => "/ticket_fields.json",
8
+ )
9
+ end
10
+ end # Real
11
+
12
+ class Mock
13
+ def create_ticket_field(params={})
14
+ identity = self.class.new_id
15
+
16
+ record = {
17
+ "active" => true,
18
+ "collapsed_for_agents" => false,
19
+ "created_at" => Time.now.iso8601,
20
+ "description" => params["title"],
21
+ "editable_in_portal" => false,
22
+ "id" => identity,
23
+ "position" => 9999,
24
+ "regexp_for_validation" => nil,
25
+ "required" => true,
26
+ "required_in_portal" => false,
27
+ "title_in_portal" => params["title"],
28
+ "updated_at" => Time.now.iso8601,
29
+ "url" => url_for("/ticket_fields/#{identity}.json"),
30
+ "visible_in_portal" => false,
31
+ }.merge(params)
32
+
33
+ self.data[:ticket_fields][identity] = record
34
+
35
+ response(
36
+ :method => :post,
37
+ :body => {"ticket_field" => record},
38
+ :path => "/ticket_fields.json"
39
+ )
40
+ end
41
+ end # Mock
42
+ end # Zendesk2::Client
@@ -0,0 +1,27 @@
1
+ class Zendesk2::Client
2
+ class Real
3
+ def destroy_ticket_field(params={})
4
+ id = params["id"]
5
+
6
+ request(
7
+ :method => :delete,
8
+ :path => "/ticket_fields/#{id}.json"
9
+ )
10
+ end
11
+ end
12
+
13
+ class Mock
14
+ def destroy_ticket_field(params={})
15
+ id = params["id"]
16
+ body = self.data[:ticket_fields].delete(id)
17
+
18
+ response(
19
+ :method => :delete,
20
+ :path => "/ticket_fields/#{id}.json",
21
+ :body => {
22
+ "ticket_field" => body,
23
+ },
24
+ )
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,34 @@
1
+ class Zendesk2::Client
2
+ class Real
3
+ def get_ticket_field(params={})
4
+ id = params["id"]
5
+
6
+ request(
7
+ :method => :get,
8
+ :path => "/ticket_fields/#{id}.json"
9
+ )
10
+ end
11
+ end # Real
12
+
13
+ class Mock
14
+ def get_ticket_field(params={})
15
+ id = params["id"]
16
+ path = "/ticket_fields/#{id}.json"
17
+
18
+ if body = self.data[:ticket_fields][id]
19
+ response(
20
+ :path => path,
21
+ :body => {
22
+ "ticket_field" => body
23
+ },
24
+ )
25
+ else
26
+ response(
27
+ :path => path,
28
+ :status => 404,
29
+ :body => {"error" => "RecordNotFound", "description" => "Not found"},
30
+ )
31
+ end
32
+ end
33
+ end # Mock
34
+ end
@@ -0,0 +1,18 @@
1
+ class Zendesk2::Client
2
+ class Real
3
+ def get_ticket_fields(params={})
4
+ page_params = Zendesk2.paging_parameters(params)
5
+
6
+ request(
7
+ :params => page_params,
8
+ :method => :get,
9
+ :path => "/ticket_fields.json",
10
+ )
11
+ end
12
+ end
13
+ class Mock
14
+ def get_ticket_fields(params={})
15
+ page(params, :ticket_fields, "/ticket_fields.json", "ticket_fields")
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,29 @@
1
+ class Zendesk2::Client
2
+ class Real
3
+ def update_ticket_field(params={})
4
+ id = params.delete("id")
5
+
6
+ request(
7
+ :method => :put,
8
+ :path => "/ticket_fields/#{id}.json",
9
+ :body => {
10
+ "ticket_field" => params
11
+ },
12
+ )
13
+ end
14
+ end
15
+ class Mock
16
+ def update_ticket_field(params={})
17
+ ticket_field_id = params.delete("id")
18
+ body = self.data[:ticket_fields][ticket_field_id].merge!(params)
19
+
20
+ response(
21
+ :method => :put,
22
+ :path => "/ticket_fields/#{ticket_field_id}.json",
23
+ :body => {
24
+ "ticket_field" => body
25
+ },
26
+ )
27
+ end
28
+ end
29
+ end
@@ -11,6 +11,7 @@ class Zendesk2::Client < Cistern::Service
11
11
  collection :groups
12
12
  collection :organizations
13
13
  collection :ticket_audits
14
+ collection :ticket_fields
14
15
  collection :ticket_metrics
15
16
  collection :tickets
16
17
  collection :ticket_comments
@@ -29,6 +30,7 @@ class Zendesk2::Client < Cistern::Service
29
30
  model :ticket_comment
30
31
  model :ticket_comment_privacy_change
31
32
  model :ticket_create
33
+ model :ticket_field
32
34
  model :ticket_notification
33
35
  model :ticket_voice_comment
34
36
  model :topic
@@ -42,6 +44,7 @@ class Zendesk2::Client < Cistern::Service
42
44
  request :create_group
43
45
  request :create_organization
44
46
  request :create_ticket
47
+ request :create_ticket_field
45
48
  request :create_topic
46
49
  request :create_topic_comment
47
50
  request :create_user
@@ -51,6 +54,7 @@ class Zendesk2::Client < Cistern::Service
51
54
  request :destroy_group
52
55
  request :destroy_organization
53
56
  request :destroy_ticket
57
+ request :destroy_ticket_field
54
58
  request :destroy_topic
55
59
  request :destroy_topic_comment
56
60
  request :destroy_user
@@ -74,6 +78,8 @@ class Zendesk2::Client < Cistern::Service
74
78
  request :get_ticket_audit
75
79
  request :get_ticket_audits
76
80
  request :get_ticket_comments
81
+ request :get_ticket_field
82
+ request :get_ticket_fields
77
83
  request :get_ticket_metric
78
84
  request :get_ticket_metrics
79
85
  request :get_tickets
@@ -94,6 +100,7 @@ class Zendesk2::Client < Cistern::Service
94
100
  request :update_organization
95
101
  request :update_request
96
102
  request :update_ticket
103
+ request :update_ticket_field
97
104
  request :update_topic
98
105
  request :update_topic_comment
99
106
  request :update_user
@@ -129,7 +136,7 @@ class Zendesk2::Client < Cistern::Service
129
136
  @username += "/token" if @auth_token == @token
130
137
  @jwt_token = options[:jwt_token]
131
138
 
132
- raise "Missing required options: :username" unless @username
139
+ raise "Missing required options: :username" unless @username
133
140
  raise "Missing required options: :password or :token" unless password || @token
134
141
 
135
142
  @connection = Faraday.new({url: @url}.merge(connection_options)) do |builder|
@@ -171,18 +178,19 @@ class Zendesk2::Client < Cistern::Service
171
178
 
172
179
  def self.data
173
180
  @data ||= {
174
- :categories => {},
175
- :forums => {},
176
- :groups => {},
177
- :identities => {},
178
- :organizations => {},
179
- :ticket_audits => {},
181
+ :categories => {},
182
+ :forums => {},
183
+ :groups => {},
184
+ :identities => {},
185
+ :organizations => {},
186
+ :ticket_audits => {},
180
187
  :ticket_comments => {},
181
- :ticket_metrics => {},
182
- :tickets => {},
183
- :topic_comments => {},
184
- :topics => {},
185
- :users => {},
188
+ :ticket_fields => {},
189
+ :ticket_metrics => {},
190
+ :tickets => {},
191
+ :topic_comments => {},
192
+ :topics => {},
193
+ :users => {},
186
194
  }
187
195
  end
188
196
 
@@ -1,3 +1,3 @@
1
1
  module Zendesk2
2
- VERSION = "0.4.0"
2
+ VERSION = "0.4.1"
3
3
  end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe "ticket_fields" do
4
+ let(:client) { create_client }
5
+
6
+ it_should_behave_like "a resource", :ticket_fields,
7
+ lambda { { title: Zendesk2.uuid, type: "text" } },
8
+ lambda { { title: Zendesk2.uuid } }
9
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zendesk2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Lane
@@ -117,6 +117,8 @@ files:
117
117
  - lib/zendesk2/client/models/ticket_comment_privacy_change.rb
118
118
  - lib/zendesk2/client/models/ticket_comments.rb
119
119
  - lib/zendesk2/client/models/ticket_create.rb
120
+ - lib/zendesk2/client/models/ticket_field.rb
121
+ - lib/zendesk2/client/models/ticket_fields.rb
120
122
  - lib/zendesk2/client/models/ticket_metric.rb
121
123
  - lib/zendesk2/client/models/ticket_metrics.rb
122
124
  - lib/zendesk2/client/models/ticket_notification.rb
@@ -135,6 +137,7 @@ files:
135
137
  - lib/zendesk2/client/requests/create_group.rb
136
138
  - lib/zendesk2/client/requests/create_organization.rb
137
139
  - lib/zendesk2/client/requests/create_ticket.rb
140
+ - lib/zendesk2/client/requests/create_ticket_field.rb
138
141
  - lib/zendesk2/client/requests/create_topic.rb
139
142
  - lib/zendesk2/client/requests/create_topic_comment.rb
140
143
  - lib/zendesk2/client/requests/create_user.rb
@@ -144,6 +147,7 @@ files:
144
147
  - lib/zendesk2/client/requests/destroy_group.rb
145
148
  - lib/zendesk2/client/requests/destroy_organization.rb
146
149
  - lib/zendesk2/client/requests/destroy_ticket.rb
150
+ - lib/zendesk2/client/requests/destroy_ticket_field.rb
147
151
  - lib/zendesk2/client/requests/destroy_topic.rb
148
152
  - lib/zendesk2/client/requests/destroy_topic_comment.rb
149
153
  - lib/zendesk2/client/requests/destroy_user.rb
@@ -168,6 +172,8 @@ files:
168
172
  - lib/zendesk2/client/requests/get_ticket_audit.rb
169
173
  - lib/zendesk2/client/requests/get_ticket_audits.rb
170
174
  - lib/zendesk2/client/requests/get_ticket_comments.rb
175
+ - lib/zendesk2/client/requests/get_ticket_field.rb
176
+ - lib/zendesk2/client/requests/get_ticket_fields.rb
171
177
  - lib/zendesk2/client/requests/get_ticket_metric.rb
172
178
  - lib/zendesk2/client/requests/get_ticket_metrics.rb
173
179
  - lib/zendesk2/client/requests/get_tickets.rb
@@ -188,6 +194,7 @@ files:
188
194
  - lib/zendesk2/client/requests/update_organization.rb
189
195
  - lib/zendesk2/client/requests/update_request.rb
190
196
  - lib/zendesk2/client/requests/update_ticket.rb
197
+ - lib/zendesk2/client/requests/update_ticket_field.rb
191
198
  - lib/zendesk2/client/requests/update_topic.rb
192
199
  - lib/zendesk2/client/requests/update_topic_comment.rb
193
200
  - lib/zendesk2/client/requests/update_user.rb
@@ -206,6 +213,7 @@ files:
206
213
  - spec/shared/resource.rb
207
214
  - spec/spec_helper.rb
208
215
  - spec/support/client_helper.rb
216
+ - spec/ticket_fields_spec.rb
209
217
  - spec/tickets_spec.rb
210
218
  - spec/topic_comments_spec.rb
211
219
  - spec/topics_spec.rb
@@ -245,6 +253,7 @@ test_files:
245
253
  - spec/shared/resource.rb
246
254
  - spec/spec_helper.rb
247
255
  - spec/support/client_helper.rb
256
+ - spec/ticket_fields_spec.rb
248
257
  - spec/tickets_spec.rb
249
258
  - spec/topic_comments_spec.rb
250
259
  - spec/topics_spec.rb