Class: TaskMapper::Provider::Base::Comment

Inherits:
Hashie::Mash
  • Object
show all
Extended by:
Helper
Includes:
Common, Helper
Defined in:
lib/taskmapper/comment.rb

Overview

The comment class

This will probably one of the most troublesome parts of creating a provider for taskmapper since there are so many different ways comments are handled by different APIs. Keep in mind that if you do need to change/overwrite the methods, you will most likely only need to overwrite #find_by_id, #find_by_attributes, #search, and possibly #initialize as long as their parameters conform to what the find method expects.

Here are the expected attributes:

  • author

  • body

  • id

  • created_at

  • updated_at

  • ticket_id

  • project_id

Direct Known Subclasses

Dummy::Comment, Tester::Comment

Constant Summary collapse

API =

Replace with your comment’s API’s Class

nil

Instance Attribute Summary collapse

Class Method Summary collapse

Methods included from Helper

easy_finder, filter_string, provider_parent, search_by_attribute, search_filter, this_method

Methods included from Common

#destroy, included, #initialize, #respond_to?, #save, #update!

Instance Attribute Details

#systemObject

Returns the value of attribute system.



24
25
26
# File 'lib/taskmapper/comment.rb', line 24

def system
  @system
end

#system_dataObject

Returns the value of attribute system_data.



24
25
26
# File 'lib/taskmapper/comment.rb', line 24

def system_data
  @system_data
end

Class Method Details

.find(project_id, ticket_id, *options) ⇒ Object

Find comment You can also retrieve an array of all comments by not specifying any query.

  • find(<project_id>, <ticket_id>) or find(<project_id>, <ticket_id>, :all) - Returns an array of all comments

  • find(<project_id>, <ticket_id>, ##) - Returns a comment based on that id or some other primary (unique) attribute

  • find(<project_id>, <ticket_id>, [#, #, #]) - Returns many comments with these ids

  • find(<project_id>, <ticket_id>, :first, :name => ‘Project name’) - Returns the first comment based on the comment’s attribute(s)

  • find(<project_id>, <ticket_id>, :last, :name => ‘Some project’) - Returns the last comment based on the comment’s attribute(s)

  • find(<project_id>, <ticket_id>, :all, :name => ‘Test Project’) - Returns all comments based on the given attribute(s)



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/taskmapper/comment.rb', line 36

def self.find(project_id, ticket_id, *options)
  first, attributes = options
  if first.nil? or (first == :all and attributes.nil?)
    self.find_by_attributes(project_id, ticket_id)
  elsif first.is_a? Array
    first.collect { |id| self.find_by_id(project_id, ticket_id, id) }
  elsif first == :first
    comments = attributes.nil? ? self.find_by_attributes(project_id, ticket_id) : self.find_by_attributes(project_id, ticket_id, attributes)
    comments.first
  elsif first == :last
    comments = attributes.nil? ? self.find_by_attributes(project_id, ticket_id) : self.find_by_attributes(project_id, ticket_id, attributes)
    comments.last
  elsif first == :all
    self.find_by_attributes(project_id, ticket_id, attributes)
  else
    self.find_by_id(project_id, ticket_id, first)
  end
end

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

Accepts an attributes hash and returns all comments matching those attributes in an array Should return all comments if the attributes hash is empty Must be defined by the provider



78
79
80
81
82
83
84
# File 'lib/taskmapper/comment.rb', line 78

def self.find_by_attributes(project_id, ticket_id, attributes = {})
  if self::API.is_a? Class
    self.search(project_id, ticket_id, attributes)
  else
    raise TaskMapper::Exception.new("#{self.name}::#{this_method} method must be implemented by the provider")
  end
end

.find_by_id(project_id, ticket_id, id) ⇒ Object

Accepts an integer id and returns the single comment instance Must be defined by the provider



67
68
69
70
71
72
73
# File 'lib/taskmapper/comment.rb', line 67

def self.find_by_id(project_id, ticket_id, id)
  if self::API.is_a? Class
    self.new self::API.find(id, :params => {:project_id => project_id, :ticket_id => ticket_id})
  else
    raise TaskMapper::Exception.new("#{self.name}::#{this_method} method must be implemented by the provider")
  end
end

.first(project_id, ticket_id, *options) ⇒ Object

The first of whatever comment



56
57
58
# File 'lib/taskmapper/comment.rb', line 56

def self.first(project_id, ticket_id, *options)
  self.find(project_id, ticket_id, :first, *options)
end

.last(project_id, ticket_id, *options) ⇒ Object

The last of whatever comment



61
62
63
# File 'lib/taskmapper/comment.rb', line 61

def self.last(project_id, ticket_id, *options)
  self.find(project_id, ticket_id, :last, *options)
end

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

This is a helper method to find



87
88
89
90
91
92
93
94
# File 'lib/taskmapper/comment.rb', line 87

def self.search(project_id, ticket_id, options = {}, limit = 1000)
  if self::API.is_a? Class
    comments = self::API.find(:all, :params => {:project_id => project_id, :ticket_id => ticket_id}).collect { |comment| self.new comment }
    search_by_attribute(comments, options, limit)
  else
    raise TaskMapper::Exception.new("#{self.name}::#{this_method} method must be implemented by the provider")
  end
end