Class: Zendesk::Ticket

Inherits:
Resource show all
Includes:
Constants, RestObject
Defined in:
lib/zendesk/ticket.rb

Constant Summary

Constants included from Constants

Constants::PRIORITY, Constants::RESTRICTION, Constants::ROLE, Constants::STATUS, Constants::TICKET_TYPE, Constants::VIA

Instance Method Summary collapse

Methods included from RestObject

included

Methods inherited from Resource

create, #load_data

Methods included from Properties

included

Constructor Details

#initialize(attrs = {}) ⇒ Ticket

Returns a new instance of Ticket.



14
15
16
17
18
19
# File 'lib/zendesk/ticket.rb', line 14

def initialize(attrs = {})
  @comments = []
  load_fields
  self.tags= attrs[:tags] || attrs['tags']
  super
end

Instance Method Details

#create_comment(value, is_public = true) ⇒ Object



47
48
49
50
51
52
53
# File 'lib/zendesk/ticket.rb', line 47

def create_comment(value, is_public = true)
  if Zendesk::Comment.create(:ticket_id => self.id, :value => value, :is_public => is_public)
    reload
  else
    false
  end
end

#load_comments(data) ⇒ Object



32
33
34
35
36
37
# File 'lib/zendesk/ticket.rb', line 32

def load_comments(data)
  @comments = []
  data[:comments].each do |comment|
    @comments << Zendesk::Comment.new(comment[:comment])
  end
end

#load_field_entries(data) ⇒ Object

Filling custom field methods from imported data. If field is not pointed in config it will be missed



23
24
25
26
27
28
29
30
# File 'lib/zendesk/ticket.rb', line 23

def load_field_entries(data)
  if data[:ticket_field_entries]
    data[:ticket_field_entries].each do |field_entry|
      method_name = @field_ids.index(field_entry[:ticket_field_entry][:ticket_field_id])
      send("#{method_name}=", field_entry[:ticket_field_entry][:value]) if method_name
    end
  end
end

#load_fieldsObject



83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/zendesk/ticket.rb', line 83

def load_fields
  attr_keys = Zendesk.config['ticket'] || {}
  @field_ids = {}
  field_names = attr_keys.keys
  unless field_names.empty?
    field_names = field_names.map(&:to_sym)
    attr_keys.keys.each do |attr_name|
      @field_ids[attr_name.to_sym]  = attr_keys[attr_name]
    end
    field_names.each{ |field_name| self.class.attributes field_name.to_sym }
  end
end

#tagsObject



75
76
77
# File 'lib/zendesk/ticket.rb', line 75

def tags
  @current_tags.try(:split)
end

#tags=(tags) ⇒ Object



79
80
81
# File 'lib/zendesk/ticket.rb', line 79

def tags=(tags)
  @current_tags = tags.is_a?(Array) ? tags.to_a.join(' ') : tags
end

#to_xmlObject



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/zendesk/ticket.rb', line 55

def to_xml
  result = {}
  (attributes -  @field_ids.keys).each do |obj|
    if val = instance_variable_get(:"@#{obj.to_s}")
      result[obj.to_s.downcase] = val
    end
  end
  
  ticket_field_entries = []
  @field_ids.each_pair do |key, value|
    if val = instance_variable_get(:"@#{key.to_s}")
      ticket_field_entries << { :ticket_field_entry => { :ticket_field_id => value, :value => val.to_s } }
    end
  end
   result[:ticket_field_entries] = ticket_field_entries unless ticket_field_entries.empty?
  
  result[:set_tags] = current_tags if current_tags
  Zendesk.xml_out({:ticket => result})
end

#userObject



39
40
41
42
43
44
45
# File 'lib/zendesk/ticket.rb', line 39

def user
  if assignee_id
    @user ||= Zendesk::User.find(assignee_id)
  else
    @user = nil
  end
end