class Zendesk2::CreateTicket
Public Class Methods
accepted_attributes()
click to toggle source
# File lib/zendesk2/create_ticket.rb, line 9 def self.accepted_attributes %w(external_id via priority requester requester_id submitter_id assignee_id organization_id subject description custom_fields recipient status collaborator_ids collaborators tags ticket_form_id brand_id) end
Public Instance Methods
mock()
click to toggle source
# File lib/zendesk2/create_ticket.rb, line 18 def mock create_params = ticket_params Zendesk2.blank?(create_params['description']) && error!(:invalid, details: { 'base' => [{ 'description' => 'Description: cannot be blank' }] }) requester_id = create_params.delete('requester_id') set_requester(create_params.delete('requester'), create_params) set_collaborators(create_params) custom_fields = get_custom_fields(create_params.delete('custom_fields') || []) identity = cistern.serial_id record = { 'id' => identity, 'url' => url_for("/tickets/#{identity}.json"), 'created_at' => timestamp, 'updated_at' => timestamp, 'priority' => nil, 'custom_fields' => custom_fields, }.merge(create_params) record['requester_id'] ||= (requester_id && requester_id.to_i) || cistern.current_user['id'] record['submitter_id'] = cistern.current_user['id'].to_i requester = cistern.data[:users][record['requester_id'].to_i] record['organization_id'] ||= requester['organization_id'] if requester cistern.data[:tickets][identity] = record mock_response('ticket' => record) end
ticket_params()
click to toggle source
# File lib/zendesk2/create_ticket.rb, line 14 def ticket_params Cistern::Hash.slice(params.fetch('ticket'), *self.class.accepted_attributes) end
Private Instance Methods
find_or_create_user(user)
click to toggle source
# File lib/zendesk2/create_ticket.rb, line 106 def find_or_create_user(user) return nil unless user['email'] user['name'] ||= user['email'].split('@').first.capitalize known_user = cistern.users.search(email: user['email']).first user_id = (known_user && known_user.identity) || cistern.create_user('user' => user).body['user']['id'] user_id.to_i end
get_custom_fields(requested_custom_fields)
click to toggle source
# File lib/zendesk2/create_ticket.rb, line 70 def get_custom_fields(requested_custom_fields) custom_fields = requested_custom_fields.map do |cf| field_id = cf['id'].to_i if cistern.data[:ticket_fields][field_id] { 'id' => field_id, 'value' => cf['value'] } end end.compact cistern.data[:ticket_fields].each do |field_id, _field| requested_custom_fields.find { |cf| cf['id'] == field_id } || custom_fields << { 'id' => field_id, 'value' => nil } end custom_fields end
set_collaborators(create_params)
click to toggle source
rubocop:disable Style/AccessorMethodName
# File lib/zendesk2/create_ticket.rb, line 88 def set_collaborators(create_params) ids = create_params.delete('collaborator_ids') || [] collaborator_specs = create_params.delete('collaborators') || [] ids += collaborator_specs.map do |spec| case spec when Hash find_or_create_user(spec) when Integer, String cistern.users.get!(spec).identity else raise ArgumentError, "Unprocessable collaborator: #{spec}" end end.compact create_params.merge!('collaborator_ids' => ids) end
set_requester(requester, create_params)
click to toggle source
# File lib/zendesk2/create_ticket.rb, line 55 def set_requester(requester, create_params) return unless requester Zendesk2.blank?(requester['name']) && error!(:invalid, details: { 'requester' => [ { 'description' => 'Requester Name: is too short (minimum is 1 characters)', }, ], }) create_params['requester_id'] = find_or_create_user(requester) end