Class: Jiraby::Issue

Inherits:
Object
  • Object
show all
Defined in:
lib/jiraby/issue.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(jira_instance, json_data = {}) ⇒ Issue

Returns a new instance of Issue.



6
7
8
9
10
11
# File 'lib/jiraby/issue.rb', line 6

def initialize(jira_instance, json_data={})
  @jira = jira_instance
  @data = Entity.new(json_data)
  # Modifications are stored here until #save is called
  @pending_changes = Entity.new
end

Instance Attribute Details

#dataObject (readonly)

Returns the value of attribute data.



13
14
15
# File 'lib/jiraby/issue.rb', line 13

def data
  @data
end

#jiraObject (readonly)

Returns the value of attribute jira.



13
14
15
# File 'lib/jiraby/issue.rb', line 13

def jira
  @jira
end

#pending_changesObject (readonly)

Returns the value of attribute pending_changes.



13
14
15
# File 'lib/jiraby/issue.rb', line 13

def pending_changes
  @pending_changes
end

Instance Method Details

#[](name_or_id) ⇒ Object

Return the value in field name_or_id.



26
27
28
29
# File 'lib/jiraby/issue.rb', line 26

def [](name_or_id)
  _id = self.field_id(name_or_id)
  return @pending_changes[_id] || @data.fields[_id]
end

#[]=(name_or_id, value) ⇒ Object

Set field name_or_id equal to value.



21
22
23
# File 'lib/jiraby/issue.rb', line 21

def []=(name_or_id, value)
  @pending_changes[self.field_id(name_or_id)] = value
end

#editmetaObject



89
90
91
# File 'lib/jiraby/issue.rb', line 89

def editmeta
  return @jira.get("issue/#{@data.key}/editmeta")
end

#field_id(name_or_id) ⇒ Object

Return a field ID, given a name or ID. name_or_id may be the field's ID (like "subtasks" or "customfield_10001"), or it may be the human-readable field name (like "Sub-Tasks" or "My Custom Field").

TODO: Raise an exception on invalid name_or_id?



36
37
38
39
40
41
42
43
44
45
46
# File 'lib/jiraby/issue.rb', line 36

def field_id(name_or_id)
  if @data.fields.include?(name_or_id)
    return name_or_id
  else
    _id = @jira.field_mapping.key(name_or_id)
    if _id.nil?
      raise InvalidField.new("Invalid field name or ID: #{name_or_id}")
    end
    return _id
  end
end

#field_idsObject

Return a sorted list of valid field IDs for this issue.



85
86
87
# File 'lib/jiraby/issue.rb', line 85

def field_ids
  return @data.fields.keys.sort
end

#has_field?(name_or_id) ⇒ Boolean

Return true if this issue has a field with the given name or ID, false otherwise.

Returns:

  • (Boolean)


50
51
52
53
54
55
56
57
58
# File 'lib/jiraby/issue.rb', line 50

def has_field?(name_or_id)
  begin
    self.field_id(name_or_id)
  rescue InvalidField
    return false
  else
    return true
  end
end

#is_assigned?Boolean

Return true if this issue is assigned to someone, false otherwise.

Returns:

  • (Boolean)


66
67
68
# File 'lib/jiraby/issue.rb', line 66

def is_assigned?
  return !@data.fields.assignee.nil?
end

#is_subtask?Boolean

Return true if this issue is a subtask, false otherwise.

Returns:

  • (Boolean)


61
62
63
# File 'lib/jiraby/issue.rb', line 61

def is_subtask?
  return @data.fields.issuetype.subtask
end

#keyObject

Return this issue's key



16
17
18
# File 'lib/jiraby/issue.rb', line 16

def key
  return @data.key
end

#parentObject

Return this issue's parent key, or nil if this issue has no parent.



71
72
73
74
75
76
77
# File 'lib/jiraby/issue.rb', line 71

def parent
  if is_subtask?
    return @data.fields.parent.key
  else
    return nil
  end
end

#pending_changes?Boolean

Return true if this issue has been modified since saving.

Returns:

  • (Boolean)


94
95
96
# File 'lib/jiraby/issue.rb', line 94

def pending_changes?
  return !@pending_changes.empty?
end

#save!Object

Save this issue by sending a PUT request. Return true if save was successful.



100
101
102
103
104
105
106
107
# File 'lib/jiraby/issue.rb', line 100

def save!
  json_data = {'fields' => @pending_changes}
  # TODO: Handle failed save
  @jira.put("issue/#{@data.key}", json_data)
  @data.fields.merge!(@pending_changes)
  @pending_changes = Entity.new
  return true
end

#subtasksObject

Return this issue's subtask keys



80
81
82
# File 'lib/jiraby/issue.rb', line 80

def subtasks
  return @data.fields.subtasks.collect { |st| st.key }
end