Class: TaskMapper::Provider::Lighthouse::Comment

Inherits:
Base::Comment
  • Object
show all
Defined in:
lib/provider/comment.rb

Overview

The comment class for taskmapper-lighthouse

Due to the way lighthouse handles tickets, comments aren’t really comments, but versions of the ticket.

  • author => user_name (read-only)

  • body => description

  • id => position in the versions array (set by the initializer)

  • created_at

  • updated_at

  • ticket_id => number (read-only)

  • project_id => (set by the initializer)

Constant Summary collapse

API =
::Lighthouse::Ticket

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(ticket, id) ⇒ Comment

Returns a new instance of Comment.



59
60
61
62
63
64
65
66
67
# File 'lib/provider/comment.rb', line 59

def initialize(ticket, id)
  @system_data ||= {}
  return super(ticket) unless ticket.respond_to?('versions') and ticket.versions.respond_to?('[]')
  @system_data[:ticket] = @system_data[:client] = ticket
  @system_data[:version] = ticket.versions[id] 
  self.project_id = ticket.prefix_options[:project_id] 
  self.id = id
  super(@system_data[:version].attributes) 
end

Class Method Details

.create(*options) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/provider/comment.rb', line 45

def self.create(*options)
  attributes = options.first
  ticket_id = attributes.delete(:ticket_id) || attributes.delete('ticket_id')
  project_id = attributes.delete(:project_id) || attributes.delete('project_id')
  ticket = self::API.find(ticket_id, :params => {:project_id => project_id})
  attributes.each do |k, v|
    ticket.send("#{k}=", v)
  end
  versions = ticket.attributes.delete('versions')
  ticket.save
  ticket.attributes['versions'] = versions
  self.find_by_id project_id, ticket_id, ticket.versions.length
end

.find_by_attributes(project_id, ticket_id, attributes = {}) ⇒ Object

A custom find_by_attributes



27
28
29
30
31
32
33
# File 'lib/provider/comment.rb', line 27

def self.find_by_attributes(project_id, ticket_id, attributes = {})
  result = self.search(project_id, ticket_id, attributes)
  result[0].shift
  result[0].collect do |comment|
    self.new(result[1], index_of(result[1].versions, comment)) if !comment.body.blank?
  end.compact
end

.find_by_id(project_id, ticket_id, id) ⇒ Object

A custom find_by_id The “comment” id is it’s index in the versions array. An id of 0 therefore exists and should be the first ticket (original)



21
22
23
# File 'lib/provider/comment.rb', line 21

def self.find_by_id(project_id, ticket_id, id)
  self.new API.find(ticket_id, :params => {:project_id => project_id}), id
end

.index_of(versions, needle) ⇒ Object

The Array#index method doesn’t work for the versions… because it seems they’re all equal.



37
38
39
40
41
42
43
# File 'lib/provider/comment.rb', line 37

def self.index_of(versions, needle)
  result = nil
  versions.each_with_index do |version, index|
    result = index if version.attributes == needle.attributes
  end
  result
end

.search(project_id, ticket_id, options = {}, limit = 1000) ⇒ Object

A custom searcher

It returns a custom result because we need the original ticket to make a comment.



72
73
74
75
76
# File 'lib/provider/comment.rb', line 72

def self.search(project_id, ticket_id, options = {}, limit = 1000)
  ticket = API.find(ticket_id, :params => {:project_id => project_id})
  comments = ticket.versions
  [search_by_attribute(comments, options, limit), ticket]
end

Instance Method Details

#authorObject

The author’s name



79
80
81
# File 'lib/provider/comment.rb', line 79

def author
  user_name
end